Software engineering saved my marriage: Debugging the program of everyday life.

How Software Engineering Saved My Marriage

How Software Engineering Saved My Marriage

Decoding the tech world.
Oct. 2 2013 10:45 AM

Debugging the Program of Everyday Life

How software engineering saved my marriage.

(Continued from Page 1)

4. Follow the 90/10 Rule: Here I quote an old law of software optimization: “A program spends 90% of its time in 10% of its code. Humans are very bad at guessing where that 10% lies.” Early on, I thought that the strength of our relationship rested on our shared interests (literature, software) and physical attraction. Looking back, those turned out to contribute a lot less to relationship stability than agreeing on finances, lifestyle, and sarcastic humor. More importantly, we realized each of us needed to have a room of our own where we could be alone. You have a limited amount of resources: Don’t spend them trying to get in sync with your partner on whether the British thriller Utopia is even better than Breaking Bad or going on nature hikes that only one of you enjoys (hint: not me). This is unnecessary optimization, and as comp-sci demigod Donald Knuth has said, “Premature optimization is the root of all evil.”

5. Do the Grunt Work. In the words of computer scientist Mary Shaw: “Less than 10% of the code has to do with the ostensible purpose of the system; the rest deals with input-output, data validation, data structure maintenance, and other housekeeping.” The ostensible purpose of a relationship is love, but if you rely on love to carry you through without the necessary support infrastructure, your relationship will be about as stable as Windows 3.0. Most of your code will not be about love, but about creating the circumstances for the possibility of love, and those circumstances have to do with working out the little piddly things around scheduling and finances and chores. Beware software engineers and lovers who only want to work on the sexy stuff.

 6. Make This Your Mantra: Hysteresis Helps Homeostasis. Hysteresis is the dependency of a system not just on its current state but also on its history of states. When you incorporate hysteresis into an algorithm, it’s to prevent changes from having too many drastic effects too quickly—for example, a thermostat set to 68 degrees doesn’t just heat at 67 degrees and cool at 69 degrees; it keeps track of its recent actions so it doesn’t oscillate wildly.


In a marriage, too, you can’t overreact to sudden changes as though your entire past counts for nothing next to some shocking turn of events. Unfortunately, the human mind has great skill at rewriting the past based on the caprices of its emotions. In my worse moods, calm nights at home can abruptly look like the wastage of many years—every book read or movie watched just another distraction from the empty spectacle of two vacant souls enduring a pointlessly fortunate life. Those moods and memory lapses are just bugs as well. “With the perturbations of memory are linked the intermittencies of the heart,” wrote the great computer scientist Marcel Proust. And with the perturbations of code are linked the intermittencies of software.

7. Trust No One (Not Even Yourself). Hidden bugs in a program can come out of the woodwork years or even decades after the code was written. (The Y2K bug didn’t show up for decades in systems that were designed in the 1970s and 1980s, since that code handled 19XX years just fine.) I once found a bug that would crash an entire chat server, kicking thousands of users offline, if a single user happened to send exactly 60 messages in one minute, no more and no less. Uncommon, unexpected inputs produce new and sometimes catastrophic results, and the causes are usually never clear.

A good programmer knows that she never knows everything about a program. Likewise, even after 18 years together, I know that my picture of my wife is still only an approximation of a very complex person, and thinking it complete and accurate will inevitably lead to error upon error.

Back in 2000, the Triassic age of cellphone technology, on a disastrous kayaking trip organized by a (now former) friend, my partner and I were stranded in darkness on a tiny spit of land in Puget Sound with the tide encroaching. I shivered with hypothermia while our friends bickered over which island on the map we were actually on. My wife quietly turned on the unwieldy mobile phone that she’d presciently removed from its cobwebbed home in our car’s glove compartment. She whispered to me, “We have cellphone reception. We can call the Coast Guard.” For that, she has my eternal gratitude. To quote Proust again, “It is a charming law of nature that we live in perfect ignorance of those we love.” We may think we know our partners inside and out, but we can never quite predict how they’ll react in an unprecedented situation. All we have is the program itself—everyday life—and the endless process of debugging and maintaining our own code.