In so many businesses, there are "business guys" who end up managing the engineering staff-- at one level or another, but too often it's the direct manager role--and these business guys are incompetent at engineering.
When you don't know whether a direct report is doing good or not because you don't understand what their doing, by definition you cannot manage them. What are you going to do? Listen to the other programmers opinion of their code? It immediately becomes political.
The real tragedy is, learning business is not hard. Any programmer can do it. Biz guys can't learn programming-- despite all the "everyone should be a programmer" initiatives-- even easier is managing development teams. When you've got 10 years experience as a senior engineer, you should be promoted, and working on becoming an engineering manager.
Engineering managers can develop code. Right now this role is called "lead engineer" but they have no people management responsibilities.
This is something we, as engineers need to change.
So long as the "people managers" are biz guys who don't understand engineering (and naturally are often hostile to it) good engineers are going to get fired, and our entire profession will continue to slip lower and lower in status.