When short-term performance is prioritized over long-term productivity, code quality tends to degrade and technical debt emerges. A hotfix is easy now, but hard later.
Without tests, those hot fixes become legacy code that cannot be changed safely. In a mission-critical distributed system, legacy data structures cannot be removed because it would break the whole system.
Likewise, an organization is also in debt of its past shortcomings. Instead of code and interfaces, we have processes and expectations. By hiring career engineering managers, industry norms are imported. Firing a low performer may be a quick solution to a bigger underlying problem, deferred for the next manager.
Humans are the distributed parts of a cultural network of Devs, Designers, PMs and EMs. Interfaces between an employee and her report cannot be changed without also affecting the whole organization.
Organizational change is hard for the same reasons that refactoring is hard. It’s the fruitless labor of defining interfaces and writing tests that nobody notices when it’s done right. It doesn’t help that dysfunctional expectations can overwhelm its well-intended members like subjects in the Stanford Prison Experiment.
This year, Meta laid off all their engineering managers that don’t code. It’s the same move that Google pulled 20 years ago, spawning Maps, Chrome and Gmail. Will they regress to the OKR-tree structure? Or will they shape a new interface for human enrollment?