- Use existing technologies; so far as possible
- Understand what worked in the past and why
- Emulate projects that worked
- Test to keep on track and on schedule
- Choose programming styles that allow completion of sections
- Design software with definite tests
- Build simplest part of interfaces first