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.

1 comment:

Satish Avhad said...

Great question.

According to me, to an extent some industrialization does happen in s/w in terms of distributed component creation. Like in one of my earlier projects different teams created different 'parts' - PeopleSoft, Portal, Nextance, Elance, WLI components. Or the the separate Model, View, Controller created by separate teams in MVC architecture and 'assembled' together in CVS. Or development using any design pattern that can reduce coupling like Business Delegate

But you are right in the sense that it is not automated nor extensively done nor looked at as a time saver.

About assembly lines i think they don't increase the speed of producing a single unit, but only increases rate when there are a stream of units to be produced. Since only one unit needs to be produced in s/w, and duplication is easy, assembly line production might not apply to software.

There are also, I think some disadvantages of assembly line/ industrial production. One issue is it is a little inhuman. What if somebody wants to do some other part of the work. Is bored by doing the same thing. Imagine the job of a person at assembly line is to fix three screws in a car door. Day in and day out. What if he wants to do something else, or be a little creative?

I think Agile comes to the rescue in case of software. Where one picks up tasks that one likes at the start of the sprint. If during the sprint one feels like doing someone elses task or gets a better idea about implementing someone elses task he/she can take that up. It is flexible, as there are daily interactions. It is a more human approach.

Personally, I think its good that s/w is developed rather than produced. :)