Introduction
It's common knowledge among programmers that most of the ills of the software
industry, and most particularly the companies where we work, could be solved
by simply letting the technical people make the technical decisions. In fact,
that sounds so obvious that you might be tempted to shake your head and wonder
what planet I come from. Obviously, since this is so incredibly logical and
sensible, it's a given that most companies leave management decisions to managers,
and technical decisions to techies, right?
Hey, you. Yeah, you. The one in the back staring at your compiler errors. You're
laughing in all the wrong places. At least let me finish, and then we can all
laugh together about how silly an assumption this is. Now, as I was about to
say, anyone who's ever been paid for writing code already knows that regardless
of how sensible it might be to let the people with the expertise make the decisions,
that's just not the way it happens in the real world. In fact, in the overall
scheme of things, when it comes to decision making power, programmers are at
the bottom of the food chain, whether the issue is technical or not.
In short, no matter how silly it may be, most critical technical decisions
in the software development business are made by middle or upper management,
a class of creature who only rarely possesses any in depth technical expertise.
This, in and of itself, wouldn't be so bad. It is, after all, management's area
of expertise to keep the company on track and make the sweeping decisions requiring
someone with a wide angle view of the business. The problem with this scenario
is that an extremely high percentage of the time, these decisions are made without
consulting the technical staff about the feasibility and consequences of the
decision. Worse still, management often makes decisions for their own reasons
over the loud protests of their technical staff, ignoring the recommendations
made by those who have the greatest skills in that arena. It's a wonder that
any software ever ships at all.