The richest companies in the world are software companies, closely followed by hardware companies. For one thing we’re a new industry; really we’ve only been an industry for around 50 years. Even if you ignore the alien-rich like Bill Gates and Larry Ellison we’re a very well paid industry; we probably have the highest average salary in any industry. The thing that really sticks out, though, the thing that really separates us from other industries, is the fact that we hardly ever have to do anything. In fact, 75% or more of our projects are never taken into production.
Productivity in the British coal industry dropped to below 40%, and the British government shut down the entire industry. Our productivity is below 25% and falling, and people still invest so much money in us that we’re the richest industry in the world.
It’s great, though. I mean, people pay you $100,000 a year to develop J2EE applications, and all you do is surf the net, and nobody will ever know because when it comes time to show your work, you’ve already been assigned to another project, which you know is going to fail too. Why do you think that the internet got so big when it's only techies that knew how to use it, and only businesses that could afford to pay for it? Two years ago there were around 35 million websites, and only 10% of the users were at home. We surf the web, take your money and only do real, meaningful work for one week a month. Nirvana.
Observe your developers. When you ask them if their current task is complete, and they say, “Yes”, why are they still at their keyboards? Why haven’t they requested another task, or even reported completion of the current one?
Are they lazy? No! Are they lying? Not exactly. Are they telling the truth? Not exactly.
Developers have a different definition of "finished" to the rest of the world. To a developer their primary task is to cut code. The peripheral tasks, of testing, integration, documentation, even configuration management, aren’t part of their job. When you ask if something is finished, they answer based on the code, nothing else. I know this because I’m guilty of it myself, and because I am observant.
The most telling comment is, “I’m finished at last. Now just let me check it and you guys can try it out and let me know if it works.”
Natural human psychology is to want to please everyone. If a developer has agreed to a deadline, they want to make that deadline. If they’re professional they’ll tell you long beforehand if there is a major problem, but if they’re close enough they’ll say things like "nearly", or just another hour or so. However, the 80:20 rule comes in to play at this point. They may only have a few percent of the program left to write, but it may take the majority of the time. You’ll come into work the next day to the smell of dirty bodies, half empty coffee cups and pizza.
Now, my question is, do you account for this time? The most likely answer is that you don’t. In the case of the heroic all-nighter you may, but if it's just a few hours? On a team of, say, 10 developers, working together on a six-month project, you can accrue hundreds of hours in this way.
Now, let's add human factors. Did this project piss people off so much that they left the company? We’ve all had bad projects. They’re late, and over budget, so you ask people to work a little overtime. It gets close to the deadline, the second deadline and the third. The little overtime has turned into a lot. People are working weekends, evenings, through their lunch breaks.
When this type of project is over we have to deal with the collateral damage. The fallout. The attrition. People leave.
Try adding the cost of replacing them to your project budget. It can cost over $10,000 in fees to hire one skilled and experienced J2EE developer.
Next week I’ll offer some solutions to these problems.