As a final step, we specify the internal elements of all major system components, their properties, relationships, processing, and often their algorithms and the data structures.
The detailed design may include:
Decomposition of major system components into program units;
Allocation of functional responsibilities to units;
User interfaces;
Unit states and state changes;
Data and control interaction between units;
Data packaging and implementation, including issues of scope and visibility of program elements;
Algorithms and data structures.