Notes

1 min read

Write the boring version first.

Clever abstractions can wait. The plain version tells you what the real problem is.

When I start something new, I have a strong urge to build the general version straight away. A plugin system, a config format, a tidy abstraction that will handle every case I can imagine.

I have learned to resist it. The first version should be the boring one: hardcoded, a bit repetitive, obviously specific to the problem in front of me.

The boring version ships sooner, which means real people use it sooner, which means I find out which parts actually need to be flexible. It is almost never the parts I would have guessed.

When the same shape shows up for the third time, that is the moment to extract something. By then I know exactly what varies and what does not, and the abstraction practically writes itself.

Shapio is full of code that started out boring. The change planner, the part that turns a model edit into a safe set of steps, began as one long function with a comment at the top that said "split this later". Later came, and splitting it was easy because I finally understood it.