Long, long ago in a company not far from here I worked for a company that was full of smart, capable people. We did good things without any defined process. Knowing what I’ve learnt since and especially reading about the experience of others it was amazing. Either we were incredibly lucky, super smart or there was something else stopping us from creating nothing but train-wreck software. I’m voting for something else since the luck thing doesn’t sound right and I don’t think I’m super smart.
So what do I think this something else was? I think it was related to putting a capable person, who cared about almost nothing except for getting a good project out the door at the centre of the project. Because I was at the company for a while (more than 10 years) and was interested in nerdherding I paid attention to the leadership/management of the teams and was able to correlate project success with the different team and project philosophies used on each project.
The most interesting failure in the company was a project that was months late and didn’t seem to be capable of delivering. In fact, the project team didn’t even have a list of the features that it needed to implement or the bugs that needed to be fixed prior to delivery. What was interesting was that once we realised that the project was going nowhere we only changed one thing. We added a person to the project who was responsible for working in the middle of the team to make sure that the project was delivered. Nothing else was changed - the technology, tools, daily processes and staff all remained static. The person in the middle maintained a list of tasks that needed to be done, talked to everyone (individually) to find out what they were working on, doled out work to those who needed some, guided features towards simplicity and sought help for people who were struggling. Think of the role as a task-nazi/coach or an unholy amalgam of a customer representative and a lead developer or perhaps a project manager who worked at a half-day granularity and understood the business. After this change the project quickly build up a head of steam and finished only a few weeks late.
Other interesting failures at the company had to do with strict functional splits on projects. You know the thing - business analysts too separated from software developers who are too separated from test resources, etc. Even if each of the individual functions was communicating well with each other function, unless there was a person who co-ordinated and guided all of the interactions then things went wrong. The worst example of this was on the company’s biggest ever project. The project limped along and was delivered, but in the end wasn’t what was needed by the customer and was eventually canned (resulting in lots of job losses and investor money evaporating). If only a person was put at the centre!
I’ve seen similar failures and successes at other companies often strongly correlated with the presence of a person in the middle.
Now I know that there have been plenty more advances in process and I’d rather use a more complete agile process any day but if you don’t really have a process or you use a waterfall variation then for the love of all things good, please put a single, capable person in the middle of each of your projects.