How can you design the software which is built in tiny increments?
How can you ensure that the software has a good structure which is flexible, maintainable and reusable?
ARE'NT YOU GOING TO MISS THE BIG PICTURE?
Not really! In an agile team, the big picture evolves along with the software.
How? With each iteration, the team improves the design of the system so that it is as good as it can be for the system as it is now. They focus on the current structure of the system, making it as good as it can be.
How do we know if the design of software is good?
Avoiding these following symptoms of poor design (design smells) should be a way.1. Rigidity - The design is hard to change.
2. Fragility - The design is easy to break.
3. Immobility - The design is hard to reuse.
4. Viscosity - It is hard to do the right thing.
5. Needless Complexity - Overdesign
6. Needless Repetition - Mouse abuse
7. Opacity - Disorganized expression
These symptoms are similar in nature to code smells, but they are at a higher level. They are smells that pervade the overall structure of the software rather than a small section of code.
How to avoid design smells?
The principles of object-oriented design that help developers eliminate design smells and build the best designs for the current set of features.
1. SRP - The Single Responsibility Principle
2. OCP - The Open-Closed Principle
3. LSP - The Liskov Substitution Principle
4. DIP - The Dependency Inversion Principle
5. ISP - The Interface Segregation Principle
These principles are not the product of a single mind, but they represent the integration of the thoughts and writings of a large number of software developers and researchers.
Agile teams apply principles to remove smells. They don't apply principles when there are no smells.
Often, a design smell is caused by the violation of one or more of the principles.Principles are not a perfume to be liberally scattered all over the system. Overconformance to the principles leads to the design smell of Needless Complexity.
Reference:
Robert C.Martin, Agile Software Development, Principles, Patterns, and Practices; Section 2, Agile Design.