Monday, April 18, 2011

Why Fixed-price fixed-time model dominated the scene?

Fixed-price fixed-time, time-material or managed time-material software delivery models - they are all ultimately primitive. They are full of co-operation anti-patterns, promote negative habits and may turn potentially destructive both for Clients and Software Vendors. As you might have experienced or as you can imagine exploiting vulnerabilities built-in the above models happens on regular basis. In a case of fixed-price model the Client is potentially benefiting from the weaknesses of the model. On the contrary, it is the Software Vendor who is a beneficiary of the time-material model’s constraints / assumptions. Tendencies for exploiting vulnerabilities origin from various reasons and exist on both sides. Well, this comes at no surprise as intelligent human beings tend to adapt to surrounding environment. Mary Poppendieck’s Lean Software Development gives an excellent insight into the subject.

I will not be surprised if fixed-price and time-material models are the only delivery models you have ever come across in your carrier. You must be extremely lucky if you actually had a chance to work in some other models. You might have come across a composition of a fixed-price from the client perspective mapped onto Agile model used internally by a Software Vendor. This is very popular approach, but it does not gain from the synergy between Client and Software Vendor offered by Agile.  

Yet the fixed-price fixed-time model have dominated the market. Background of this phenomenon is composite, but in my opinion two reasons constitute the backbone of mental background for their domination.

First of all, at the inception of software management people applied production models existing in other branches of industry and transferred them directly into software development. This is described by Frederick Brooks Jr., in The Mythical Man-month. Such decision makes sense at first sight, however with time the understanding arose of its limitations. The cardinal flaw of such approach was that software development is a creation process rather than a production process. This has severe implications on applicability of production models to software development. In fact, as noticed by Ken Schwaber in the Agile Software Development with Scrum - the nature of software development is too complex and cannot be handled by production processes as they are  suitable to control well-defined processes. On the contrary software creation is so complex and unpredictable that empirical process control should be chosen for dealing with it.

The second reason for domination of fixed-price fixed-time model is business model at client organizations. Typical Clients of a Software Vendor are usually very busy and hard-working people, experts in their domain of specialization. Clients have internal clients, usually their bosses who originate the project. To get an anual bonus a typical Client need to make a project happen within a given deadline and within a fixed budget. The budget is available during the current accounting year and no longer. A natural approach for a Client is to agree with a Software Vendor on a scope of what can be delivered for some fixed-price and in some fixed-time. This is exactly the background of the fixed-time fixed-price delivery model. Of course requirements are fluid and a lot of areas are not thought through at the moment of signing a contract thus opening the doors to all evil to come. A Client leaves the project to Software Vendor to deal with it, because (s)he has a lot of other duties and  (s)he is pretty certain that (s)he transferred all risks onto the Vendor - after all the Vendor will not get paid if something goes wrong, right? When a Client comes back shortly before deadline, (s)he usually gets something different than what (s)he expected. We all know the story… What is more, in this very moment a Client realizes that the risk was never really transferred onto Vendor! Yes, there will be consequences to the Software Vendor, nonetheless and in spite of how high they are, they will not cover concequences of a Client side - consequences for each party are of different nature and are most commonly separate. So what the Client really did when signing a contract was to create new risks on the Vendor side rather than transfer any of the Client's risks onto the Vendor side. 

Anyway, did you notice how natural fixed-time fixed-price approach appeared to a Client?! Thinking in categories of what can I get for my money and when it can be delivered is as natural as checking the price of a product in an internet shop!

And yes, another eye-opener - the goals of Software Vendors in a fixed-time fixed-price delivery model are to deliver working software in an agreed scope, according to the agreed schedule and within the agreed deadline. No less no more. Do not get me wrong - the respectful Vendors always tend to deliver the best product possible including also other aspects, but usually hardly have any chances to cover anything extra due to tight budgets and deadlines. Exactly these deliverables result from the nature of the model. I encourage you to think of all aspects of the delivered software not covered by these three constraints. Scary! But again, does it surprise you? Isn’t it a natural choice for Software Vendor? As said above - intelligent creatures adapt to surrounding environment and in this case an environment of choice is fixed-price fixed-time model.  

It takes a highly aware client to choose other delivery models. Recognition of Agile models is still very limited although it is probably the most attracting marketing slogan used nowadays by Software Vendors. In spite of 10 years on the scenes and tremendous amount of Agile mentoring done by Agilists it is not widely used by Clients (except from usage as marketing tool). An advice of Ken Schwaber given in the above-mentioned book to persuade Client to use Agile is not that easily applicable.

Friday, April 1, 2011

Iterative vs Incremental Development? Is it 'vs' or 'and'?

So do you do iterative or incremental software development?

Be careful - this is a tricky question. Agile Software Development is based on iterative AND incremental (notice AND here) development. The article on the Wikipedia on iterative and incremental development explains the idea behind it - deliverying a shippable software product increment in every iteration. This reflects a well-known traditional change management approach defining a change as a well-defined transition from one stable version of software to another stable version of software product.

As a beginner project manager I lived in a confidence that I actually needed to choose between iterative OR incremental approaches. This is because I used a misleading metaphor for software product development. Let me dig into my past for a second...

I used to keep in mind a metaphor of a painter's dilemma. The painter's dilemma is a choice between iterative OR incremental approaches (notice OR here). Imagine two painters creating portraits. First painter's approach is to start with a sketch of the whole person and iteratively fill-in individual details across the whole person, details evenly distributed across a person. The second's painter approach is to sequentially work on individual parts, like an arm or leg or head till they are fully completed and mastered together with deepest details. The former approach resembles the way browsers display a picture that they download - starting from rough, obscured approximation of a picture and progressing iteratively till n-th approximation becomes a complete picture. The latter approach  is not based on approximations - a painter can switch to next part of the body only when he mastered the part of  a body currently being painted.

Having the painter's dilemma metaphor in mind as a project manager I was often tempted to go for iterative approach. It gives an overview of the whole project starting from the first iteration - it reflects the Top-Down programming paradigm - start with a do-nothing stub implementation of a program / system and dig down gradually into implementing individual areas. Also the iterative approach lets to postpone irreversible decisions till later which follows the Lean software development ideas.

As you can see such approach puts me into an inconvenient position between Agile approach and my conclusions from the painter's dilemma. Or does it? I understood my mistake during one of the projects when it turned out we were not able to close testing of any of a few dozens of features until very late stage of the project.

I suddenly understood that iterative approach is a kind of re-incarnation of waterfall. In fact it is called Agile-fall as I found out where iterations are in place, but they do not produce any business value as Stories are not ready to be delivered till the last iteration. Agile-fall in spite of using iterations delivers all Stories at the end of a project thus inheriting all disadvantages of a waterfall model's Big Bang effect. This completely breaks the Agile approach - to deliver working increments of software product in every iteration.

Clearly with respect to delivering value the incremental approach really shines. It allows a Product Owner to start making money early and have satisfactory Return of Investment (ROI), to stop after k-th iteration, to change requirements for unimplemented features. It is all possible as successive iterations deliver the most valuable increments possible at given moment.

And what about 'iterative' part of Agile's iterative AND incremental foundations? How does it apply? Is it AND at the end? Well, iterations are a tool providing Inspection - the second leg of SCRUM as Ken Schwaber used to call it. Thanks to iterations a Product Owner can assess quality of an increment. And they have nothing to do with increments of functionality evenly distributed across product as in the case of a painter's iterative approximations of a portrait - the value does not necessarily distributes evenly across project's functionality. Thus the approximation-based approach lying at the heart of painter's iterative approach is not a good model for delivering maximal value in an iteration.

Tuesday, March 29, 2011

The Nokia Agility Test

And here is a copy of the before mentioned Nokia Agility Test. I copied it here while it is still for free... Who knows how greedy the trainers of the new religion become? ;)


LEVEL 1 - tests whether you do Iterative Development (Agile-fall)
- Are your Iterations time-boxed to less than four weeks?
- Is the software completely tested and working at the end of an Iteration?
- Can the iteration start before specification is complete?

LEVEL 2 - tests whether you do SCRUM
- Does the team know who the product owner is?
- Is there a product backlog prioritized by business value?
- Does the product backlog have estimates created by the team?
- Does the team generate its burndown charts and knows its velocity?
- Does the team have outside people disrupting the work of the team during the sprint?

How Agile your organisation is?

So how Agile do you think your organization is? Are you sure you are agile? Sure you are not waterfalling anymore? Or may be you Agile-fall torn somewhere in between waterfall and agility? How can you prove you are truly Agile? Have you ever used any Agility metrics? What factors were taken into account in such metrics?

Throughout my carrier I worked with quite a few software vendors playing a role of a Scrum Product Owner. Once asked to describe their model of software development they'd all say - But of course we are Agile! What do think, huh? We will show you how you should develop software the agile way! Well, I can assure you - I could recommend few of them as agile practitioners... Most of them had no clue what agility was all about... Most of them did not understand that fixed price contracts with end-customers had to undergo some sort of transformation to map into internal implementations SCRUM... And most of them never thought about measuring how agile they were. Being agile became so attractive on the market that literally every IT department claims to be agile experts. This is really a shame...

If you consider yourself a respectful agile enthusiast, please think about taking some measures of your agility. One can find ideas how to approach such measurements even on wikipedia article on Agile Software Development. As a great example of Agility test I recommend the Nokia Agility Test.

To be honest with you I was never satisfied with the results of the Nokia Test - usually and for various reasons varying from company to company it used to ruin my hugely-blown ego of Agile practitioner. As Chineese say - the road to success is much more important than reaching it. Well, at least I take it as my excuse...

Sunday, March 27, 2011

Criticism of Agile movement - misses the point

Definitely Agility deserves to be called a revolution itself. It drastically changes approach to software development management. Fascinating is the fact that Agility is not inventing anything new - all the ideas were well-known before term Agility arose. Hence there is a plenty of criticism for Agile Creators as for selling well-known ideas after repackaging them into new smart-looking boxes.

IMHO this kind of criticism misses the point...
The major value of Agile Revolution is not selling well known ideas in new boxes. The Agilists go further than just pointing out weaknesses on the traditional project management. The value of the Agile Revolution lies in replacing the mental framework used in traditional software development management for years. The new mental framework is based on completely new hierarchy of values. Agile Manifesto describes the new mental framework in detail.

Notice that it took 30+ years for the revolution to happen. As with all ingenious ideas one cannot understand that it was so difficult to "invent". Once in place, Agile takes over with its natural grace.

Agile and Web 2.0 - do they have anything in common?

When my wife noticed me creating this blog she couldn't be more surprised. She shares my concerns about usefulness of this way of knowledge sharing. Yes, I have to admit we live the life as the Web 2.0 revolution did not take place. We don't twit, don't facebook, haven't blogged so far. It takes time to understand values of a revolution and start utilizing the values to support personal aims. 

IMHO the Agile revolution have roots in the same observations as the Web 2.0 revolution - human beings live in societies and human beings are individuals. Thus both the revolutions are based on idea to build support for human specific behaviours rather than create unnatural ideological frameworks and force people follow them. Making use of mechanisms built-in to humans by nature is incomparably wiser than having geeks experiment on us with their conceptual frameworks. 

So no-one tells you how to use the Internet and no-one tells you how you have to create software anymore. Feel empowered. Ain't it great?

Why this blog?

This blog aims to collect my personal thoughts and reflections on Agile Software Development Management - the most vital and influencing movement in the Information Technology (IT) management of the latest decade.

My story with Agility began on 2006 when I worked for Secerno Ltd, Oxford, UK and rapidly became my passion.

I made the blog public, but honestly - read it only after you made sure you don't have anything better to do. And once you do - please share your thoughts with me.