Whenever I read the storybook romances of the New York Times wedding section, I think: The plural of anecdote is not data. In my time as a programmer and software engineer, I learned that the most heartfelt emotions collapsed in the face of cold quantitative analysis, just as so many loving marriages stand a good chance of ending in divorce. Inauspicious data scared me off marriage when I was younger, and it would have come as a surprise to teenage me that I’d end up in a relationship (and marriage) that has now spanned half my life. I can only attribute its provisional success to the power of software engineering and the wisdom I’ve gained from it.
My partner and I are both software engineers. We code and build programs. One of those programs is our marriage. Our code for the marriage is made up of our words, our actions, and our thoughts. Our job: to prevent bugs in our code from crashing the marriage.
You can’t avoid bugs. Every programmer makes them. The goal is to anticipate and mitigate the damage. Code can survive unexpected inputs and circumstances, if it’s robust enough. But very often the result is a crash, heralded by a message known to anyone who’s ever programmed in Linux or Unix: SEGMENTATION FAULT (CORE DUMPED). These are some software engineering maxims that have saved my marriage from core dumping.
1. Avoid Vaporware. Many products have crashed on the shoals of early announcements that proved impossible for programmers to then meet. Sometimes the delays in shipping a product went on for years—decades, in the case of Duke Nukem Forever. The pressure to deliver such vaporware puts immense strain on programmers, since they fear they can’t live up to what’s been promised—and often they can’t. What’s the ultimate in relationship vaporware? “Till death do us part.” We yanked that line out of our marriage vows and replaced it with quotes from Robert Musil (“Love is the most talkative of all feelings”) and James Wright (“Somewhere in me there is a crystal that I cannot find alone”). Another way of putting this is: Underpromise and overdeliver.
2. Beta-Test. We were quite young when we got together. The code I wrote when I was 21 wasn’t awful, but it was callow and could have been done so much better. No matter how good you think you are, there’s a lot more to learn. We understood this sufficiently to mistrust the feeble and inept judgments of our younger selves. We waited 10 years to get married, to rack up enough evidence that the code was now robust enough to keep the product running smoothly. And regular upgrades are crucial, lest code rot sets in.
3. Remember: Bugs Never Disappear. They Only Hibernate. I detested one of my partner’s friends, who had nastily dissed me a few times. I avoided him and let it go, only to find, down the line, that it really bothered me that he and my wife were still friends. Resentment ensued. Eventually we talked it out and I got the reassurance that my wounded pride had thirsted for in the first place. He even came to the wedding.
Bugs can seem evanescent. I’d see server crashes that appeared out of nowhere and, just as mysteriously, seemed to disappear. Bugs never disappear. If you haven’t actually fixed anything, it’s a dead certainty the enigmatic bug will return sometime in the future at the worst possible moment. Likewise: Bad fights may abruptly dissipate for calmer times, but the underlying issues will fester and explode later if you don’t understand them there and then.