The Wayback Machine - https://web.archive.org/web/20100531014019/http://java.sys-con.com:80/node/1402441

Welcome!

Java Authors: Maureen O'Gara, Pat Romanski, Elizabeth White, Udayan Banerjee, Salvatore Genovese

Related Topics: Web 2.0, Java, SOA & WOA

Web 2.0: Blog Feed Post

What Software Development Should Not Learn from Manufacturing

In Software Engineering There Have Always Been Two Schools of Thought

In software engineering there have always been two schools of thought. One school feels that there is a lot to learn from manufacturing. The other school thinks that they are entirely different.

There have been three distinct phases in this debate:

  1. CMM Phase: Manufacturing has transitioned from craftsmanship to mass production – productivity and quality has improved many-fold. Software development can also benefit from such transition. CMM movement was born from this thought.
  2. Agile Phase: Manufacturing deals with machine, software development deals with people. Processes involving machines can be controlled precisely. People are inherently different and are not interchangeable. People communicate better face to face rather than through written documentation. From this realization agile movement was born.
  3. Lean Phase: Toyota revolutionized manufacturing through lean manufacturing systems and dramatically improved quality and optimized cost. The core of lean manufacturing is empowered teams. Since agile movement also is based on self-organizing teams it must be possible to transplant the learning from lean manufacturing to software development. This led to lean software development.

There is an apparent logic in all three reasoning. So, which advice should you follow? Are they compatible with each other? Before answering these questions you should look at the differences between manufacturing and software development.

Manufacturing

Software Development

Repeatable:

Same item produced many-many time

Unique:

Software is written only when nothing similar exists

Well-defined:

Even before start, the specification of the output is clearly defined

Incomplete & Evolving:

Not only are requirements sketchy at the beginning, but also likely to change during the development cycle

Known:

The process of converting input to output is clearly known and can be repeatedly done

Unknown:

There always are unknowns – in form of new technology, new interfacing requirement …

Machine & Tool:

Any process efficiency is dependant mostly of the machines and tools used and less on the people operating it

People:

Knowledge, experience and skill of people can make huge difference in productivity sometime as much as 1:100 between best and worst

 

Will this gap ever be bridged? Will software development move closer to manufacturing?

I doubt it – here is why.

Repeatability vs. Uniqueness:

“…Every advance for the future state of the world requires the presence of software yet to be written…” – Grady Booch (here)

You are never going to write software which already exists!

Well-defined vs. Incomplete & Evolving:

The authors of the Agile Manifesto understood it when they wrote:

“…Responding to change over following a plan…”

“…Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage…”

Software is about advancement … software is about new idea … not all new idea succeed. Trial and error cannot be avoided.

Known vs. Unknown:

Todd Anglin in his very interesting post The Future of Software Development states:

“…There is no end in sight to the deluge of new technologies being delivered to market…”

“…If there is any one concept or idea that software developers must absolutely comprehend, it is this: it really is okay not to know it all…”

The rate of technology change is accelerating. Technology options are increasing. The world is becoming more and more interconnected. Hence, software developers of the future will need to handle more unknown, not less.

Machine & Tool vs. People:

Daiv Russell, in the article Hold On to Your Top Performers, states:

“…Most CTO’s realize that The Pareto Principle applied to IT staff means that 20% of your people are delivering 80% of your entire team’s bottom-line value…”

“…The difference between the extremes has been reported as high as 100:1…”

Unless we can find a method of completely automating the process of software writing, the dependency on people will remain. The chances of automating the process of software development in foreseeable future look remote.

What can we conclude from this?

Reject all idea which is derived or borrowed from managing predictable processes.

Accept all idea which helps you to deal with unknown and uncertainty.

Read the original blog entry...

More Stories By Udayan Banerjee

Udayan Banerjee an IT industry veteran who started his career in 1977. In his posts he mainly concentrates on looking at the IT scene and changing trends from an Indian perspective - and has a special interest in collective intelligence arising out of self-organizing complex systems.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


'); var i; document.write(''); } // -->
 

About JAVA Developer's Journal
Java Developer's Journal presents insight, technical explanations and new ideas related to Java and covers the technology that affects Java developers and their companies.

ADD THIS FEED TO YOUR ONLINE NEWS READER Add to Google My Yahoo! My MSN