There’s no denying the importance of software in today’s world. It seems to be everywhere: in your computer and in your phone but also in your car and in your fridge.
With all this software around, you’d be forgiven for thinking that developing software is easy and, in a way, it is: the entry barrier is so low that even children can learn how to code and software based start-ups are all over the place.
However, in this article, I’d like to make the point that, despite its apparent simplicity, developing software is hard.
In particular, developing robust, industrial-grade software is hard.
Why would I need to assert that software development is hard?
Perhaps, surprisingly, the cost of maintaining an application shadows that of initial development.
In a way, applications are like puppies: even when you get them for free, they’re never actually free.
Interestingly, most of that cost comes from engineering hours, which are hard to predict and factor into cost, which is why software projects are usually plagued by massive cost overruns (ironically, this is well documented in literature but generally ignored when making decisions). The reason why engineering work in software development is hard to predict it’s because it’s hard to do!
Why is software development hard?
As a simple analogy, developing software is like writing laws: you need to provide clear, unambiguous descriptions of the manner in which the parts of your system need to interact. Fail to do that and your application will happily run off its rails (because it doesn’t stop to ask if that’s what you mean). Errors usually stick out like a sore thumb.
On top of that, errors are easy to make. This happens because there is a huge number of aspects one needs to be aware of and make decisions on, even for the most seemingly trivial of tasks. As an example, showing a date and time to a user may raise the following questions:
- do you show it in the user’s time zone (appropriate for showing your cab’s ETA) or some other time zone (appropriate for showing flight arrival time)?
- what date format is appropriate? Europeans will mostly use 18/02/2019, while Americans use 02/18/2019;
- what’s the time one hour from now? If the hour changes due to daylight savings, it could either be a two hour difference or no difference at all.
If software development is so hard, what’s the solution?
Excellent, experienced software engineers.
Just like quality food is made from quality ingredients, excellent software is made by excellent engineers. What defines an excellent engineer, then? More than raw technical proficiency, it’s the understanding of when and how to apply that technical proficiency.
A good software engineer will build the system that you ask him/her to, but an excellent one will question why you need to build it at all and how it should work. Then, if it’s actually needed, he’ll build it (and run it) in a way that maximizes the benefits for your business while being cost-effective.
The reason I mention experience separately is that talent alone, though important, isn’t enough. In that sense, developing software is like playing a sport or an instrument: you can only really learn by doing, by “feeling” the work, by making mistakes and fixing them. Besides, the “map” of things to know in software development is huge, many parts are still to be explored, and this exploration takes time.
In conclusion, the next time you need to solve a problem, don’t underestimate its difficulty:
- consider alternative (non-software) solutions;
- consider simpler software solutions;
- seek advice from a trusted software engineer.