Getting Started
Begin by gaining an understanding of design patterns. There are good references in the Additional Information
section of the Evolutionary Design page. Patterns are essential to creating, managing, and
evolving designs. As the name implies, evolutionary design involves returning to the existing design over and over
again to refine, change, and improve previous thinking. It can be performed at the beginning of a development cycle
(before implementation), during a development cycle (while implementing code), after the cycle (when the developer
tests have successfully executed), or any combination of these. The team should determine where in the development
cycle the design will be performed. See Task: Design the Solution.
Understand refactoring and the difference between code refactoring and design refactoring.
There is no exact boundary separating the two, but there are some clear areas where the developer will wear the "design
hat" when reworking the design into a better structure. These areas will usually involve identifying where design
patterns can replace or enhance the existing design, or areas of the design where patterns can be identified and
harvested for reuse.
Common pitfalls
Evolutionary design emerges from refactoring existing design. This improves the design without changing the behavior of
the system. Failing to perform developer or unit testing is a high risk activity, as you can not guarantee that:
-
The original design works correctly
-
The refactored design works correctly
Therefore, you must perform rigorous developer testing in order to verify the robustness of the design. Otherwise, you
may waste a lot of time refactoring something that does not work, or refactoring the correct behavior out of the
system.
|