The LEGO BRICK is a well established metaphor for software components. In reality, while the LEGO BRICK and a piece of software share many attributes they differ in a critical point: how easy is to joint or disjoint two items together.
You see, in the words of a former LEGO CEO, the brick is peculiar because the bond between brick while firm enough to sustain your creations, is not so firm that it requires a lot of force to break. Compare with software where the integration of two systems always entail overcoming the friction of connecting them:
Find the spec for system B
Write integration with system B:
Troubleshoot integration with system B
Certify integration with System B
A more perfect example can be found in Japanese Carpentry where two pieces of wood are connected by a joinery. It doesn't matter if all joints are document, they still require work to overcome the friction of not being the same piece of wood.
This updated metaphor should serve as bulwark to the all too common idea of software engineers that loosely couple systems are free of friction. Connecting two entities to become one, will always require overcoming friction -- with the LEGO friction approaching zero.


