While software architecture describes system concepts, a design is an implementation plan for the architecture. Design is where the specific technologies are chosen – computer languages, a relational database (or a NoSQL database), frameworks, etc. Most fundamentally, a designer defines the structure within the parts of the system and makes choices about how the parts of a system will communicate; for example, via a message queue.
A designer aims for elegance, which usually equates to simplicity, robustness, flexibility, and a close match between problem and solution. In a system with a database, for example, the correctness of the data model is probably the most important factor in matching the solution to the problem and making the system flexible in the face of change. Data modeling, object modeling, etc. are the responsibility of the designer.
With a design in mind, development can follow. But it's important to remember that design and development are usually interactive, with the design changing over time to reflect learning that happens during development.


Copyright © 2010-2016 Bob Woodbury. All rights reserved.