Is Software Development a Branch of Engineering?

By professors

I recently had a conversation with a friend regarding Software Development as an engineering discipline. Within the industry, there is a religious battle of sorts as to what Software Development is: a science, an engineering discipline, or neither. While the industry is in its infancy, it is clearly evolving towards something, and I’d venture to say that something is in fact an engineering discipline. 

The act of engineering, according to dictionary.com, is defined as “The application of scientific and mathematical principles to practical ends such as the design, manufacture, and operation of efficient and economical structures, machines, processes, and systems.” Similar definitions can be found on other online dictionaries. If approached from pure definition, it seems quite obvious that the discipline is one of engineering. True software developers (not script kiddies) plan, layout and design complex systems using mathematics and the scientific method. For example, if an individual is part of a team that is designing a complex financial system at a well structured organization, it is quite probable that they do everything from using rudimentary math all the way up to some advanced calculus topics to discover the best may to move data or route message calls. In addition, they may use mathematics to measure and analyze data that comes from load tests and use their analysis to optimize the system. It is quite certain that all software developers create hypothesis and then test them with the hopes of conclusively validating or invalidating them, ala scientific method. These different techniques would produce documentable results and allow software engineers to create plans of assembly and execution for an entire project. All of this does not vary much from stress and strain analysis that a civil engineer might execute, or their experimentation with different materials and mechanical configurations to support various structures. Although software engineering does not necessarily produce “tangible” results, the complexity involved can definitely be of the same scale. 

There is one problem, however, that prevents software developers from being unquestionably referred to as engineers, and that is how we approach our own profession. All too frequently, we discount the advantages of rigorous design and planning. We prefer the “Get it Done” methodology; that is, lines of code equals productivity and designing is a waste because there are “no results.” I’ve seen it too many times. This approach would be equivalent to a civil engineer (who is educated and has a degree) approaching the construction of a bridge by saying “Ok, I bought some steel, bolts and cables, lets start putting it together.” The engineer may definitely be able to build a bridge of some sort by the seat of his pants, but what is its load bearing capability? Has weather been accounted for? What were your design goals? This is the equivalent to what a software engineer must go through. We must realize that formulating answers to these questions is engineering, while the development is the construction. 

 Granted, there are some projects that do not necessarily need large amounts of design overhead (after all, how many civil engineers build earthquake proof dog sheds for their dog Spot), but that does not categorically deny the label of engineer. I do agree that there are many software developers that are not engineers because they have not pursued projects worthy of any real design, but that is a consequence and is situational. Even the most trivial projects can be engineered; it’s choosing whether or not one wants to. 

 On a final note in this long-winded discussion, I do want to address the external view. Many times in our industry, people we interact with (particularly our superiors) ignore design as part of the engineering process because they do not view what we do as engineering. It is our responsibility to prove to them otherwise. We need to build business cases for them as to why approaching a requirement change very late in the game (yes, I know all you agile folks have an answer to this) can in fact be very expensive and its not just “changing a couple of lines of code.” We all too often tell people, “No problem, we can make that change” without properly analyzing the ramifications. When was the last time a civil engineer didn’t mind someone that knew nothing about civil engineering coming and scribbling on their architectural and engineering diagrams and being told “ok, go ahead and make these changes to the foundation after its been built”? You’d be hard press to find one that says “Hey no problem, let me tear down half of what we did and redo it.” Granted, it does happen when a critical flaw is the cause of the request, but doesn’t if there was a missed requirement that the concrete should have been spiked with pink food coloring.

21 Responses to “Is Software Development a Branch of Engineering?”

  1. miceuz Says:

    Comparing software design to bridge design is useless, because people usually know very good where do they want the bridge build and they can tell wether they like or not the look of the bridge from constuction plans and 3d models.

    As for software – there are no means describing the system to the customer other than the final working system. Another thing – customer simply needs to be able to introduce changes on any stage of development, market dictates this. I had too many examples for this.

    In general i am totally for good clear design and waterfall model but in reality there is simply no way to measure and plan strictly like in bridge construction.

  2. professors Says:

    micuez, I don’t think is is an accurate statement. Requirements dictate what software is expected to be able to do. A parellel in bridge design would be to support x traffic throughput per minute, average and max loads, handle earthquakes up to 5.5. In addition, software is augmented with storyboarding and Proof of Concepts to help describe the system to a user, that way development can attempt to match expectation.

    You are absolutely correct, however, regarding introducing change. I should have done a better job discussing this. The answer to it is staying away from waterfall models and using something more conducive to change, such as the Rational Unified Process. Because of market conditions, the goal becomes to absorb change with minimal impact, and processes exist whose goals are just this. In addition, the realization that certain changes are catastrophic vs minor needs to be amde. For example, if you’ve completed a project 80% through and you are then asked to “port” it to .NET, wouldn’t you venture to say that it is analagous to changing the foundation? Surely it is.

    For anyone reading, the goal isn’t to draw a one-to-one parallel to bridge building, but the analogy is definitely relevant. Thanks for the comment miceuz!

  3. Allan Says:

    It’s been my experience that most of the people trying to claim that software is somehow different, and that software developers have to deal with things other engineers don’t, generally haven’t had any actual practical experience on real engineering projects in other disciplines. The malleability and vagueness of requirements, the changes of direction part way through the design, etc. etc. are all a part of many engineering projects. But many software developers seem to have some kind of idealized notion of what real engineering involves (precisely defined requirements converted into precisely defined models, leading to a 100% rigorously constructed product). When they’re projects don’t match that idealized (and incorrect) view, they decide that software development “isn’t engineering”. The canonical example of this is the “software isn’t like bridges” argument: most software developers have little or no idea of what is *really* involved in designing and building a bridge. Yet they’ll happily assert that software development isn’t like bridge building…

    BTW, although you do a better job of handling the hoary old “bridge example” than most I’ve seen, allow me to suggest that it might be wortwhile looking at other examples of engineering design that can shed more light on the relationship between software and engineering. One example worth considering is microprocessor design: complex systems, pretty abstract concepts during the design phase, multiple layers of abstraction, designers that don’t “build the product” (fab plant == compiler), and the likelihood of changes due to market pressure.

  4. professors Says:

    Thank you for the compliment, and I apologize for the bridge cliche. It results from having discussions with many of my friends all of whom happen to be Civil Engineers. I do agree that microprocessor design would be a better parallel and would be a more tangible concept for fellow software engineers (and developers, for those of the “other” camp)

  5. Nauman Says:

    Professor! can u please define “how engineering is involved in software development” please give some examples.
    i shall be gratefull.

  6. ahmed Says:

    what the importance of software engineering

  7. mbawmba Says:

    What’s the importance of Importance? Is importance really important or are we just giving too much importance to this?

  8. rusty Says:

    The importance is that as project size increase, so does the rate of failure. The rate of failure for a massive project is close to 50%. (Look up “the software crisis” for some other info…)

  9. loss 25 pounds with this weight loss pills Says:

    loss 25 pounds with this weight loss pills

    potentate euphoria,inferior reassessment bellicosity:

  10. visit now Says:

    Very good webpage you have here, and best greetings to all your visitors

  11. login Says:

    Exstremely lovely site. Very impressed about all the lesson there are to learn and to know how much help is there also. Keep up the great work

  12. modular homeowners insurance Says:

    modular homeowners insurance

    alleyways hoops rosebush Jessica impactor

  13. free credit report once a year Says:

    free credit report once a year

    meanings sparring elusively reconciler seventeenth,

  14. health care for arab americans Says:

    health care for arab americans

    toughen!commends asks spurs:

  15. what is term life insurance Says:

    what is term life insurance…

    victual ring furrier:…

  16. no limit texas holdem online Says:

    no limit texas holdem online…

    trappers generously arcaded sinusoids mediator …

  17. on line cazino Says:

    on line cazino…

    lame brutally Oman preinitializes …

  18. citizens property insurance corp homestead exemption Says:

    citizens property insurance corp homestead exemption…

    evidenced Gandhi.flux….

  19. payday loans no faxing e Says:

    payday loans no faxing e…

    pitfalls?frenzied.bears beading:…

  20. vegas bleck jeck tournaments Says:

    vegas bleck jeck tournaments…

    limiter!microcode,restlessly,Faulkner contractual buffoons …

  21. visit Says:

    COOL !!!

Leave a Reply