Saturday, January 11, 2014

Agile fundamentals: Working software

This concept it is highly used when we talk about Agile. It is mentioned in Agile Manifesto, first as a main value and then as part of the agile principles. In the same time it is highly misunderstood, even by some claimed agile practitioners.

Waterfall versus Working Software

The main dilemma concerning the process approaches in software development is not "Agile versus Waterfall" - that is false and confusing - but rather Waterfall versus Working Software, that mean Waterfall versus Iterative Development. Why? Very simple answer: the process approach that has a main attribute the Working Software is Iterative Development. Ok... but what about Agile? Agile is one of the main variants of Iterative Development, and probably most used.
There are 4 main Agile values and associated principles. There are also few others values and principles related to software development. Anyway - Working Software/Iterative development is the first one, if not as value, but at least as attribute that define an entire category of non-Waterfall approaches .

"Traditional" PM main problem

A "traditional" PM for software domain is not the one that use PMBOK based PM style, but the one that one that use Waterfall as project life-cycle model.  (... PMBOK does not propose any life-cycle model because that is out of its scope). The first thing that should know a such project manager is: if Agile is not needed, that could be ok, but Iterative Development is not optional for a good project management in the software development case.
Working Software it is a must!

Agile related confusions

Good understanding of working software it is fundamental for a real Agile process. 

The Bad and the Ugly

An often misinterpretation of the Agile Manifesto is the following: we do not need documentation, we just craft some software. That is not agile, and it is very harmful.

The Good

The right interpretation of W.S. concept from the A.M. is when we are thinking to the working software resulted at the end of an iteration: analyzed, designed , implemented and tested & fixed software. Nothing is missing? The complete "formula" should be: continuous integrated (working) software.
Recap:  we should use iterations (smaller than one month, but better of two weeks of less) and working software should be the main result and measure of the progress at the end of the iteration.

The Great

Softwarecraftsmanship Manifesto states also that we need not only working software, but also "well-crafted" software. Something similar could be found also in the Agile Manifesto principles, where the used terms are "good design" and "technical excellence". Finally, that mean that for Agile we need "well-crafted" working software. Why? That will enable, enhance and offer steadiness to the agility. Also, that mean we will produce less Technical Debt, that is a condition for Agile (and agile methods as Scrum) and also for any good process.