What is the difference between Software architecture,design and implementation?
I was writing about the considerations of software architecture and design on good coding, when this question struck me. Like most other software developers and designers, the above terms connote a varying degree of abstraction to me. Most of us think architecture as the highest form of abstraction, giving a few details as design and writing complete details as implementation.
But I think the amount of detail alone is insufficient to characterize the differences. The distinction between these terms should also be qualitative not merely quantitative. And so, I searched for a qualitative distinction between these terms. I found a good paper "Defining the Term Architecture,Design and Implementation" by Rick kazmann and Amnon Eden, which distinguishes two separate interpretation of abstractions:
- Intensional (vs Extensional) : specifications are 'abstract' in the sense that they can be formally characterised by the use of logic variables that range over an unbound domain.
- Non-local (vs local) : specifications are 'abstract' in the sense that they apply to all parts of the system.
The above distinction leads to the summarization of the 'intension/locality' thesis.
- Architecture specifications are intensional and non-local
- Design specifications are intensional but local.
- Implementation specifications are both extensional and local.
The above thesis provides a good distinction which accords not only with intuition but also with best industrial practices.
