Many things about software development are unique, and attempts to apply techniques or thinking from other endeavors lead down the wrong path. But there are quite a few things that are pretty universal, and I want to comment on a really big one.
Whenever I see a situation that is turning out to be a mess, I always ask “Who’s in charge? Anyone?” In a sizable majority of cases, the answer is “Nobody in particular.” Most often this is because there is an issue, or a root cause of an issue, than spans organizational boundaries. In that case, there are many people and organizations who are all involved – and perhaps all doing a good job – but nobody is reponsible for an overall positive outcome. Each involved person would tell you that they did their part and accomplished their defined mission, so what else did you expect?
A specific example of this regards customer satisfaction. Sales sold the product to the customer, development built the product and provided fixes as necessary, support organization handled calls from the customer – and they all did their respective jobs in a reasonable manner – yet the customer is very unhappy. How could that be? Very likely because the customer had to deal with each of those organizations individually, and probably many individuals within each. From the customer’s view, nobody was in overall charge.
Whenever I want to make absolutely sure that something turns out right, I always make sure that a specific individual is in charge of and responsible for the outcome. Provided that person is competent, a positive outcome is very likely.
I remember very well a situation many years ago when I was running the development organization at a small software company. We had recently landed our biggest ever customer and we needed to get them live on our product. The head of our company (my boss) assembled his staff of department heads, told us how important this mission was, then sent us on our way, each to do our respective parts. Pretty soon it became apparent that things were not working out well. My boss then called us back together to chew us out for poor execution. Each department and department head had done their defined jobs, but none of us were personally responsible for the outcome. This was a clear leadership failure on the part of my boss, and it was a lesson that has always stuck with me. If he had appointed one person to ensure a positive outcome (which implies that he also had publicly empowered that person to carry out that mission), it would all have been different. Of course, any of us department heads could (and perhaps should) have taken it upon ourselves to do this without any further direction, but among a group of busy peers that is not very likely to happen for many reason. How easy it would have been for my boss to have just appointed someone.
So now I always ask (privately or publicly, as appropriate): Who’s in charge?