A featured contribution from Leadership Perspectives: a curated forum reserved for leaders nominated by our subscribers and vetted by the Construction Tech Review Advisory Board.

Director of DevOps at ADP UK
Keith Watson
Why Is Software Engineering Different?


Understanding the context of any engineering discipline is important because it enables us to determine what paradigms and principles can be applied from related technical areas. These models provide a reference point from which to build new knowledge andhelp us to solvesimilar engineering problems. Software engineering is different from other engineering disciplines in many respects; hence, we should be wary about applying traditional engineering ideas to software development.
Other types of engineeringdeal with tangible real artefacts and physical, visible processes, whereas softwareis intangible.In addition, software development is a highly cerebral process where software is created, not manufactured and relies primarily on technically skilled individuals for a longer part of the engineering process.
Most forms of traditional engineering generally started as a craft, and as time progressed, they found ways to automate their craft to produce standard artefacts reliably, quickly, and consistently. In addition, this 'baked in' the knowledge of the craftsman into these processes and tools. This, in turn, enabled cost reduction, reduced key person dependency,and alloweddiffusion of this knowledge to a wider, less skilled population.
The lack of visibility and tangible reality of software development means that software engineers are mostly working in the virtual world both in terms of the artefacts they produce (programme code and executables) and the software process and tools they use. Software engineering is a relatively new engineering discipline. Today, the software innovation process is still more akin to a craft process because it is based on the implicit experience of the software architect and developer; the actual creation of software is difficult to automate. Any new software has, by its nature, never been built before (aside from code that is refactored) and hence requires more experimentation.
These qualities have implications for the decisions we must face when designing new software and software development processes. Even if one uses readily re-usable components such as open source, they still need to be integrated together with new code. Although the emergence of DevOps and continuous delivery has helped deliver software faster, this automation is still only a small part of the software development process. AI tools such as ChatGPT may help, but it is likely that a large amount of future software will still depend on the human creative process.
When software engineering was in its infancy, it was thought that it was similar to existing forms ofphysical engineering. Like many of these engineering disciplines, for complex structures or products, software development adopted the waterfall model.This had very limited success. In 1998, dissatisfaction with the old engineering paradigm led to a new, more nuancedapproach.Instead, the Agile Manifesto was proposed to handle the experimental nature of software development and recognised the need to build tangible models earlier. This approach enabled software engineers to surface hidden assumptions and then use these models (working software)to clarify requirements with end users (customer collaboration) and then amend the approach (responding to change over following a plan). The different engineering paradigm is exemplified in one of the Agile principles: 'Working software is the primary measure of progress.’
"We are uncovering better ways of developing software by doing it and helping others do it. Through this work, we have come to value:
• Individuals and interactions over processes and tools
• Working software over comprehensive documentation
• Customer collaboration over contract negotiation
• Responding to change over following a plan.
That is, while there is value in the items on the right, we value the items on the left more.”
Agile Manifesto - http://www.agilemanifesto.org/
Understanding the context of any engineering discipline is important because it enables us to determine what paradigms and principles can be applied from related technical areas.
Agile software development recognises that because software can have potentially unbounded complexity and is customisable through the creation process, an approach where software is built incrementally is better than a structured top-down, architecture-driven waterfall method. This is recognised in the principles behind the Agile manifesto, which states that "The best architectures, requirements, and designs emerge from self-organising teams."Here, new software has an emergent architecture rather than the intended architecture possible in other forms of engineering.
In summary, the cerebral virtual nature of software development means it is still more of a computerised craft industry relying on experimental investigations and evolving architectures. The lack of bounded physical artefacts and standards has implications for the management of software projects where more traditional methods and tools must be replaced by more iterative agile approaches. The rapidly changing nature of software engineering means it must rely more on a creative, collaborative approach compared to other physical engineering disciplines.
Weekly Brief
I agree We use cookies on this website to enhance your user experience. By clicking any link on this page you are giving your consent for us to set cookies. More info


