I have love-hate relationship with metaphors. They can be extremely helpful in explaining complex stuff, but can also be horribly misunderstood or misused in wrong context.
One of these horrible metaphors in software architecture is a picture of a building or city to explain (enterprise) architecture and the architect as a title. This metaphor caused much more harm than good. Following are the main differences between the two:
- Software architecture is…well…soft. It’s quite difficult to refactor a building, while refactoring even the foundation of a software system has become a normal part of Scrum cadence.
- Developing software is for most part a very creative process, while assembling a building with pre-build walls requires much less creativity and a lot of precision. There is little room for mistakes.
- The number of options to build a software product is magnitudes larger than for buildings. The speed of improvement and innovation in software is also much faster. Therefore, too much standardization in software development, in contrary to building construction, blocks improvements and innovation.
|Japanese Marble Bonsai|
- It is about having required complex behavior, while spending minimal amount of water and space.
- Continuous refactoring towards clean and minimal structure.
- It is about getting rid of any technical fanciness without clear value.
- It means taking care of the tree throughout the whole lifecycle.
- Let it grow first, before seeing which improvements are useful. Don’t be too late.
- Make very small improvements. Bigger ones tend to be too complicated.