The real bottleneck in software
Software engineering should be to use the best techniques and practices to solve a problem that our customers have in the easiest and…
Software engineering should be to use the best techniques and practices to solve a problem that our customers have in the easiest and cheaper possible way.
What do you think is going to make us succeed or to fail?.
In my opinion, these are the software engineering problems we have to deal with:
People
The essential complexity of the problem
Time
Context
The past or Accidental complexity
Perfect solution vs tradeoffs
Uncertainty
If you want to go deeper, I wrote about them here, and what all of them have in common?.
The knowledge
All of them are related to the knowledge we have, about the problem, the company, the people we work with, what the customer need, what is the current situation of our codebase, what features we have.
This is the real bottleneck in software and this is an unsolvable problem, one person nowadays is not an expert in all the technologies of the world. So we could think that we need more experts, but we also know that we cannot increase and increase the team with more people just because there are things that will limit our efficiency:
As Fred Brooks states in “No Silver Bullet — Essence and Accident in Software Engineering”:
There is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity.
wikipedia
But the same happen with the knowledge one person has about a problem, this is why we are terrible estimating:
The Dunning–Kruger effect is a cognitive bias in which people with limited competence in a particular domain overestimate their abilities. Some researchers also include the opposite effect for high performers: their tendency to underestimate their skills. In popular culture, the Dunning–Kruger effect is often misunderstood as a claim about general overconfidence of people with low intelligence instead of specific overconfidence of people unskilled at a particular task.
wikipedia
In my opinion, in software, all of this pushes us to optimize for learning.
The solution is not always finding a perfect match for a role, it is to train people to learn what is required to solve the problem better.
If we are able to learn fast, this will be incredibly efficient, but wait, I’m not talking about having workshops every day but to learn while doing.
This conclusion is not mine, but part of Demmings 14 points of total quality system:
Train for consistency to help reduce variation.
Build a foundation of common knowledge.
Allow workers to understand their roles in the “big picture.”
Encourage staff to learn from one another, and provide a culture and environment for effective teamwork.
Dr. W. Edwards Deming were not thinking about software while doing their management principles for total quality, but they are the chore for example of Lean Software Development.
The system
So let’s optimize our ways of working, our path to production, our processes for learning.
Now let's go to software again, What processes do you think try to optimize learning?
Do we have to start working in this way right now?.
Depending on the current context of our teams, that could also be impossible, but we can think on this aspirationally.
Instead of that, we can start thinking on small Continuous Improvements on this direction.


