July 30, 2007

...Learn TDD with Codemanship

Original Sin - Hiring The Wrong People

9 times out of 10, tracing back to the root cause of problems reveals a bad hiring decision.

Quality management doctrines teach us about the "5 Why's". "Why?" is a powerful tool. I've already blogged about the statistical advantages that can be gained by digging beneath design decisions to get to the underlying business need.

The same goes for bugs and other defects. Seldom is a bug caused by something as vapid as "coder error". Unhandled null pointer exceptions are usually a symptom of a deeper malaise, like a lack of adequate unit testing, which in turn could be a symptom of a lack of unit testing skills on the team, which could be a symptom of the lack of management support for defect prevention practices, which is usually born out of management ignorance of the false economy of skimping on quality. And so on.

If we start by educating management, then they will give unit testing more support, and maybe developers will get the training and mentoring they need to be effective at unit testing, which will catch more unhandled null pointer exceptions before they leak into a production release and cost a whole heap more money to fix than they would have to avoid.

But hey, guess what? If you follow this logic to its ultimate conclusion, and ask yourself "why are the managers ignorant about the benefits of defect prevention?", you hit the epiphany:

Because we hired the wrong managers!

Anyone qualified to manage a software project should understand the relationship between quality, productivity and cost. It's Engineering Management 101 - the earlier you catch problems, the less they cost to fix. Making time for quality throughout the development process, but especially in the earlier stages of each cycle (or mini-cycle, if you're doing Agile development), pays dividends even on medium-term projects.

So any manager who thinks that cutting corners will save them time is an incompetent manager, and - in keeping with our "prevention is better than cure" motif - the best way to deal with incompetent managers is to avoid hiring them in the first place. Cleaning up their sh*t is several orders of magnitude more costly.

Same goes for developers, architects, testers, analysts, UI designers - you name it. Pick any problem that comes up, and trace it back to it's ultimate cause, and 9 times out of 10 the answer will be "we hired the wrong person".

The problem with herding cats is that you can't

Trying to get good results with bad people is incredibly difficult. Impossible, almost. While tool vendors and heavyweight methodologists try to convince managers - usually of the gullible, incompetent kind - that their tool/process/magic bean will make it somehow possible to achieve respectable quality and economy without the need to hire people who know what they're doing, the reality is that crap people almost always do crap work, and no amount of process management or intellisense is going to change that.

The hiring decisions you make on your project are the most critical decisions you can make. Just as it's a terrible false economy to skimp on quality, it's also a very bad idea to compromise on the quality of people in your team. For every dollar you save on wages, you'll waste 10 sorting out their mistakes - or 100 living with the consequences of them.

Save yourself a lot of heartache and expense, and hire the best people you can possibly afford.
Posted 13 years, 11 months ago on July 30, 2007