Dan North pioneered the Three Ages Philosophy.
He asks a question that is likely to resonate with developers:
Why... when we 'build it again'
does it take a lot less time?
In 2003, Donald Rumsfeld delivered the answer: unknown unknowns.
Tragedy aside, he was actually spot on.
If you don't know what you don't know, you quickly encounter difficulty moving in the correct direction...
In the software business this is known as as Second Order Ignorance. It underpins the first of the Three Ages Philosophy, namely early Discovery.
Discovery is about working differently to find out the important stuff earlier when it costs less. Here are the other two ages:
Stabilization: If “Discovery” showed its possible, then in this age we aim for Repeatability.
Commoditization is the third and final age. This age is about scaling within a business or specific vertical.
All three ages are equally important yet at some level completely contradictory!
- Discovery is about widening and exploring the problem space and accumulating possibilities and ideas. It's about experiments and throwaways.
- Stabilization is about narrowing the field and perfecting the path forward on a particular choice.
- Commoditization is about cutting the fat and streamlining the stabilized choice. It's about doing it cheaper without compromising quality.
Every initiative has defined areas. In one area, we could be exploring prototypes (discovery) while in another area, we might be perfecting the API (stabilization)
The key takeaway is this: All ages are equally important - iterate across all ages for all areas of the project and be mindful of the exact age you are in at any point in time.