As a software developer I like to come up with algorithms and structures that enable me to write software that pushes things to its limits. During my studies at the University of Antwerp, I learned a lot about the complexity about algorithms, and I am really thrilled to come up with more advanced techniques each day.
With the increased capacity of hardware, the skill of writing software as optimal as possible, both time and memory wise, is being less appreciated. In that aspect I may have been born too late, as nowadays a lot of software is written without any consideration of the size and consumption of it, as the hardware can handle it anyway.
But when I think of it, better hardware should not allow us to write less optimal software, it should allow us to write software that does more.
I feel it every day that we don’t think about the software before writing it, which often results in software that is not scalable to the level required for production. Customers hit the limitations of the software and complain about it, after which we optimize it as much as we can.
But software that is written without any attention regarding performance can not be optimized as much. Algorithms can not be changed due to all kinds of dependencies, but only optimized by increasing in-memory operations, less I/O and removing double checks. How much you push, at some point the algorithm just hits its limit, as nothing can fix a bad algorithm. A new algorithm should be invented, but since this is too time-consuming we just don’t do it.
This is not only the case when we write software ourselves, but also trying out new technologies. We are afraid of pushing ourselves with this new technology, while I would prefer to just go for it, see how much we can get out of it.
The reason for this conservative attitude is a natural fear of change and being stuck in the same situation for too long. When we place ourselves in a comfortable, known situation for too long we don’t want to leave it, who knows what these new things will bring?
An argument I hear a lot from my team lead is that we don’t have time to change things, we need to develop features otherwise we will fall behind and won’t be able to deliver the product when the customer needs it. “We will have the perfect product, but it will be late by 3 years.” Or another one of my favorites “Nobody of our competitors does it”.
The mistake made in the first is clear, yet impossible to explain to some people. Change does indeed cost time and involves a learning curve, but only by changing will we ever be able to gain an advantage, only then will we be able to get more result with the same people. Yes there is a risk that the change will not have the expected result, but that should not be a reason to try, every failures teaches us something new.
“I have not failed. I’ve just found 10,000 ways that won’t work.” — Thomas A. Edison
The only way to grow, is by going forward. We will fall many times, and each time we should stand up again, learn why and how it went wrong and use the learned lessons to our advantage.
The second mistake is a clear sign of not being an innovative person or company. Not leading the way, but following the leader trying to match what he does. For some people it will be a comforting position as there are no difficult decisions to be made, but to me it is just an uninspiring attitude.
I can not understand why people are not willing to try something new, perhaps it is because they have rusted in their current position. I am determined to not let it happen to me, and I keep on fighting to introduce change wherever I can.