The world of software is a science? An Engineering disciple? A world of freelancers and hackers? Or something else?
Is it a science? The Scientific Method (Condensed from Wikipedia)
The scientific method seeks to objectively explain events in a reproducible way. A hypothesis is put forward (If we do this, then we get that) and using principles such as parsimony (also known as “Occam’s Razor”) is generally expected to be fulfilled. This new fulfilment is tested to see if it delivers the hypothesis. The hypothesis is posted before the test, as proof that no tampering with expectations has occurred. Disproof of a hypothesis is evidence of progress, as is proof of it. Progress is sometimes not what we expected.
Engineering Discipline
The American Engineers’ Council for Professional Development has defined “engineering” as:
The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilising them singly or in combination; or to construct or operate the same with full cognisance of their design; or to forecast their behaviour under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property.
More-over, software engineering is the application of engineering to the development of software in a systematic method.
From this we see software can be implemented using a scientific or engineering approach. But are you using such a thing? Fundamental to engineering and scientific approaches is that they are open to examination and improvement.
Both the Scientific and the Engineering approaches make use of stating the predicted outcome of an experiment or work, and then being able to test it. In science all test results are considered learning. Engineering is more of a forecast, both approaches mean we can evaluate our results.
Software Engineering??
Let’s think about software development and these techniques. The approach of stating the desired outcome does in fact operate at several levels.
In SAFe and LeSS and so on, we are asked to consider that work, be it an Epic, Feature or just a large immature story, is hypothesis driven. We are predicting the impact of the work, or its outcome. Another approach is to use OKRs, which also makes clear the success criteria of an objective.
Behaviour Driven Development looks to explore expected outcomes of software (Impacts) as part of the specification activity. This activity creates hypothesis for the software in terms of either business impact, if we do this then we will have 10% more visitors to our website, or functional impact, doing this will decrease the number of keystrokes we impose on our users by 3. And so on.
This can then go down a level of abstraction and become Test Driven Development. This starts with a test that we need to “Go To Green” with. This design by intention technique also help to ensure that we build on know working assumptions, rather than waiting for the whole house of cards to be ready before testing our hypothesis.
Is it Engineering as we know it?
These techniques strike me as belonging to the Scientific or engineering approaches. They also both encourage fast feedback of our experiments. But Engineering also talks about processes or a systematic approach. The approaches that come to mind here are Waterfall, RUP, Scrum and Kanban to name a few. In some of these the work is guided as experiments, conforming to the scientific approach. In others not so much.
An engineering approach would be predictable. A scientific approach would encourage learning. If neither of these are achieved then the approach we are using is neither Scientific or engineering based. Time to move on!
Leave a Reply