Saturday, June 21, 2008

Can software component creation be industrialized ?

One of the best examples of industrialization in this century includes car manufacturing, and invention of assembly lines.  Each parts of the car gets  manufactured somewhere else and finally gets assembled at one place. The parts are made with such a perfection that even robots can put together various parts in no time.  You might be wondering, yeah I know this and everybody knows this fact, how is this related to this software architecture blog ?   Okay, here is what I wanted to ask, can the software be developed in a similar manner as a car gets manufactured ?  i.e. various components can be designed and developed at various places, and shipped to one location. Some automated tools can in turn assemble these components to build an application. Finally a final test can be done by the QA team before releasing the product.  I believe it is difficult to implement this idea in a software industry keeping our current understanding and knowledge in mind, however it is not impossible.  Here is an article that provides more insight into the topic I am discussing.

Loosely coupled, reusable and Replaceable components

I am sure as software developers we know the importance of designing and developing reusable and loosely coupled components. Recently in the XP discussion forum I came across a discussion on the topic of "Building Agile applications using replaceable components". It drew my attention and followed the thread to understand where it was heading. Basically the author challenges the basic assumption behind "loosely coupled components". Instead of giving my version of the details, I would let his article speak about the thoughts.

Here are couple of links from the author(Raju's) webpage explaining loosely coupled, replaceable components.

Hierarchy of swappable modules

Loose coupling and SOA

How to build an application using replaceable components

Also this article challenges the assumption that Java could be used to build loosely coupled, replaceable components.