Reusable asset design – pursue iteration, not perfection

You want to make sure that you don’t spend an enormous time trying to build the perfect reusable asset. Be it a component, library, or service. Regardless of what you are trying to do accept that you won’t be perfect from the get-go. Instead design for reuse iteratively. In earlier posts I blogged about delaying commitment and gave an example of an iterative way to build a reusable asset.

Iterative design is needed to not only deliver incremental functionality over time but it is also a handy technique to address a key risk with systematic reuse – schedule risk. In a typical enterprise project there are a lot of moving parts – there are multiple stakeholders to satisfy, several teams including infrastructure, operations, production support staff to co-ordinate with, and ensure legacy systems and processes will not be negatively impacted. Given that most projects are delayed you don’t want a reusable asset to make matters worse. Designing for reuse is often mistaken for making software that is too generic or abstract. It becomes easy to slip into philosophical arguments about levels of abstractions and layers of indirection.  It is tempting to lose sight of the business problem and pursue perfection for the sake of technical elegance.

Here are some warning signs that you need to watch out for:

  • Your developers are debating endlessly about a possible future use case that a component or service needs to support at the expense of what is currently known and required
  • More meetings are being setup to design the ‘right’ interface to make sure you are guarded against future changes to a service or componentconflict
  • You seem to be bogged down trying to figure out whether or not to support variation for a particular product feature.
  • Your developers are working on designing a business component that has no traceability with what your business user wants
  • There are endless discussions about whether or not a piece of functionality needs to be made reusable

When you smell this sort of behavior, you want to pause, look back, and refocus on the deliverable at hand. Pursue iteration, not perfection.

Like this post? Subscribe to RSS feed or get blog updates via email.

add to del.icio.us: Digg it : post to facebook: Stumble It! : :

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: