In a complex world, we often find that the limiting reagent is our ability to make sense of it. The problem with building large systems is inevitably being limited by our own ability to reason about its behavior and make meaningful changes which don’t have unforeseen side effects.
There are two natural systems for overcoming this: induction and composition. They’re terms borrowed from mathematical terminology, with any similar act of malaprop it’s invariably an imperfect metaphor.
With induction, we start with a base case. We think about a minimal, hopefully correct kernel of an idea which has some semblance to the larger system we seek to create. After that, we iterate by thinking not about the system as a whole, but rather the little bit that we’re considering to append to our core in order to expand the scope of its behavior.
In compositional design, the problem is framed as a set of boxes with inputs and outputs, each themselves composed by different boxes within.