There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
Design and programming are human activities; forget that and all is lost.
... with proper design, the features come cheaply. This approach is arduous, but continues to succeed.
It's hard to read through a book on the principles of magic without glancing at the cover periodically to make sure it isn't a book on software design.
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
When in doubt, use brute force.
Code Complete: A Practical Handbook of Software Construction by Steve C McConnell
ISBN: 1556154844 Page: 163 This book is available from Amazon
Organizations that design systems are constrained to produce copies of the communication structures of these organizations
The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition) by Frederick P. Brooks
ISBN: 0201835959 This book is available from Amazon
First do it, then do it right, then do it fast.
The best designers will use many design patterns that dovetail and intertwine to produce a greater whole.
Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
ISBN: 0201633612 This book is available from Amazon
...the organization chart will initially reflect the first system design, which is almost surely not the right one [...] as one learns, he changes the design [...]. Management structures also need to be changed as the system changes...
Complexity is a sign of technical immaturity. Simplicity of use is the real sign of a well design product whether it is an ATM or a Patriot missile.
Great designs come from great designers.
At first sight, the idea of any rules or principles being superimposed on the creative mind seems more likely to hinder than to help, but this is quite untrue in practice. Disciplined thinking focuses inspiration rather than blinkers it.
Planning is also design.
The first asset in making designs is a good notation to record and discuss alternative possibilities.
Design first, then code.
Changes in software design will eventually mean "one step forward, two steps back". It is inevitable.
The hardest part of design... is keeping features out.
Trustworthy means that a software product or component is safe, reliable and secure. Checklist for Software Design for Reliability 1. Simplify 2. Use fault tolerant libraries and transfers for recovery. 3. Rejuvenate the executing system from time-to-time. 4. Hire good people and keep them! 5. Limit programming features. 6. Limit module size initialize memory. 7. Check design stability. 8. Bound the execution domain. 9. Engineer to performance budgets. 10. Reduce algorithm complexity. 11. Factor and Re-factor. 12. Improve maintainability [with 20% of staff].
To have big impact, improve performance.