This is the summary of the third chapter from the book Code Complete. It is about the importance of planning and preparation in software projects.

Most common project risks in software development are poor requirements and poor planning. The primary goal of preparation is to reduce risk, to clear major risks out of the way as early as possible so that the bulk of the project can proceed as smoothly as possible.

Planning means understanding what you want to build so that you don't waste money and time building the wrong thing. Sometimes users aren't entirely sure what they want at first, so it might take more effort than seems ideal to find out what they really want. But it's still cheaper than building the wrong thing, throwing it away, and starting it over.

Pay attention to the problems you experience. It takes only a few large programs to learn that you can avoid a lot of stress by planning ahead.

The urge to start coding is so strong that developers are reluctant to perform the proper planning. We grab the project and run to start coding, as soon as possible.

Paying attention to quality is also the best way to improve productivity. Emphasize quality at the beginning, middle, and end of a project. At the beginning, you plan, gather requirements, and design a high-quality product. In the middle, you emphasize construction practices. Finally, you do the testing.

However, testing is what many people think of when they think of software quality assurance. It is only one part of a complete quality-assurance strategy, and  it's not the most effective part. Testing can't detect a flaw such as building the wrong product or building the right product in the wrong way. Such flaws must be worked out earlier than in testing - before construction begins.

From: Code Complete