Take it away

September 23, 2018

I've been using CircleCI recently and I'm really impressed. CircleCI makes build/release tools, a notoriously difficult thing to build because every customer does things their own, crazy, idiosyncratic way. Using the product, I'm struck by how elegant it is; every little piece feels necessary, non-overlapping, and simple, like it was designed by a mathematician.

Mathematical elegance—that's a good goal. How do you get there?


Start with something—anything—then edit.

Aim to remove and simplify. You might discover you need to add a thing or two. But mostly, the path to great products is an act of removing all the things you don't need. The goal is to retain all the power and customization, exposed through the smallest, least cluttered user interface possible.

You're on the path when you:

  • Find the points of duplication (anywhere: the interface, the code, the nouns) and remove them.
  • Turn three settings pages into two.
  • Realize that lots of configurations are invalid, or that one implies another.
  • Realize two domains concepts ("nouns") are just special cases of one more fundamental idea.

Keep whittling things down until you've turned a huge maze of settings into one page that provides the same customization, but with 1/10th the buttons and fields.

That's one part of making a great product.