brandur.org

The peanut gallery

I love these words:

  • Simple.
  • Minimal.
  • Elegant.
  • Consistent.
  • Small.

Besides sharing a theme, the other thing they have in common is that they’re regularly used in the programming world, usually as aspirational properties to pursue. At Heroku we used to throw them around all day long, and I’ve been complicit in promulgating their use ever since.

A few weeks ago I was describing our internal architecture to an ex-colleague. While I consider it to be pretty good – a balance between technical idealism and practicality that keeps code reasonably maintainable and productivity reasonably high – he disagreed, implying that it was too big and too bloated, with too many layers. It’s a subjective matter, so we both had opinions about it, but no way of proving who was right.

It’s not the first time I’ve had a light debate like this one. I love the list of words above, but it occurred to me that they’re quite ripe for weaponization. In the software world, referring to something as “not simple”, “not minimal”, or “not elegant” as often as not means “software that someone else wrote”.

Many will be familiar with this quote often attributed to Einstein (but not definitively):

Everything should be made as simple as possible, but not simpler.

The problem with software is that very often, the minimum viable simplicity is actually pretty complex.

So while there is software out there that many of us would agree doesn’t fit any of these definitions – Java applets, the Win32 API, JavaScript (I kid) – I’ll try to be a little more mindful throwing these words around from now on.

Did I make a mistake? Please consider sending a pull request.