by Leon Rosenshein

Toasters

Toasters are pretty simple. Put in a slice of bread. Push a knob/lever and a few minutes later your toast pops up, with some approximation of the level of doneness you want. If you’ve got a commercial toaster with a conveyor belt you don’t even need to push the knob.

But it’s only an approximation of the level of doneness you want. And it seems to drift over time. And with different breads and slice thicknesses. And bagels, which should only be toasted on one side, are a whole different kettle of fish. Which leads to this story, which is almost 30 years old.

But even the simple toaster is hard to build, if you have to go back to first principles. I don’t mean being a maker in the modern sense, with a shop complete with 3D printers, CNC mills, and laser cutters. I mean first principles. Consider this attempt to make a toaster from scratch. It didn’t exactly work, but it didn’t exactly fail either.

But what has that got to do with us? Just this. On any given day we make lots of choices. Choices about what to build, what to reuse, and what to extend. Choices about building what we need right now vs what we know we’ll need next week/month vs what we think we might want in the future. So we need a framework to make those choices in.

A good place to start that framework is integrated value over time. Which usually means building on existing things instead of building from scratch. Improving things instead of replacing them. But not always. Sometimes a new requirement comes along and the cost of adapting current systems exceeds the cost of making something new. So do it. Carefully. Within the existing framework. And then iterate on that thing as well.

And that’s where it gets really interesting. You find out how well your mental model of the system translated to architecture and then code matches the problem domain. If they match well it’s easy to add something new. If they don’t the new thing will expose the gaps between your code and the problem space. Which brings you right back to deciding whether to adapt what you’ve got or build from scratch.

Because in the end, just like building a toaster, the right answer depends on figuring out the right place to start and the right place to go to.