Friday, November 13, 2009

Just say No!

Most software projects produce a mess and are a mess to manage. Projects that make it to production generally go on to a have a lifetime measured in years. While they are alive new projects are started, accumulating more mess. If the internal IT budget/group increases there is capacity to create an even bigger mess.

An obvious way to reduce the total mess, is for each project to be less messy. Unfortunately, there is little hope to do this at present due to the inherent nature of (current) organisations and the immaturity of software development in general. Another way is to do less software projects and make those smaller.

The business orientated technical managers I know seem to understand this at some level and are dealing with it by purchasing more off-the-shelf or outsourcing. This makes some of the costs of the mess more visible and attributable to (hopeful) benefits. However, it doesn't really address how poor we are at actually figuring out requirements, transforming them into usable, executable software and adapting to new requirements over time. With outsourcing, the mess is now less visible, but as a business relies on the systems and data, it will still experience similar effects from the mess over time.

From a purely technical perspective, does the world really need another bloated Java, Spring, Hibernate, Oracle, JUnit abomination application? Feel free to substitute other languages and libraries, such as Ruby and Rails, Groovy, etc.

Reduce the software mess. Do less software projects. Just say no!

2 comments:

Daniel Alexiuc said...

As a developer whose income largely depends on technical managers wanting these Java/Spring/Hibernate/Oracle/JUnit abominations, I still have to say I 100% agree with you.

Raf said...

The spring stack keeps me in a job longer :). But I cringe everyday I use it.

At Workcover we are using ROR for our maintenance applications. It just a basic wrapper over the database to allow CRUD. We have been instructed to keep it simple and just try to use active scaffold(AS) out of the box.