When it comes to criticizing past decisions, perhaps one of the most common mistakes is to criticize them with today’s standards and realities and blame them for our troubles today with this mindset.
This also happens in the software development world. Often, we, the software engineers are passionate people in our craft. When you are passionate about something, your elevated emotions make it easier to criticize past decisions within the atmosphere of today’s advancements and requirements.
A product that didn’t require as much scalability as it needs today, especially with the lack of powerful scalability tools we have today can easily receive some bad comments from today’s folks.
To me, running into our current scalability issues for millions of users can be a clear sign that the past decisions that drove the development of our current product might have done a fantastic job of getting us here.
Nothing lasts forever, and many times what got us here won’t get us there. Products are like our careers. The skills that got us to this spot in our careers may not take us to the next level where different skillsets are required.
Therefore, it is not recommended but our obligation as great engineers to understand the context and realities of the past decisions before uttering negative words about the product that helped us get where we are today.
I didn’t even mention if the decision-makers in the past had the same engineering power, budget, and know-how we have today, which certainly affects the decisions made in the past. What obvious to us today could certainly be new information yet to be discovered back then. Yet the decision had to be made with the scarcity of the information that we might be enjoying abundantly at the moment.
This mindset can also pose other risks in today’s decision-making. We can get stuck in our past failures without comparing what we had back then to what we have today. We might know more, we might have more budget and more engineering skillset. In short, things might have changed for the better which makes what was once impossible now possible.
And bad comments won’t give us any extra smartness credit in the minds of others. If it does, perhaps you are working with the wrong folks.
Also, the more decisions you are involved in, the more you see that there are no best decisions that make both today and the future happy or make everyone happy.
There are only better decisions that will make something or someone upset still, no matter how much you try.
In the position I am in right now, it would be impossible to make any decisions if I wanted to make the best decisions. Most of the time, big technical decisions are not just for technical reasons. They affect timelines, customers, cost, pricing, engineering morale (retention), and many others.