- Divide and conquer. Stated in a more technical manner, analysis and design should always emphasize separation of concerns (SoC).
- Understand the use of abstraction. At it core, an abstraction is a simplification of some complex element of a system used to communication meaning in a single phrase.
- Strive for consistency. A familiar context makes software easier to use.
- Focus on the transfer of information. Pay special attention to the analysis, design, construction, and testing of interfaces.
- Build software that exhibits effective modularity. Separation of concerns establishes a philosophy for software. Modularity provides a mechanism for realizing the philosophy.
- Look for patterns. Brad Appleton suggests that: “The goal of patterns within the software community is to create a body of literature to help software developers resolve recurring problems encountered throughout all of software development.
- When possible, represent the problem and its solution from a number of different perspectives.
- Remember that someone will maintain the software.