Rapid Development
Steve McConnell Microsoft Press 1996

Summary

This is a huge book covering every aspect of how to develop software faster. The main point is that you don't develop faster by cutting corners - you only turn your code into a muddle that will probably be so buggy it may not even ship without a rewrite. Given this, what is the alternative to slow, methodical development? It turns out there are actually a lot of alternatives. Generally McConnell suggests developing quickly, but argues that it is possible to develop too quickly. Whilst speed of development may sometimes be the overriding criteria it is generally not worth the trade-offs involved in optimising totally for speed of release.

What McConnell suggests therefore are a number of strategies for improving the speed of development whilst maintaining a reasonable balance with the other activities of keeping code maintainable, of good quality, well designed and structured. The first two thirds of the book present detailed discussions on various aspects of software development and management, from estimating to teamwork to managing risk to various lifecycle models. The last third of the book goes through McConnell's "best practises" in rapid development.

Fundamentals

Rapid Development isn't always the only goal - you also need to consider optimising a project for schedule speed, schedule risk or schedule visibility - you need to decide what you want. There is a story (not in the book, but seems a good example) of a lift company, who made a lift for a high-rise block of flats. Everyone complained that the lift was not fast enough, but no matter what the company did it seems they could not make the lift travel fast enough for the tenants. Then someone suggested a simple solution which solved the problem. They put mirrors where people waited for the lift. While waiting people would either look at themselves or glance sideways at other people and no longer noticed how long the lift took to arrive. In the same way if a project increases its visibility this sometimes reduces the pressure to deliver. Because people can see what is happening in the project and the progress that is being made, they are not left "doing nothing" while waiting for it to arrive.

The four pillars of rapid development are:

  1. Avoid classic mistakes
  2. Development Fundamentals
  3. Risk Management
  4. Schedule-Oriented Practises
The four-dimensions of development are:
  1. People
  2. Process
  3. Product
  4. Technology
Instead of going for all-out rapid development, go for efficient development, fast, but not fast at all costs.

Here are the classic mistakes by category:

People

  1. Low motivation
  2. Weak personnel
  3. Uncontrolled problem employees
  4. Heroics ("can do" doesn't usually come through)
  5. Adding people to a late project
  6. Noisy crowded offices
  7. Friction between developers and customers
  8. Unrealistic expectations
  9. Lack of effective project sponsorship
  10. Lack of stakeholder buy-in
  11. Lack of user input
  12. Politics placed over substance
  13. Wishful thinking
Process
  1. Over-optimistic schedules
  2. Insufficient risk management
  3. Contractor failure
  4. Insufficient Planning
  5. Abandonment of planning under pressure
  6. Wasted time during the fuzzy front-end
  7. Shortchange upstream activities (e.g. didn't have time to do design)
  8. Inadequate design
  9. Shortchange quality assurance
  10. Insufficient management controls
  11. Premature convergence (push to get the product ready to go out)
  12. Omitting necessary tasks from the schedule
  13. Plan to catch up later
  14. Code-like-hell programming
Product
  1. Requirements gold-plating - insisting on a lot of complex features
  2. Feature creep
  3. Developer gold-plating (technically interesting features)
  4. Push-me, pull-me negotiating - allow a slip then add tasks
  5. Research-oriented development
Technology
  1. Silver-bullet syndrome
  2. Overestimated savings from new tools and methods
  3. Switching tools in the middle of a project
  4. Lack of automated source control

Risk control. List the risks, assess the most important and prioritise on these.

Schedule

Where the time goes, this is where time should be spent:
 Small Project (<25,000 lines)Large Project (500,000)
Architecture/Design10%30%
Detailed Design20%20%
Code/Debug25%10%
Unit Test20%5%
Integration15%20%
System Test10%15%

Lifecycle

The Pure Waterfall lifecycle has the following architecture:

Alternatives:

Estimating

Keep two estimates, the optimistic and pessimistic and keep bringing the two together. So at the beginning of a project you may say the project will take between 10-30 weeks. This is because there just isn't enough information for a more accurate estimate. As more time is spent on the project, the two estimates will converge. Resist the pressure to state a single figure.

Tips:

  1. Allow time to estimate
  2. Use data from previous projects
  3. Get developer-based estimates
  4. Have a walk-through to compare estimates
  5. Estimate at a low level of detail
  6. Don't forget tasks
  7. Use software estimation tools
  8. Use several techniques and compare results
  9. Keep re-estimating as the project progresses
Prepare case-based estimates: Use coarse time periods and dates. Page 194 and 196 contains tables to assist in estimating, there are two tables, one for nominal schedules and the other for efficient schedules. There are columns for shrink-wrapped, business products and systems products and for each area a schedule in months and in effort (work-months) for projects starting from 10,000 lines of code up to 500,000 lines of code. The shortest length of time is for 10,000 lines of code to be developed for a business product in an efficient schedule (4.9 schedule months and 5 work-months). For a nominal schedule the same task takes 6 schedule months and 9 work-months.

If you miss a week at the start of the project, don't assume it can be made up later, but also don't just add it on the end. Instead calculate the factor your original estimate was out, and apply that to the whole project.

Research has shown developer estimates to be 20-30% optimistic.

You can't compress a schedule more than 17% by increasing resource.

Check the rate of work of a developer - how many work-hours per day is assumed? Is this valid?

General Points