As per a sort of unspoken understanding with my eldest son, his good behavior whilst running errands on Saturday earned him a new Bionicle from Target. And of course when he got home he quickly put it together, again amazing me with his skill in following architectural blueprints. But it really got me thinking about the metaphor for building blocks and connection points. Being a fan of these fun toys helped me form this up and it's still taking shape, but I think that it's important to note the metaphor which I don't think trivial from an application design standpoint. I know that folks like TowerGroup have used similar metaphors before, but of course I would have questions about their understanding of application architectural needs or concepts.
Many people use the LEGO as a metaphor for the building blocks of software. But think about the rigidity of that model. Typical LEGO configuration are blocks of various length/width with all the same connector design (little nubs...what are those things called?). And out of those blocks you can make anything and when put together you can't distinguish the blocks from each other in the end result (colors aside). But think about applications and application parts....they're not like that are they? Not all application parts fit in all areas of an application, and each set of application blocks produces something very unique. And in addition, the connectors (integration, interop and messaging) for applications are not often all the same. Some connectors require security, reliable messages, fire and forget, point to point, forwarding, etc. And so each connector looks differently and behaves differently. Each connector does not universally connect to every other. That is one fallacy with the vanilla LEGO as a software building block metaphor.
I prefer the Bionicle as a better metaphor. To understand this you should visit http://www.bionicle.com to see the various creatures that you can create and the parts. Let me explain somewhat how I construct this metaphor so that you understand how it helps describe true IT and software design.
In completing the application, and when using proper design principles and "best fit" architecture you arrive at something functional AND specifically suited for what it was designed to do with the parts working in harmony.