“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
“Working software is the primary measure of progress.”
But making software is complex and requires a good understanding of the customer's needs, the market (WHAT)
, and the reactions of the system we are developing (HOW)
. Let's remember that current software systems are complex systems
, and that implies that they have emerging behaviors that we don't know when we create them.
“The main idea behind complex systems is that the
ensemble behaves in way not predicted by the components. The
interactions matter more than the nature of the units. ... This is called an “emergent” property
of the whole, by which parts and whole differ because what matters is
the interactions between such parts. And interactions can obey very
Therefore the bottleneck to create software that meets customer needs is continuous learning. But learning is useless if we bring the system down or piss off our customers.
In a software system each of the deployments/changes we make, allows us to learn and make decisions for the next steps. Therefore we are interested in shortening the learning and decision cycles as much as possible.
What is Agile delivery's strategy for doing so?
Agile Delivery's strategy is to deliver increments in small safe steps (3S)
, each of which must attempt to generate learning about the WHAT (user needs)
or the HOW (technology/system)
Learning WHAT / User needs / Valuable software
If we have a lean product development process, we will try to validate and learn this aspect by generating as little software as possible. This implies generating hypotheses and trying to achieve validated learning using everything we have at our disposal: data analysis, prototypes with or without code, or software increments. For the latter, we will have to divide using Vertical Slicing
in increments so small as possible.
Of course, to learn about user behavior, it is also essential that we instrument the product
to learn continuously from the use that the customer makes of the system.
Learning HOW / Technology/System / Working software
Software is a complex system. This means that we can't foresee the final behavior when we develop each of its parts independently. That is why it is essential to make small safe changes (technical Slicing) that allow us to learn from the behavior of the system in production without affecting the user. Of course, in order to get these learnings, we need to decouple the deployments (putting into production a change) from the releases (activating a change for the end-user).
In summary, the sure way to achieve this continuous learning of the WHAT and HOW that agile delivery offers is the Continuous Delivery
of Small Safe Steps (both purely technical increases and increases in value for the user).
It seems that the data confirm that this is the right approach for making digital products.
Small Safe Steps