5 Minute DevOps: Perfect Never Ships

3 min read 442 words

In 2017, I created a T-shirt design and kept wearing it to work to rant at one of my teammates who kept polishing things instead of integrating his code with the rest of the team. CI means that code is integrating continuously, after all.

The shirt had this code snippet. Before I created the shirt, I posted it to my company's Slack with a few thousand developers. Therefore, this is the most heavily reviewed code I've ever written:

For the non-developers: Until perfect is true, reduce the value to be delivered by half and then check if perfection is reached. Since there is never a condition where perfect can be set to true, the value continues to drop infinitely. In short, "perfect never ships."

Don't get me wrong. This doesn't mean we shouldn't care about quality. I often hear Voltaire misquoted as "perfect is the enemy of good enough." That's not what he said. He said, "The best is the enemy of the good." This is the essence of agile delivery: build something we think is good, deliver it, compare our idea of "good" with the users', and adjust rapidly as required.

I recently spoke to a new teammate who is joining to create product documentation. User-facing documentation for something new is a daunting prospect. We are judged by the quality of our documentation. We need it to be good; it will be the source of truth, the product will be judged by it, it will increase operational overhead if it doesn't answer the right questions, etc.

Yeah, everything is like that. Break the problem down and ship small changes for feedback. I do everything this way, including long-form papers.

Remember, everything we do is probably wrong in some way:

  • The requirements are wrong
  • We'll misunderstand what's needed during the implementation
  • What's needed will change.

The longer we spend polishing our "ideal solution," the larger the change will be, the larger our probability of being wrong will be, the longer it will take to find out, and the more money we will spend being wrong. There's no upside to hanging on to something until it's "perfect". Do something you think is good, ship it, and cherish the feedback (code review is love). Don't be emotionally attached to your idea being good. Become emotionally attached to the outcomes.