Development and Large Structures

I have been wondering about the similarities and differences between software development and large building projects.

Building a Pyramid

Take the example of building a pyramid. We firstly gather some blocks, then mark out the shape and then place the blocks in the correct places to build the structure. Tasks need to happen in a certain order, we cannot place the blocks before we have gathered them.

If we are developing in a green-fields environment, which features we build first does not matter very much. We can use customer value and learning opportunities to determine the first features. So it is less similar to a large building project.

If we are developing in a brown-fields environment, then we often need to consider existing systems and features that our customers are already using. These factors may constrain the order that we can develop and deploy new features. So this is more similar to a large building project.

Consider the similarity between fixing a complicated system defect and brown-fields development. The order of developing and deploying fixes is extremely important to avoid causing further issues and rework.

Fixing Complicated Defects

In the above example there are four boxes representing applications and five interfaces. Root cause analysis shows defects in three applications and three interfaces.  The correct output can be restored when the six fixes are applied in the correct order.

Questions

  • Should brown-fields and green-fields developments be recognised as different?
  • Should brown-fields developments and production fixes be recognised as similar?
  • Why is development work treated as better than production support work?