Uncertainty and discovery
Software projects are done with discovery and investigation, one of the best ways to organize them is by the approach called “staged delivery”in which the software functionality is developed and delivered in stages, first we take care of the most inportant functionality and afterwards add more and more features this approach is important because the client, or the manager can receive small deliveries periodically and the project is better settled after small milestones are achieved.
One think that stands out abut the internal thinking of the project is how is divided into different phases that overlap, the discovery, invention, implementation. During the first part of the project the team reaches to the client and does all of the upstream task, this involves getting to know the customer needs, or if the client already knows them interpret what he wands and create early user interfaces to get validation. In this phase its important to take into account what we have already talked about the software product, approach to minimalism and hear the client and end user.
In the middle phase we shift the focus to invention, this is the phase where the architecture is created, classes, subclasses. And to create this inventions we many times have to create smaller inventions to support them. And at last we implement what we created which basically means “to put in practice what we learned in the previous phases and applying this knowledge”.
In this diagram we can see that the staged delivery approach focuses project planning and risk reduction. The project team develops a software concept at first, then gathers and analyzes requirements, and the completes an architectural design.
Some of the benefits of this project flow are the facts that the critical functions are available earlier so the users who are waiting for some particular features earlier don’t have to wait until the project is done. Also the problems become evident really fast and can be managed, this is unlikely if you are working on a project to be delivered all at the same time where many of the mistakes are discovered until production is over.
Your team get tired faster because the time needed to drive the software to a releasable stage multiple times., retest already-tested features and perform version control and addressing the extra complexity of supporting additional versions and…
Some of this cost are not really extra, costs that remain hidden until the release of the software but some are, like the activities related to actually releasing the software.
McConnell, S. (1998). Software Project Survival Guide. Microsoft Press.