Taking Back Software Engineering
(Slides) Would you fly in a plane designed by a creative worker or would you prefer it designed by an engineer? Engineering is the application of iterative, empirical, practical science to real-world problems. Artisanship is a wonderful thing, but somewhere along the way, the term ‘Software Engineering’ has gained a bad reputation. It implies ‘big up-front design’ and ‘mathematically provable models’ in place of working code. However, that is down to our interpretation, not a problem with ‘engineering’ as a discipline.
In recent years we have discovered what really works in software development. Not everyone practices approaches like Continuous Delivery, but it is widely seen as representing the current state-of-the-art in software development. This is because, at its root, CD is about the application of an iterative, practical, empirical, maybe even science-based, approach to solving problems in software development. Isn’t this a form of software engineering?
Software isn’t bridge-building, and it is not car or aircraft development either. But maybe it’s time for us to take back the term “Software Engineering” and to reinvent it with an agile lens. It’s time to adopt a more disciplined, scientific approach to solving problems in software, while still encouraging people-centric creation.