Architecture is more about 'what' is being built (e.g. interface definitions, which apps and modules will be developed or used and what they are responsible for). Design is more code level and is more about 'how'.
Objectives for the architect:
- Enhance technology support for business change.
- Optimize developer productivity.
- Minimize support infrastructure needed.
- Optimize development throughput.
- Protect value for technology investments (includes risk mitigation).
Architects aren't the only people changed with these items. However, technology choices and strategies are a large determining factor in achieving these objectives.
Architects may be uncomfortable with the business responsibilities I list. This is unfortunate. Architecture, like everything else in business, needs to at least pay for itself if not contribute value to the organization. If it does not, it will become extinct.
Architects achieve these objectives by employing the following tactics:
- Facilitate product selection (including build vs buy and support/testing tools).
- Module identification, boundaries and contracts.
- Effective communication of the above to developers and management.
- Enforcement (with management support) of architecture decisions.
Objectives of senior developers (aka designers) are the following:
- Mentor junior developers.
- Produce easily supportable code.
- Identify and communicate implementation limits and risks.
- Identify and communicate opportunities for enhancing the architecture to optimize development and support.
- Identify and communicate architecture gaps and inconsistencies.
- Identify and communicate code that isn't easily supportable to management.
Many java architects do a mixture of design and architecture. Consequently, the two roles are often confused. Also, some enterprises aren’t large enough to formally separate out the architect role.
I’ve noticed that many developers are good at ‘identifying’ architecture issues, gaps, and inconsistencies, but fail at communicating them. Either they never communicate them or communicate them so poorly that those concerns never affect change.
Do you see any differences between architecture and design that I haven’t listed?