12 July 2009

Non-Functional Properties of Software Architecture

by mo

Maintainability/Changeability of a Software System

Parnas writes:

Programs like people, get old. We can’t prevent aging, but we can understand its causes, take steps to limit its effects, temporarily reverse some of the damage it has caused, and prepare for the day when the software is no longer viable.

He then lists two reasons why software ages:

  • Lack of movement: software ages if it is not frequently updated.
  • Ignorant surgery: Changes made by people who do not understand the original design gradually destroy the architecture.

I think one of the things that I have noticed that caused decay in a software systems that I have seen was ignorant surgery. I have witnessed this and it can be incredibly frustrating. When you hire extremely talented people to develop the first release of a product then hand it off to maintenance developers who are not of the same skill set, the project is likely to deteriorate, no matter how excellent the original architecture was.

It’s frustrating when I look at a project that had solid roots and was developed extremely well, now covered in weeds and broken windows. Most of the work is done in the weeds and makes it incredibly hard to lay new foundation without pulling out all the weeds first.

Sourced from Pattern Oriented Software Architecture: On Patterns and Pattern Languages