Give me one problem at a time

Most problems are just a collection of smaller ones. Adopting a practice of reducing the problem at hand down to a manageable size helps keep solutions well organized and focused. Solutions that are built this way are typically easier to understand and cost less to maintain.

Most problems are too big to solve all at once and attempting to do so usually results in a complicated mess of hyper specialized software. If you’ve ever encountered something like this before you know how hard it is to change any part of the program without introducing new issues in the form of bugs, regressions, or additional complexity. Building software in this way is a bit like having a custom tool for each and every kitchen task you have. Soon enough, you’re left with a drawer of oddly shaped equipment that can’t be used for anything else. I, for one, loathe kitchen gadgets. They might make a single task faster, cleaner, or easier but they only do one thing. Having a mess of single purpose tools, costs more, takes up more space, makes maintenance unnecessarily difficult and is not an effective way to run a kitchen nor is it a good way to ship software.

Much like my kitchen I like to build a suite of well designed, flexible components that I can assemble together in various ways to tackle the problem I’m working on. When the problem changes, I can use the same set of blocks, maybe add or remove a few, and have a working solution with much less re-work. This is not something that I came up on my own, it’s very similar to the unix philosophy and it has proven effective across all kinds of domains and at all different levels of design.

Next time you are given a problem to solve, break it down until you each problem seems simple and straightforward. If you can’t split the gordian knot alone, talk to a teammate about it and do it together. Sometimes, just talking about the problem allows your brain to reshape the problem and find new solutions. Only once you can’t seem to reduce the problem into smaller chunks are you ready to start building the solution back up, one problem at a time.