Continuous delivery is based on the idea that when dealing with uncertainty and complex problems (as described in the Cynefin framework), the best approach is to assume we don’t already know the solution. Instead, we must commit to continuously learning about both the problem and the optimal solution. Moreover, continuous delivery encourages us to implement systems that effectively manage errors—because we are bound to make mistakes—while minimizing their impact.
If we assume that we do know the solution, or if the problem is straightforward (or just "complicated" within the Cynefin framework), continuous delivery and iterative learning might not be the most efficient approach. In such cases, a direct solution delivered by a team with prior experience can work better. However, in this scenario, don’t expect to gain new insights or improve the process further. And if the problem has already been solved before, reproducing the solution could simply be wasteful—something we should avoid at all costs.
As Kent Beck aptly put it:
"The only way it's all going to go according to plan is if you don't learn anything."
My experience and context
- I assume that the solutions I come up with are rarely the best ones.
- I acknowledge that we (myself included) make frequent mistakes—even with something as simple as writing "Hello, World" correctly on the first try.
- I recognize that we still have a lot to learn—about the domain, the business, tools, needs, and everything else.
- I have never worked in a simple or purely complicated context where a ready-made solution was available. And if I ever did encounter such a case, I would avoid reinventing the wheel to minimize waste.
For Self-Sufficient Experts
If you consider yourself an expert in everything, someone who rarely makes mistakes and feels like a 'rockstar' in their field, you might believe that you don’t need continuous delivery. I suspect that humility and the recognition that EVERYONE (including yourself) makes mistakes might be lacking in this case. Perhaps I’m wrong, and you’re some mythological being who never errs and doesn’t need to learn continuously. If that’s the case, my apologies… :)
However, I won’t be able to work with you since I do make mistakes and need to be part of a team that uses techniques enabling us to develop products despite our errors, all without living in constant stress.
In summary
I believe the general trick of this profession is to work as a team in the best way we know how, using the best techniques we have, and still assuming that:
- We are going to make mistakes.
- We have to keep learning.
- We need to improve continuously.
- We need a level of quality that allows us to work sustainably.
The discipline of continuous delivery (CD, TBD, TDD, etc.) provides all of that for me.
Please...
- Be a great team player. Collaborate and get involved.
- Create a safe learning environment for your team.
- Program as well as you can but assume you will fail, so build an environment where failing is manageable and has minimal impact on customers.
- Make the best architectural decisions you can, but assume they will need to evolve and improve over time.
- Seek continuous delivery as a goal—it fosters the right discipline and creates a safe, sustainable work environment.
- Be humble and accept failure, uncertainty, and your own limitations.
I don’t want to work with Rockstars, nor with x10 developers… I want to work in x10 teams and environments where learning is constant, questioning is welcomed, errors are accepted (because they are low-cost), and improvement is continuous.
Remember:
We need professionals, not heroes.
“I’m not a great programmer; I’m just a good programmer with great habits.” — Kent Beck
No comments:
Post a Comment