If you’ve thought about “how we develop software” at all then you might know that some people consider computer programming to be an art, some see it as a craft, and some see it as the application of science (engineering).
So what is it?
Well, I’ll save some debate and answer that – it’s all three.
While I was researching for this article I found this wonderful post all about Developer Productivity which also illustrates beautifully what software engineering actually is. According to that article, software development is a mix between the Creative and the Procedural. There are different amounts of creative thinking, experimentation and trial and error required before we can engage our logical brain and start working this a way to achieve the final solution.
I would break apart the creative section into art and craft.
There are parts that we can just do automatically and some that we need to consider.
- The Art where we must think before we act. We analyse what we need, we come up with creative solutions.
- The Craft where we must take care and be systematic but flexible. For example using our knowledge to write well-structured code, using good design principles and methodologies.
- The Science is where we apply strict rules and formulae that are trusted and true and enable us to do things repeatedly. Testing, packaging, deployment.
However it’s not enough that we do any of these things in isolation – we must be aware that we often are working in all three ways simultaneously.
The danger of many techniques around DevOps and CI/CD is that it sometimes makes it seem like making software is just a matter of buying some tools and plugging them together while following some best practices. This is DevOps by name alone.
Acknowledging the creative side of software engineering is also acknowledging the social side of programming. At this point all the latest wonderful texts such as Team Topologies and The Value Flywheel Effect come into full force.
Need help navigating this path? That’s what I do. Feel free to reach out.