Skip to main content

Exists is the enemy of good

We've all heard the adage "perfect is the enemy of good." I take this to mean: if you only accept perfect, you might miss a good-enough solution. I still try to strive for perfect, but have learned to accept that good might be sometimes enough.

However, I've been saying something to friends and colleagues—for probably a decade now—that is closely related: exists is the enemy of good.

This idea is pretty simple, in principle: sometimes we miss a good-enough solution because a not-quite-good-enough solution is already out there and in use.

When I came up with this, it was specifically about bad software that seems good enough. Usually, stakeholders are less willing to invest in a good solution when one already exists.

Who of us hasn't hacked together a prototype that somehow became the code we released to production and has been doing a not-quite-good-enough job of serving clients since that fateful deadline? In my experience, these things often become absolute nightmares when it comes to maintenance (and security, and performance, and stability…), but they exist, so the urgency to replace them with a good version gets traded for the thousand papercuts of unexpected "well, I didn't think this would happen, so it's going to take me a few more hours than expected" or "oops; we didn't expect this kind of vulnerability…"

Or, we've cut corners: "Yeah, we've been meaning to fix that wildcarded security policy, but it's working for now, so we haven't made time to tighten things down." It exists though, so making it actually good doesn't get priority; it gets kicked down the road—sometimes forever.

This concept applies more broadly, too.

Imagine a community that is served by a single bridge. The bridge was built in 1958 and doesn't have safe walkways, or even a reasonable path for bicycles. Despite this, pedestrians and cyclists attempt to use the bridge daily—dangerously. The bridge exists, though. Replacing it with a better bridge is something the local council talks about every year or two, but no one is willing to risk their position by trying to justify the expense. Even worse: replacing the bridge would leave the community without a convenient link to the next town (they'd have to go the long way around) for a period of time while the replacement is being deployed, so even if someone were to get it into the budget, the citizens wouldn't stand for the downtime. Sure, everyone wants a better bridge—a good bridge—but the bridge that exists is the enemy of this. Now imagine how quickly (relatively, of course—this is local government after all) action would be taken if the bridge were to become unusable. A flash flood knocks out the bridge, and there's an opportunity—no, a downright necessity—to prop up a good bridge, because the old one practically no longer exists.

My home automation has been a bit neglected for the past year or so. Fundamentally, I'm still firmly in the position I mentioned (my lightbulbs can't join a botnet to DDoS you if they physically can't connect to the Internet (without a gateway)), but I'd like to tidy up a few things; recategorize, and maybe even explore a different system. But it exists and it mostly works, so it's hard to justify the time and hassle of naming/grouping rooms, or switching control platforms to something that is potentially more good.

When I've complained about Electron apps on my desktop, saying things like "This would be so much better if it used the native toolkit. It's super annoying that the tab key doesn't work right and this scrollbar is janky. It destroys my battery life," I've sometimes been met with the response "well, the Electron app is better than no app right?" Is it, though? If this bad app experience didn't exist, there might be some reason for them to build a good app. The motivation is squelched by "what we have is good enough" when usually it isn't good enough for me. My oven has what I would consider a terrible app. I have little hope that Anova will replace it with something good, though, because they have an app that exists.

Now, I'm not saying we need to greenfield everything, and we should usually avoid full rewrites—or at least approach them with a healthy dose of caution—but I've been thinking about this exists situation a lot and it's a real mess.

We need to be very careful about justifying bad experiences with "perfect is the enemy of good" when we should be striving harder for good itself. The popularity of this expression is responsible for a lot of garbage. Sometimes we just shouldn't do the quick and easy thing—even if we've tricked ourselves into thinking it's temporary. Exists is also the enemy of good.