10 June 2008

That's what I call reuse

By Andrew Clifford

You can achieve high levels of reuse if you focus on reusing big things, like whole systems and frameworks. This is much more efficient than assembling from components.

In the past few weeks, I have come across a couple of examples of reuse in my work.

Our Metrici Advisor service supports assessments for broad IT governance and quality management. The same assessment functionality is valuable on a smaller scale, for example assessing risks for a single project, or to evaluate network security controls. We want to create a version of the service for these more focussed assessments. We work through other consultancies, and we want to provide functionality that they can embed in their websites and offer under their own brand.

When we started looking at this requirement, we though it would be a significant development, perhaps using offline forms technology. But after a bit of thought, we realised that we could reuse our existing service with a few modifications. Metrici Advisor has a very clear separation between the user interface and the back-end functionality and follows web standards carefully. Because of this, we have been able to produce an embeddable version of the service in just a few days work (see example of embedded Metrici Advisor). This runs off the same instance of the application and database. We met our requirements by reconfiguring the software to support a new user interface view.

As another example, we had the opportunity to put forward a proposal for some web application development work. It would have taken roughly a year's effort to deliver using traditional web application development in Java.

However, we had a careful look at the Drupal content management system. We realised that we could build the entire application in about one fifth of the time by using core Drupal, add-on modules and customisation capabilities, without writing new code.

These are real examples of significant reuse. What do they teach us?

The conventional view of reuse involves assembling new applications from a library of components. This is much better than building new systems from scratch. But the bigger the pieces that you reuse, the more reuse you achieve. To achieve high levels of reuse, focus on structure and standards, and on opportunities to reuse whole systems, not just components.