Good software design

Some time ago I read the book “The Art of Agile Development” by James Shore & Shane Warden and I found a statement that really caught my attention:

A good software design minimizes the time required to create, modify, and maintain the software while achieving acceptable runtime performance.

It seems pretty obvious but despite of that it shocked me. This definition leads to some interesting implications:

  • Design quality is people-sensitive: a design that assumes some language specific knowledge maybe incomprehensible for a programmer not familiar with that language. So, a good design should take this into account.
  • Design quality is change-specific: software is designed to be easily changed in some specific ways and naturally it will be harder to change it in a different way. One size does not fit all. So a good design should anticipates what changes will be required.
  • Modification and maintenance time is are more important than creation time: in most cases the life of a software is much more longer than the time you spend in the creating the software. Because of this you write code once, but it will be read/modified many times. So, a good design priories minimizing maintenance time  over minimizing creation time.

Based on the previous three points we could say that the design quality is unpredictable, because you don’t know who is going to maintain the software, you don’t know what changes will be required and you don’t know how much maintenance time will be required. Of course you can have some ideas about these three concerns and the more idea you have, the better your design could be.

I really like this vision. The debate is open.


Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de

Estás comentando usando tu cuenta de Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .