Efficiency and Flexibility Are Inversely Proportional
E ∝ F-1 #
In almost all things, a reciprocal relationship between efficiency and flexibility exists. In some cases, it’s obvious why: assembly language runs faster, and Python codes, changes, and debugs faster. Depending on one’s context or priorities, the definition of “efficiency” and “flexibility” change
Efficient | Flexible |
---|---|
Software execution speed | Software development speed |
Domain-specific software languages | General software language |
Software monolith deployment | Separate APIs, UIs, and data stores deployment |
Strictly following a recipe | Dash of this and a bit of that |
Measuring carefully to a cut-list | “feeling” what the wood wants to be |
One can optimize flexible systems to be as efficient as possible (e.g. compiling Python), and one can make efficient systems as flexible as possible (assembler macros and debugging). The actual characteristics of efficiency and of flexibility mean that they will often affect each other in opposition
Efficiency removes unnecessary action, material, time, etc.: performing only enough action to reach the required goal1; minimizing waste; avoiding waiting and delay2. Individual actions in an efficient process are prescribed and have little room for choice or variance. Even tasks that require lots of judgment (e.g. a lumber cruiser) have little leeway in the criteria for that judgment
Flexibility is being in-the-moment, treating every new cycle as if it might be completely different, not assuming that the previous process is the best, and Doing What’s Indicated given the immediate environment, resources, demand, and one’s best judgement, up to experimenting to see what happens if one tries something new and unexpected3. The extreme extent of flexibility is experimentation (possibly to find an efficient procedure)
Another characteristic of efficient systems is fragility (sometimes called “brittleness”). Using an environment efficiently fails when that environment changes. In the face of changes to the desired output (buyers’ fickleness and alternative products), resources (changes in raw material supply), technology (3-D printing), and mechanisms (labour costs and regulations), an efficient system will fail because it has little slack to handle change
Many efficiency systems have adaption to local change built-in: Lean and Scrum, for example, work towards continuous improvement (change), but they can only change their mechanisms and protocols; the goals and resources (and often, the technologies) are outside their control. Good planning schedules regular reviews to confirm that all the assumptions and techniques in a system are still efficient.
Asking for something to be efficient and flexible is asking for a contradiction that cannot, by definition, exist
See also
- The Efficiency Paradox4
- Resolving the efficiency paradox
- Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency
-
“If something is worth doing, it is worth doing poorly”. Poorly done means that the task is, in fact, complete according to its Definition of Done and no more ↩
-
E.g. Just In Time, Lean, Goldratt, etc. ↩
-
the way they drive in Paris ↩
-
I have not read this as it’s behind a paywall, but it seems relevant ↩