December 11, 2015
A simplistic idea started spreading for the past years in Romania, and I’ve met it to a lower extent in other European countries as France, Germany, UK, etc. Companies noticed they have a developer crisis. The simplistic solution: the universities and the industry should produce more developers.
I believe this solution to be completely off the mark. Here’s why.
We don’t have a developer crisis, we have a crisis of accidental complication
I’ve been in enough companies and seen enough code to know that most often the code is too complicated for what it tries to achieve. Complicated code leads to poor estimates because programmers cannot predict they will need to change one thing in 50 places instead of one. Complicated code leads to bugs because programmers don’t understand the code, and they use the “change and pray nothing breaks” method.
Faced with these issues and with the growing pressure due to them, managers decide to hire more developers. More developers write even more code that’s harder to keep under control, so complications can further increase. It’s a feedback cycle that keeps maintaining itself until one of a few things happen:
- managers decide to cut off on technical debt
- a few developers learn how to reduce complication and start doing it
- the project ends (typically with a rewrite in a new cool technology that solves the problems)
- the project is downsized
Agile / Lean were supposed to end feature creep. It didn’t because we are all humans. Feature creep only ends with a shift in mindset: IT is the business of solving problems, not of writing code. What’s the difference? Let’s take Scrum as example.
Scrum is too often implemented like an iterative version of a fixed backlog, because of course all the features must be implemented. This is the view of “this is the scope, we must do it and that’s it”. It obviously leads to feature creep.
The alternative is to gather the problems users are facing and then ask 3 questions for each of them:
- What is the problem?
- What’s the simplest solution that could solve at least a part of the problem?
- How can we implement this solution as simply as possible?
Once the first solution is implemented, get feedback from users to see if it’s good enough. If not, add another layer. And so on. Who knows, you might realize the problem is not real. Or not a priority. Or you might get away with a partially manual solution etc.
The second way follows the agile principle “maximize the work not done”.
By the way, when is the last time you’ve deleted a feature from your product?
UX Accidental Complications
I’ve started with technical debt, but complications really start from the UX. If your UX is more complicated than it needs to be, the code will be more complicated, and this will lead to feature creep and technical debt.
One simple example is the option dialog you find in many products. Try to replace the options with sensible defaults and only add options when enough users complain. Even then, question the need for options first. Why? Because your users will be confused by too many options. Because each option in the application can translate into hundreds of if statements in your code. Because this increases complication.
Another example is in user flows. If you can remove a step, do it. If you can remove a decision, do it. These techniques might improve usability and reduce technical complications. You can always add later a new step or a new decision or an option, once enough users have asked for it.
Process Complications And Impediments
Finding simple solutions is very hard. It requires a level of focus that reaches the cognitive limits. It requires collaboration, trust and good communication. It requires appropriate tools for the job.
These things are hard to achieve, and very easy to destroy. Want to destroy focus? Add many meetings. Want to destroy trust? Add innuendo and arbitrary rules. Want to destroy communication? Add verbal aggression, too often used by technical people and by technical people turned managers. Want to use improper tools? It’s easy, there are hundreds of them.
I often run a workshop called Value Stream Mapping. Value Stream Mapping looks at the company processes in terms of value flowing through from beginning to end, and computes the efficiency of the flow. Not of the people, of the flow. Whenever we do it at company level, the results are staggering. The most common interval for the efficiency was 5-15%. This is frightening, but also great because it shows the huge potential for improvement. It’s possible with a few changes to double your efficiency. You just have to want to make them. That’s the hard part.
We don’t need more programmers. We need better programmers, able to find the simplest solutions and to recover legacy code. We need good UX designers, able to solve user problems through simple flows. We need good Product Owners, able to switch from the mindset of “we need to implement this feature” to the mindset of “what’s the simplest solution for this user problem?”. We need to pick the best tools for the job, instead of picking the most complex tools on the market. We need to remove impediments and improve our value flows instead of making sure everyone works 100% of the time.
We don’t need more programmers. We need a different mindset. A mindset that connects Lean thinking, Agile thinking, UX and Usable Software Design.