Generalization


Imagine trying to design the ultimate tool — one that can do everything you’ll ever need. Chances are, you’d end up with a clumsy compromise. Like a Swiss Army knife: useful in a pinch, but never the best tool for the job. On the other hand, a tool built for a single task can excel at it, but won’t help when the problem changes.

General systems are versatile. They make few assumptions about their environment, which means they can adapt to a wide range of situations. But that flexibility comes at a cost: general systems often leave performance on the table. They have to prepare for possibilities that may never happen instead of exploiting structure when it’s available.

Specialized systems flip the tradeoff. They take advantage of specific constraints to achieve speed, precision, or efficiency that general systems can’t match. A factory line designed to produce one kind of widget is far more efficient than a workshop that can make anything. A law tailored for a narrow case can be more effective than a broad rule. Within their intended context, specialized systems excel, but step outside that context, and they quickly lose their edge.

That tension runs through every kind of design. We can make a tool that works in many contexts, or one that assumes strong patterns. We can build organizations around flexible roles, or lock in narrow expertise. The more assumptions we bake in, the more efficient we get and the less adaptable we become.

The choice between generality and specialization depends both on context and on use. In stable, predictable environments, specialized systems can deliver unmatched efficiency. The more often they’re exercised, the more those efficiencies compound. But in shifting or uncertain conditions, general systems prove more resilient, even if they give up some performance. The right balance isn’t absolute; it’s shaped by where the system lives and how much it matters in practice.