When the subject of milestones was discussed I talked about a return to linearity for various purposes. This seems to be in direct contrast with this subject, which is all about working with iterations. But the two can live together without being mutually exclusive. Before I answer the question how to accomplish such a thing, first let me explain something about the soundness of iterations? When I deal with iterations I specifically mean software project phase-iterations. Project Phases consist of a set of activities. Project Phase iterations are iterations where the same kind of activities are performed multiple times before the phase ends and the following phase begins. So you can immediately see the linearity co-existing with phase iterations. You can have several phases starting linearly while the activities within a phase happen multiple times. Confused…?
Scope Creep
Ask yourself the following question:
“What do I do with certain issues imperative for production when we’ve determined a scope long ago?”
That’s not so much a question as a fact of software projects who’ve been given their own name “scope creep”. When on a software project, devising a project plan, determining a scope, or whatever, the thing to internalize is another old adage: “plan for the worst, hope for the best”. It’s not the other way round. Unfortunately project phases are commonly packed tighter together than people in the economy class of Ryan Air.
“Software Project Plans paint unrealistic success stories where, without any form of feedback, apparently in one iteration (= no iteration) a project phase can switch from one to another.”
Someone once told me the following when I commented on the mess we were in because of a totally unrealistic deadline. “Oh, but that was for “commercial purposes”.” I asked the person in question how “commercial” it was not only to stress the whole team because of a deadline they couldn’t for the love of God ever reach while disappointing the customer because of the lack of integrity we now had to show for not keeping our end of the bargain? That whole project just sucked big time, I have no other words for it. The argument about being commercial was typical for the whole attitude concerning software projects I consider so very wrong. Remember I mentioned earlier something about being shot in the foot before running a marathon. That’s how I felt. “Never again” that’s what I thought. We’ll see what the future brings.
What We Need Is Common Sense.
“Common sense dictates that things are never ever perfect and never will be.”
If it’s no different for software projects, and it sure isn’t, it would mean we need the common sense of working with iterations. With iterations as buffers we guard ourselves against the idiosyncrasies of software projects. We give ourselves time to deal with them without being rushed because we know there’s time.
- Maybe you’ll need time necessary for dealing with additional requirements for a concept software design to get an agreed on scope between client and supplier.
- Or it could have been for processing additional functionality in a new design after an acceptance test or incorporate time to solve bugs found during this specific kind of test.
Maybe it’ll be necessary during all of these examples. We need to iterate during phases, to discuss project members’ feedback and be able to deal with it. I know, it sounds like common sense all over again, but to use another one-liner “common sense is not common knowledge”. So called “commercial” arguments like in the example above many times have sound the death-knell for common sense.
“When it comes to software projects I don’t get surprised often anymore with what people say or think or do, but one of the things that keeps amazing me is the seemingly sheer unwillingness to learn from ones mistakes.”
After the amazement comes the realization that even stupidity has it’s advantages. For the individual there must something to be gained from it. We often find ourselves standing on crossroads of what Stephen Covey beautifully calls the “high and low road”. Let’s take the one challenging us the most. It’s obvious which one that is.
Cone Of Uncertainty
A very famous model of dealing with uncertainty is Barry Boehm’s “Cone of uncertainty” [Figure 1]. Although the model is an accurate representation how a project relates to certain milestones, I would like to take the opportunity to show you how iterations contribute to lowering uncertainty both simply and effectively. Boehm’s model dates from 1981 and although a lot has changed in the software industry since then the essence of the model still stands. One thing I disagree with is that he introduces a total of five milestones dealing with designing before commencing on the actual implementation of software. I find it not the best way introducing that many design milestones, because it actively encourages employees to constantly come up with new way’s to expand a project’s scope. It’s a breeding ground for procrastination.

If you look at the other figure [Figure 2] you’ll see that by consequently incorporating iterations the amount of uncertainty is effectively reduced to manageable proportions. We do this by pursuing agreement during our meetings and letting it be ensued with constructive follow-up e.g. actions. An important distinction when dealing with iterations is that you or the one responsible for planning allocate time before the iterations have to occur, not after. This way of thinking about iterations presupposes a different mindset in the way we deal with challenges during our projects. Even if you have the certainty you’ll be able to deal with inevitable problems when they arrive, after all you have the skill set, the tools and the experience to do so, will you have the time necessary for intervention?
There are always two sides when dealing with the challenges we have to face: tools and time. It’s true we have to know how to deal with something but we also need to have what I’ve called earlier, the “breathing space” to remain focused on where the main issues are. Else you’ll not only have problems but also the building up of stress, which creates even bigger problems, and before you know it, what began as a minor challenge has gained momentum beyond your capabilities. That’s when it’s too late. So for repetitions’ sake, plan space for iterations before problems are here not after. There’s no such thing as planning after something has happened, that’s a contradictio in terminis, a paradox in itself.
“In life there are a lot of things you won’t be able to control, taking action to be prepared for problems coming your way is something you CAN control, certainly during software projects.”
4 Crucial Iterations For Every Software Project
Now we can understand why project phases and project phasing are crucial elements of software projects, because it gives us a concise way to know when to iterate. The following iterations should always be part of your project phases:
- Design iterations between software designer and software developer
- Design iterations between software designer and client
- Development iterations with system testing (a test executed by the supplier to deliver a functional viable application within scope)
- Development iterations with acceptance testing (a test executed by the client/end user to gain enough thrust in the software to be used during production)
You can see various roles mentioned earlier being linked with phases, milestones and iterations. That’s because they are necessary for the viability of the iterated phase and the project as a whole. It’s during these iterations that the roles are being brought together to play their respective parts. We can now also appreciate the soundness of project phases far more with the realization that it supplies us with immense effective tooling to handle project challenges and the ability to structure and prioritize work. Phases support us with the three key elements of the project ecosystem:
- making choices
- taking follow-up action
- managing expectations.
Related posts:
