Few people who have experience of delivering software projects would promote using the Waterfall Model and Big Design Up Front for managing software projects – accountants, bureaucrats and those that believe ‘designers’ possess crystal balls aside.
Most experienced technical project managers and developers recognise that a more agile approach is needed. One where the focus is on delivering working software, not ‘artifacts‘ and, where the project seeks to deliver via a series of rapid iterations not rapid recursion. This is because in addition to being more realistic and recognising that software is delivered by people rapid iterations reduce complexity and therefore risk.
There are of course a wide range of agile methods available and plenty of consultants and training companies out there promoting them. However, I fear that too often the way agile methods are employed, on the ground, is more akin to a sequence of mini waterfalls. That is there is a tendency, within each iteration, to lead with design (often creating Photoshop files) before coding up the application based on those designs. I suspect that this often happens for a number of reasons, including:
- engineers and developers like to solve problems and are happy to solve the problems whether they are set by the client or a designer;
- the waterfall model is still prevalent and people ‘expect’ design to start the process;
- people tend to prefer working in isolation – agile methods require people to work in close collaboration.
These and other reasons mean that if a team is left to their own devices they tend to default to the modus operandi of design up front (even if it’s small design up front) because it just feels more natural. And of course since agile methods encourage teams to decide how they are going to tackle the work this is too often the sequencing of work they settle on. But that doesn’t make it right.
It is better for the Project Manager to encourage the team to reverse this sequence by, for example on a web project, having designers working directly with the mark-up (designing with css) where the mark-up is being delivered by web apps which have been built by software engineers. And the software engineers, they need to work with the designers, information architects and client to define what data is needed on each page – by understanding the problem and the domain model.
Photo: Plitvice Waterfalls, by mpancha. Used under licence.