From the metrics on this blog, I see that many of you are either software developers or are database administrators involved with developing software solutions, either for your own company or for sale. I have often seen the process of creating applications called “Software Engineering”. In fact, in the U.S,, Microsoft programmers are called “Software Development Engineers”. You cannot use this term in some countries, since “Engineer” is used to denote a specific certification recognized by the government. (I kind of like that, but I wouldn’t refuse the people here the title)
Regardless of the political baggage, I’ve often thought about development in Engineering terms. I’ve worked in Engineering companies before, such as NASA and a pharmaceutical company, and the disciplines and processes I learned there fit nicely with how I learned to write code. However, as I was watching “How it’s made” on Television last evening for a few minutes, I began to see parallels with software development and distribution (that last part is key) and the manufacturing process. I’ve also worked in large and small manufacturing shops (yeah, I’ve had a lot of jobs), and now I’m not sure which term to use.
Here are the arguments for each: The dictionary tells us that engineering is “the application of science in the design, planning, construction, and maintenance of buildings, machines, and other manufactured things”. Interestingly, a synonym of engineering is – Manufacturing! The argument for an engineering analogy for software is a great deal of research, thought, preparation, planning and design work. The argument against using that analogy is that there is little regulation, and the science required for modern software development is not normally anywhere near what is involved in engineering.
On the “Manufacturing” side of the argument, the shade of meaning is a little different. The dictionary says that manufacturing is “transitive and intransitive verb - to make something into a finished product using raw materials, especially on a large industrial scale”. Normally a series of machines automate the manual steps in changing some raw material into a usable good. There are strict processes that must be followed to ensure consistency, safety and quality. There are machines at the end of the row, bay, or area that perform automatic tests on the finished good before it goes out. The process is very automated, mechanized and routine.
I think at least the holistic end-to-end view of the manufacturing process fits well for software. True, we do not have the same physical objects we work on, but when you think about it, our “manufacturing machines” are really the high-end languages we use. We have standardized blocks of code we use for quality and consistency. We have automated and manual testing at the end of the process. The argument against a manufacturing analogy is that our development is not as automated, since each application is a “one-off” object.
Perhaps it does not really matter, or perhaps neither of these terms is completely accurate. I think that the true “development” of software is in fact an engineering exercise, and the creation and distribution processes have a lot to do with manufacturing. I do think it matters to have a paradigm in mind, because all of the research over humanity’s history can be leveraged by a new discipline like ours to jumpstart our processes and help us develop our practices by learning from others. If you don’t agree, then I invite you to do a study of the manufacturing process and engineering disciplines and see if there are any ideas you can adapt to your own work today. I’ll wager you’ll find out that there are some real benefits in each that will give you practical guidance. It has for me.
PingBack from http://msdnrss.thecoderblogs.com/2008/02/15/engineering-or-manufacturing/
PingBack from http://www.biosensorab.org/2008/02/15/engineering-or-manufacturing/
From the metrics on this blog, I see that many of you are either software developers or are database
Simply put – Software development is NOT manufacturing. Manufacturing is all about taking a design and delivering on the tangible good in a repeatable way. In creating new software, you are developing something one time. There would be no purpose in writing code for the same thing over and over again – no new value add for customers. Manufacturing is all about removing variation in the creating the end product. Software development is all about using variation to develop new customer value. Donald Reinertsen in his book “Managing the Design Factory”, gives us the following analogy. Design (software development) is like coming up with cooking recipes. Manufacturing is about creating food from those recipes for people to eat.
Bill Ramos, Microsoft
Ah, but I respectfully disagree with Bill - and his comment is exactly why I made this post. Many software developers I've known have never worked in manufacturing, and have no idea how it works. To them it is just machines and assembly lines, everything is cookie-cutter precise. There is no thought for how things run so smoothly.
Anyone out there care to comment on that? Come on, I know some of you work in manufacturing....
Bill Ramos compared software development with a specific type of manufacturing, namely discrete repetitive. There are of course other types of manufacturing such as discrete workorder and process. Discrete workorder is about creating similar but customized versions of a product per order, which is analogous to what software development as whole is. An example of discrete workorder is Jessie James' West Coast Choppers where each bike is unique.
Regardless of which analogy is "best" or "more complete", we ought to be focusing on what processes and ideas other disciplines employ that we can adapt to make our industry better.
My two cents: I've also worked in both fields (I've had lots of jobs too). The relationship between the two cannot be ignored or (imho) separated from a discussion involving either. Engineering always precedes manufacturing.
You and I probably watch the same kind of television. I particularly like History Channel's Engineering An Empire series where they talk about stuff accomplished millenia before our modern technology. It's humbling to see how much these folks did without computers of any sort - it kind of makes me wonder why I'm not accomplishing more with 2.2 billion cycles per second on a couple cores, you know?
Engineering took me into technology. Manufacturing engineering, actually. I used to design and build electrical control panels, program PLCs (Programmable Logic Controllers) and HMIs (Human Machine Interfaces). The data had to go somewhere; for me it ended up going to SQL Server... and here I am.
I think one of the common fallacies of some (not all) off-shoring efforts is the perception that software can be manufactured - that it's merely repetitive labor.
Do the engineering up front and create a Framework that does a lot of heavy lifting or monotonous stuff, you can code to a spec and it sort of looks and feels like manufacturing. The fallacy comes in when someone wants something truly innovative from soup to nuts and thinks this type of development can be manufactured without the engineering.
Again, this is just my opinion.