I’ve read several articles and blog entries where experts argued over the semantics of “software construction” versus “software development”.  Personally, I see little value in the debate.  But I won’t let that stop me from contributing my 2 cents.

Some argue that software development implies an endless process of growth, evolution, and unfolding; while software construction should be carried out like building construction (see WWISA – “The Role of the Software Architect”).  Others argue that software is not like a building, and despite some common terminology, the process of software development is not like, and should not be compared to, building construction (see AgileManagement.net – “Construction Time Again”).  Personally, I can understand the former sentiment, but I find myself more in the camp of the latter.  I also think that, in support of their opinion, WWISA has chosen the most negative connotation they could find for development.

I could just leave it at that, and continue to confound both groups by using the terms almost interchangeably, as I am prone to do; but I fear that if I drop it here it will provoke the dieties of flameage to rain down their vengeance upon my faire site.

Let me start by saying that I like the concept of software construction.  With it comes the connotation of putting together a collection of components into an assemblage with finite bounds and physical mass.  As a child, I played with Lego’s and later with Erector sets (Dare we consider another alternative; “software erection”?).  This was construction. We architects like to think of software this way. In the ideal world, we are told, software objects will be selected from a re-use repository, and there will be a component to meet any need.  But software is not this way today. I don’t believe we are significantly closer to that goal than we were when I took my first programming job, 22 years ago.

I believe that software development is ordinarily used in a context that parallels with product development; where a concept is modeled, elaborated, refined, and prototyped in preparation for eventual manufacture.  The parallel is a close one, except that software doesn’t need to be manufactured, as the prototype is eventually refined into or supplanted by the final product.  The result of product development is the fabrication of the product by manufacture.  Fabrication can be a synonym for construction.  So in this context, construction is a logical result of development. When the manufacture step is omitted, construction becomes a component of development.

If we must draw on building analogies, let’s take a look at real-estate development. Real-estate development involves construction, but seems to exhibit more similarity to software. Real-estate development is often phased, like software, where a core is built up, then more parts are developed in further iterations.  An interesting point here is that the real-estate is developed by applying the process of construction iteratively to a number of elements. So this form of development is evolutionary, it does unfold. The architect of a development here is more concerned with the interplay of the elements, than with the architecture of any single element; the single elements are the domains for other architects.  Covenants and building restrictions form a parallel with software architectural constraints. Real-estate development doesn’t have the positive connotation of building construction, probably because real-estate development generally implies urban expansion; but from a practical perspective it embodies an orchestrated progression of successive constructions.  In this way perhaps it is very similar to software development, and again, construction is a component of development.

But software is not really physical. It is mathematical abstraction for control algorithms that affect electrical state changes. Those who play in this realm are, to one degree or another, applied discrete mathematicians; and in the language of mathematics we find new meaning for the words development and construction that also seem quite apropos.

Development, in mathematics, is a conversion from one form to another that does not alter the meaning, or semantics.  This sounds rather like the intent of transformation from design to implementation.  In fact, verifying the integrity of this transformation is precisely the goal of some applications of formal methods.

Construction, in mathematics, refers to geometric, or graphical representations of equations and the relationships between their constituent parts. This sounds rather familiar as well. We generally call it modeling or diagramming in the software world, and it can, and probably should, play a significant role in our work.

Our software equation is a development aided by constructions; or, in reverse-engineering, a construction may be a development of our software equation.  Both are true to the mathematical meaning, if somewhat less precise in the way they are ordinarily carried out.

So in the mathematical world, a construction can be either the source, or a product of development; whereas in the physical world, development entails construction; and at another level, construction entails development.

So you see, I’ve justified my preference, yet I can now go about my life, using software construction and software development interchangeably, with wreckless abandon. In case you wondered, I tend think of software construction as beginning at the implementation phase, and software development as being all inclusive; but in the grand scheme of things, I think that either term is justifiable, and either is applicable at multiple levels.  And should the occasional zealot insist on taking issue with my choice, I can direct them to this article, where they may adopt a policy of tolerance, once they realize that further debate could lead down the path toward software erection.

About Max H:
Max is a father, a husband, and a man of many interests. He is also a consulting software architect with over 3 decades experience in the design and implementation of complex software. View his Linked-In profile at http://www.linkedin.com/pro/swarchitect