How can you prevent your project from ending in disaster?
Here are the top 5 mistakes you should avoid:
1. Following the Waterfall model
The Waterfall development model has long been considered fundamentally flawed for software development. It works for engineering projects in the physical world, but software development is very different from building a house.
Using the Waterfall model assumes that you know absolutely everything about the final system, before you even start.
Programmers are notoriously optimistic when it comes to estimating how long programming tasks will take.
Using the Waterfall model assumes that you know absolutely everything about the final system, before you even start.
Software is a living, ever-changing organism that grows and responds to changing needs and specifications.
A much better model is iterative development. This breaks the lifecycle of software down into many "mini-waterfall" phases that help you respond effectively to ongoing changes.
2. Insufficient upfront planning
2. Insufficient upfront planning
In contrast, following an iterative process can sometimes lead to lack of sufficient upfront planning. It is tempting to start writing code on day one, before the problem is fully understood.
Instead, earlier iterative phases should focus on creating high-level documents explaining the "big picture" and major problems the software aims to solve. Depending on the complexity of the software, it doesn't need to be a full functional specification. It should simply have enough information to make sure everyone on the team understands what the software is supposed to do.
Next, it helps to rough out layout and interface details using mockups or wireframes.
Finally, before full implementation, it pays to build a "working prototype" that contains most of the user interface, but perhaps not all of the backend. This allows users to try things out and make suggestions when the cost of change is low.
3. Overly optimistic estimates
3. Overly optimistic estimates
I blame this primarily on the "Programmer Optimism Curve" (POC) that I describe in the popular "You are not 90% done" article. This results from the actual scope being larger (often 4-8X) than originally expected.
I recommend being prudent and following these 5 steps to estimate software development time.
4. Adding too many people
Ever since the dawn of software development, managers have assumed that building software is just like building things in the physical world.
I recommend being prudent and following these 5 steps to estimate software development time.
4. Adding too many people
Ever since the dawn of software development, managers have assumed that building software is just like building things in the physical world.
Nothing could be further from the truth.
In 1975, a brilliant computer scientist named Fred Brooks wrote a book called "The Mythical Man Month".
One of his many observations was that for a complex process like software development, you should keep your team as small as possible to reduce the total number of communication channels.
This holds true now just as much as it did when he wrote about it in the mid-70s.
5. Incorrect use of todo lists
5. Incorrect use of todo lists
Projects to-do lists often end up as a brain dump of specifications, questions to be answered, unapproved features, and miscellaneous chores that need to be done.
As I summarized in my personal blog, the best practices to make a to-do list work are:
- Using verbs
- Being specific
- Grouping by context
- Focusing on next
For a detailed account of why most todo lists don't work, and how to manage them better, be sure to read David Allen's "Getting Things Done" (GTD).
Summary and recommendations
- Use an Iterative development model, not Waterfall
- Do enough upfront planning
- Make realistic time estimates
- Keep your team small
- Use the GTD methodology for todo lists
Following these guidelines will give your project the best chance of success.
About the author:
Jason Hanley
has been developing commercial software since high school, and is the founder of PMRobot.com.