- Analysis: What's the problem? What does the user want? What does the user need? What can the user afford? What kind of reliability do we need?
- Design: How do we solve the problem? What should be the overall structure of the system? Which parts does it consist of? How do those parts communicate with each other? How does the system communicate with its users?
- Programming: Express the solution to the problem (the desing) in code. Write the code in a way that meets all constraints (time, space, money, reliability, and so on). Make sure that the code is correct and maintainable.
- Testing: Make sure the system works correctly under all circumstances required by systematically trying it out.
Programming plus testing is often called implementation.