In his Rails World Keynote, David Heinemeier Hansson put up a seemingly simple slide that made something click in my head.

You see, I’ve been thinking a lot about simplicity in software quite a bit lately. And, in my day job, I’ve been railing about needless complexity. I fear, however, that most of what I’ve said gets heard as “Complexity is bad. Don’t do it.”

That’s not as helpful as I’d like it to be.

After all, it’s rare that the first draft of a bit of new code or a new feature is simple. You have to start somewhere and figure things out. Usually, it takes a few iterations before you understand something well enough to go back and reduce things back to the simplest possible solution.

What I love about David’s slide is that it acknowledges that there’s a messy middle to get through. Quite often, you have to build something complex to get to something simple. You just can’t forget to complete the cycle. You can’t just ship the first iteration and then move onto something else. You have to keep working at it until you get back to simplicity.