Re: Best Practices to Manage Complexity in Hardward/Software Design?
Know the design priorities. This means understanding the most critical
requirements.
Understand that all designs are trade-offs between conflicting
requirements and all but one solution are sub-optimal given the
solution space. No matter what design technique you use, including all
diagramming and emergent design processes, this is true. You are not
likely to find the optimal solution.
Depending on the end purpose, and if it truly is highly complex,
multiple design teams are a good idea. They'll have landed upon
differing sub-optimal solutions. Comparing and reconciling the
competing designs can lead to a better sub-optimal solution.
Make sure you fully understand the problem. Break down the problem into
sub problems. This is easiest for me to do in a hierarchical fashion,
but is not the only way. There are many good, non-software engineering
books that talk about problems solving and present diagraming
techniques. If you are serious about design, you should read a few of
these and even play with other diagramming techniques (though don't
necessarily try to impose these non-SE diagrams on the corporation!).
The design does not have to be hierachical, and the implementation
probably should not be.
Prototype the difficult problems.
Support the design with tests (test before code!).
Walk through designs. Absolutely!
Know that requirements change.
|