Design
- On small and mid-sized projects, design and construction are often combined.
Levels of Design
- System
- Subsystem
- Classes/ Modules
- Data and Functions/ Methods
- Code
- This indicates the level of details.
- Used to organize the system.
- You need to understand that different design methods are required at each level.
- People who design the overall system may not be the same as those who build classes/functions.
Key Design Concepts
- Manage complexity.
- Aim for desirable characteristics in the software design.
- Respect the different levels of design.
Principles of Design
Design is a Wicked Problem
- Means that a problen can only be fully defined while solving it.
- Requires you to solve the problem a second time after you understand it to create a good solution.
Design is a Sloppy Process
- The finished design may look organized but the steps to reach that point involve many mistakes.
- The differences between a good and bad solution can be small.
- It can be difficult to know when a design is good enough.
Prioritization
- Designer must develop a system which selects between often conflicting characteristics/ priorities.
- ie. memory use, performance, development time, etc.
Restrictions
- Restricting choices is part of design.
- Restrictions simplify solutions and lead to better results.
- Without restrictions a design can become too broad and unwieldy.
Design is Nondeterministic
- You often cannot predict the results of a design.
- Different people will find different solutions; more than one can be valid.
Design is a Heuristic Process
- Design tends to use ‘rules of thumb’; things that generally work but are not guaranteed.
- Bad idea to attempt to rigidly define a process to try and guarantee results.
Design is Emergent
- Design emerges (evolves) through process.
- Design does not appear suddenly in one step.