Imagine -- if you have a moment -- that you've been hired to reveal the source of some critical problems. A string of dangerous accidents has occurred at a new housing development project, leading to some serious injuries. They want you to get to the bottom of it.
To analyze this, you head out immediately to the housing site.
There are three phases to the development, one where people are already living, one that is in progress, and another that is just starting up. The accidents have all happened in the first phase, and have ranged in severity.
To get a feel for the issues, you visit the second, 'in process' phase and while there you see several disturbing problems.
Blueprints exist for the individual house designs, but you find they are strangely incomplete. Sections of them are expressed in great detail, in fact too much detail, crammed together so you can barely read the underlying details. Contrasting that, some sections of the design are missing altogether. The lines in the design just fad away, leaving large gapping holes.
You look to see that there are people everywhere working extremely hard. They have tools, which at first seem sufficient, but on further investigation you realize two big issues.
Firstly, some of the tools are in poor repair or rusted. For some, they've never been used, while others weren't taken care of.
Secondly, the workers are often using the wrong tools for the wrong job, so for instance they are hammering away at screws, or using the wheel barrow as the lunch table, while carrying everything -- heavy or not -- by hand.
But it is the workers themselves that provoke the most interest.
Because of the problems with the plans and their own issues with the tools, they feel the need to inject a lot of 'independence' into the building process. If the plan calls for a beam in a specific location, they may choose to interpret it a bit loosely. Plus or minus a few feet really isn't a problem. Wallboards? Close enough is good enough. They tend towards the more creative placement of the various beams and structures. Sometimes choosing to nail the panels, something choosing to screw them in. They exhibit a great deal of latitude in their workmanship.
All sites get messy, but the workers have developed a habit of ignoring the mess. For things like trash, they simply dump it directly into the walls as they build. Nothing is ever swept up, nor is it removed or fixed. The building sites get progressively messier as the work moves on, becoming more and more of a hazard.
Overseeing the project and insuring quality control are a number of on-site inspectors, but they tend to either stand around and talk to each other or test the worthiness of the walls -- for example -- by giving them a good solid kick. Their methods of detecting problems are erratic at best. Mostly they don't get along with the other workers and fell neglected and under-valued.
As you put the various pieces together you note that there is a plan and a design for the buildings. There are enough people working. The schedule is being followed. There is a quality control inspection process. And the houses are actually getting built.
Taking just those elements into consideration there doesn't seem to be anything wrong. But, the problems with building the houses are the key. Several existing houses have fallen down, many are in serious trouble, and even the best built one is plagued with an endless supply of little problems. Not that it comes as a surprise. If the craftsmen take liberties with the design, any 'engineering' that went into it is effectivily lost. Even if all of the work is done, if it is not done correctly it is unlikely to be effective.
In the physical world, if we visited such a dysfunctional project it would be easy to spot were the problems are occurring. Generally, this means that they are fixed pretty rapidly.
In a virtual world, however, the same problems are largely ignored. Many software development shops resemble the above description, but few people would attempt to change or fix it. Instead they blindly continue down the same road, surprised again and again that their systems have serious problems. That their houses are sometimes falling over. While pointing the finger at anything but the actual causes.
A good housing development project runs a fairly strong process to insure that the development is going (mostly) according to plan. Software development projects are missing an analogous version that takes into account their own unique culture and development issues.
Once you know what you are looking for, you see the same basic problems repeated in many software development shops. In some shops with serious problems, the methodology itself enforces the bad behavior. Fixing these problems needn't be too complicated. We just need to create a methodology that really makes sure the issues are fixed and the problems aren't avoided. A working blueprint, the correct use of tools, consistency in work by the craftsmen, cleaning up the messes and effective quality control would go a long way to insuring that the end results lived up to our expectations.
If the process used for development is flawed it doesn't matter if you have the time, people and tools; the results are far from guaranteed. Many software development projects would be horrifyingly bad if they were physically visible. Most projects have all of the right elements, they just aren't using them correctly. It doesn't need to be this way.