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


  1. “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 

  2. E.g. Just In Time, Lean, Goldratt, etc. 

  3. the way they drive in Paris 

  4. I have not read this as it’s behind a paywall, but it seems relevant  

 
0
Kudos
 
0
Kudos

Now read this

Professionalism ∝ Passion-¹

In the 1990s, we were all searching for passion. Passion leads to Excellence, and we were all in search of that. In the 2000s, geeks took over, and geeks are just people who show their passion. The passionate, geeky software developer is... Continue →