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.
Corporate waste
In fact, the combination of project disasters and fickle or crisis driven management frequently insures that we don't ship software. Talking with an old friend and fellow programmer a few weeks ago, we tried to put a number to this. What we came up with was that of all the projects we'd worked on, only 10% of the code we'd written ever saw the light of day by being released as a product for use by customers, whether it was shrink wrapped products or internal IT systems. This means that 90% - yes, you heard me right, 90% - of all the projects we've worked on died a premature death and never saw implementation in the field. Sometimes it's a good old fashioned project disaster (I don't think I need to define that term with this crowd). Other times, it's simply capricious decision making, constantly changing direction to go with whatever is trendy or politically expedient. And of course, there's always crisis management, where a project never gets completed because it's put on hold so that we can be assigned to putting out a different fire, only to be pulled off that effort for yet another.
In other words, 9 times out of 10, all of the time, effort, blood, sweat and tears we put into those systems, not to mention the financial cost incurred, was for nothing. The code was simply thrown away. Yes, we try to stash away the clever bits of code we've written to be used later, but the rate that technology changes usually minimizes the benefits of this. Overall, it's just money out the window.
Having heard this story over and over again from developers the world over, it slowly became clear to me over the years that this wasn't an uncommon scenario. As my mind reeled over the staggering amount of waste that is the norm in the development industry, one question kept recurring over and over again. Why? Why would any company willingly throw that kind of money into the fireplace, shrug it off as business as usual, and then embark on yet another project that would ultimately suffer the same fate? If you think of a business as an organization which exists for the purpose of making a profit, your brain will eventually reboot. It just doesn't make any sense. Or does it?
Remember the human factor
Businesses are run by people, and people all fall prey to the frailties of human nature. When considering the matter at hand, the people in question are known as management, and they are no less human than the rest of us, no matter what speculation you might hear from programmers when hanging out by the espresso machine. That means that decisions aren't always made for the most altruistic of reasons. Every person has their own career ambitions, their own vanities and ego, and their own personal agenda.
Furthermore, they're spending someone else's money, a point not to be taken lightly. I can assure you, if the money were coming out of their personal bank accounts, you'd see an entirely different set of priorities. Instead, this money just isn't real to them. Rather, it's an abstract set of figures on a spreadsheet simply referred to as "the budget". I'm making a point of this because if you expect that mentioning the financial consequences of the decisions is all that will be necessary for the logical mind to see things your way, you're in for rapid disappointment. This isn't their money, and it's too difficult for them to translate it to the impact on their personal paycheck. It's not like they spent the family's savings on a red sports car and have to explain the decision to their significant other.
This sort of waste and history of project disasters would never happen if the techies were in charge of the decisions. However, before we get too proud of ourselves, it's worth pointing out that it would be due to a completely different motivation than making the company money. Programming is our art and our passion. We just couldn't bear the thought of pouring all that effort into our latest masterpiece and then simply tossing it in the waste bin. We're emotionally attached, and it also goes against every logical bone in our bodies. There's only one problem. We're not in charge.
We've all had the experience of arguing with our superiors until we're blue in the face, trying to explain why the technical direction they want to take is either completely pointless or disaster waiting to happen. If you didn't have the conversation out loud, you certainly had it in your head. Either way, the end result is all too often the same. We're either patronized because "we don't understand the big picture" or we're simply told, effectively, to sit down and shut up. And so, given that we work for others, in the end it's our job to do what we're told. Disaster ensues, the project dies or is swept under the rug, and then here we are in the conference room again, having exactly the same argument over yet another doomed project. I often get visions of the Flying Dutchman.
What if the programmers were in charge?
The other side of this coin is that had our recommendations been heeded, a huge amount of this waste would have been averted. Either the disaster would never have taken place, or time and money wouldn't have been wasted on a project that was obviously never going to see fruition in the first place. So the real question is this: how do we convince our superiors to trust us and follow our lead in the arena we know best?
There is no single silver bullet that will solve this problem. People are complex creatures, and you can't expect to deal with them successfully without taking a number of things into consideration. However, I want to touch on something here that is an important consideration if you truly wish to effect change in your organization: credibility. It might surprise you to learn that in the scenarios and conference room skirmishes I've just outlined, we have none.
What's that you say, how could we possibly have no credibility when we can list disaster after disaster in our own defense? Simple. Those disasters, all those failed projects you can list at the drop of a hat? They were all our fault. Yes, you heard me right. From management's perspective, the reason they failed was not because the task was illogical or impossible. It failed because the programmers simply didn't get it done. Where else could the blame possibly lie? You certainly don't expect management to take the heat, do you? How do you think they got to be managers in the first place?
Credibility
So, the next time you speak up questioning the path of the new project, don't be surprised that your recommendations and concerns are summarily dismissed. You have a history of failed projects. You have no credibility.
With that in mind, we must learn how to accumulate this rare and valuable commodity, for programmers are not as helpless as the description I've given would seem to indicate. At least, they don't have to be. First, let's look at the benefits that we bring to the party. If programmers ran the farm, the company would benefit by having better functionality, higher quality, improved integration, dependable timelines and the completed projects would actually be used and produce benefits.
By bringing benefit to the company you work for, the project will also make your management look good, thus improving their chances to get what they personally want. And even though nobody cares what your personal desires are, there are at least two people who care about your management's private agenda: them and you.
This is a critical point to comprehend. Programmers have wasted enough breath in logical arguments to provide the world with wind generated electricity for the next century. The reason it's a waste of time is that it's the wrong battle to fight. The decision makers above you are going to make their choices based on their own agenda. If you take the time and effort to understand their needs and then learn how to help them achieve them, you're halfway home. Make sure that they know you're responsible for helping them attain their desires, and you become something very powerful in the business world: a person with credibility.
A new set of priorities
So, in order to better steer the ship that we would ultimately go down with should our efforts fail, we need to accomplish two things. First, we need to build credibility with those who have the power to effect change. Secondly, we need them to know that we're looking out for their personal objectives and are successful in our desires to support them.
In the beginning, this may mean that rather than fighting the big project battles that you want to fight, you instead lower your voice and give your attention to smaller matters. You won't get political clout overnight. Trust and confidence happen gradually, so you need to factor this into your plans.
First, practice thinking from your manager's point of view. You have plenty of opportunity for interaction. If you make it a priority, it's not hard to listen a bit harder and discern what their goals are. People are typically happy to talk about their dreams and desires, both large and small. In casual conversation, take an active interest in what your manager's are. Does he want to be the CEO someday? Is he more focused on getting a good raise or bonus?
What's the criteria for which those chunks of money are handed out? Do his superiors care about immaculate reporting, reduced costs, increased sales, or is it more political than that? Would they be impressed if your boss passed along insights and tidbits of internal company goings on that would allow them to pursue their own agenda? No matter what your superior's goals are, if you listen, ask questions, and express a sincere and active interest, you'll hear them. If you're happy to help them wherever possible, whether it's kicking out a great report for them in your spare time or passing along what you hear, your influence is going to rise accordingly.
Don't make an offer of your spare time services. You'll get taken advantage of. Instead, simply drop by one day and say, "By the way, I heard you talking about how your boss really wanted more detailed reporting from you, so I kicked one out in my spare time that should really impress him. Here's a sample printout. Gotta run, got things to do, see you later...." If you perceive, anticipate, and quietly fill needs without being asked, in a casual and business as usual manner, you're going to get noticed. He may not say anything, but believe me, it'll happen.
Incremental successes
Building credibility is a similar approach. You've probably been spending all your time trying to do the job you were hired to do, right? Silly you. That needs to be dealt with, of course, but your priorities are all wrong if you truly want to change the world. Credibility is an incremental affair. You don't gain it by having one huge success. Furthermore, that's too risky. One huge success could easily turn into one huge failure. Instead of rolling the dice on all or nothing at all, we instead simply leave a trail of small successes, so frequent and consistent that there can be little doubt that betting on your opinions is a sure thing.
Even if the project you're working on now is scheduled for imminent failure, you can still get mileage out of it. The first step is shifting your thinking to a very fine granularity. Almost any task can be broken down into a sequence of small, consecutive actions. Let's say that you wanted to bench press 300 pounds, and you had a body that was capable of doing so. Here's two different descriptions of accomplishing that task.
Approach one
Join the conversation! Your thoughts help the community grow.
Sign in to leave a comment
It is the same account you read, post and publish with — and you will come straight back to this page.
Mahesh ChandPosted Aug 19, 2014, 11:07 PM
Wow an old series but a good once. At that time, I didn't even understand lot of it but now I do. Great work!