Coding Out Of Fear Rather Than Necessity.
The software world currently suffers from an attitude that too much cannot be bad. Every aspect of a project has so much flexibility built in as if a decision will be made at any moment to swap out the entire thing.
As if all the rationality that went into thinking the project the first time is thrown out the window once the project is released.
This same attitude was prevalent in the 80’s when purchasing computers and servers. “Nobody Gets Fired For Buying IBM”.
Translated to the software world it looks like this:
“Nobody gets fired for yet another level of abstraction”
“Nobody gets fired for yet another level of indirection”
“Nobody gets fired for yet another micro-service deployment”
“Nobody gets fired for yet another planning session”
“Nobody gets fired for yet another external service”
“Nobody gets fired for yet another documentation page”
“Nobody gets fired for yet another documentation page”
…
“Nobody gets fired for playing ball”
This leads to individuals making decisions that they know are not the best for the problem at hand but they will get good reviews from their peers.
It is not that the reviewers don’t know better because they do but what does it look like when they are the reviewer they apply a different judgement than to your own code. This behaviour will get anyone under scrutiny until they either fall in line or are pushed out of it. Most people will get burnt once and paranoia will make them do the inconceivable to even remotely avoid that one problem that they once had.
This is the reason why code is becoming so hard to understand, so hard to work with, it takes so long to build and is so unjustifiably expensive to purchase.
Conviction in the thinking process and a bit of risk taking is required to fight back this trend. Making the decisions that are right for the end product at the expense of raising a few eyebrows from one peers is always uncomfortable. Assuming this responsibility is the only way to build the products that actually make a difference. Building products that solve the customer’s problems is what actually helps to leapfrog over the ranks.
It takes guts to not play ball but it is where the biggest rewards are.