Goals of Good Software Design
Definition
Software Design is the process of transforming requirements (from the SRS) into a blueprint for constructing the software — deciding the architecture, components, interfaces, and data for the system to be built. The goals of good design are the quality attributes a design should achieve to be considered "good."
Key Goals
1. Correctness
The design must satisfy all requirements specified in the SRS — nothing missing, nothing incorrect.
2. Efficiency
The design should use resources (time, memory, CPU) optimally — good algorithms and data structures.
3. Simplicity / Understandability
A good design should be as simple as possible — easy for other developers to read, understand, and reason about.
4. Modularity
The system should be divided into well-defined, independent modules, each handling a specific responsibility (ties into Coupling and Cohesion).
5. Maintainability
The design should make future changes/bug-fixes easy without breaking other parts of the system.
6. Reusability
Components should be designed so they can be reused in other parts of the system or future projects.
7. Flexibility / Extensibility
The design should accommodate future growth and new features with minimal rework.
8. Reliability
The design should minimize the chance of failure, and handle errors gracefully.
9. Portability
The design shouldn't be tightly bound to one specific platform/environment, where portability is a requirement.
Two Fundamental Design Principles (underlying all goals above)
- High Cohesion — elements within a module should be closely related
- Low Coupling — modules should be as independent from each other as possible
Why These Goals Matter
Achieving these goals directly reduces long-term cost: about 60–80% of software cost occurs in the maintenance phase, and a well-designed system is dramatically cheaper to maintain, extend, and debug.
Exam tip: List and briefly explain 6–8 goals (Correctness, Efficiency, Simplicity, Modularity, Maintainability, Reusability, Flexibility, Reliability, Portability) — this is a very common opening question for the Design module.