1. Software System
2. decomposition into subsystems or packages
Identify all subsystems, including determining how to divide the system into major subsystems and clearly defining how subsystems use other subsystems.
Interaction between subsystems: one sub-system calls the subprograms of another sub-system. One sub-system contains classes of another sub-system. One sub-system inherits classes from another sub-system;
Common subsystems: business rules, user interfaces, database access, and system Dependencies
3. Break down into classes
Identifies all classes in the system
Define the details of these classes dealing with the rest of the system
4. subprograms
Divides each class into subprograms, and refines the class interfaces defined in step 1 into private subprograms of the class.
5. subroutine internal design
Provides detailed functions for subprograms, including writing pseudocode, selecting algorithms, organizing code blocks inside subprograms, and writing code in programming languages.