Continously Align Your Software Assets To Be More Reusable

Thank you for giving me your vote on the hurdles for software reuse. From the results, it is clear that the number one reason for not being able to build reusable software is the lack of time in the development process. This isn’t surprising at all and reiterates the core message that I have been communicating in this blog. Agility and refactoring are your friends with reuse. Take a very pragmatic approach to the reuse effort and you will increase the odds of success considerably. The strategy that I have successfully used with reuse is to pursue continuous alignment.

What exactly is continuous alignment?

The idea of continuous alignment is very simple – place value on moving towards your target state with every iteration, every release, every project. You may not get there day one and that is perfectly okay. Align your software assets closer and closer to a desired state using relentless refactoring and code reviews. Do this often and over a period of time you will transform your codebase.alignment

Let me provide a simple example to illustrate this idea. Let us say you have a piece of code that sends email but is coupled with email addresses stored in a legacy database. You get a user story that wants alerts to be sent via SMS. Your initial iteration might implement this send SMS message without being aware of the existing email component.  Why? Because you may not have time to pursue this and get the other stories implemented within the iteration window. In your subsequent iteration you refactor the legacy email code by making it generic so it can take any email address and removing the tight coupling with the legacy database. You take the code for this new reusable component outside your application codebase and update the SMS code to use this new email component. Be sure to add automated tests to your regression suite.

Now, this might be done in one, two, or multiple iterations. If you cannot get it done you add it to your list of known refactorings with your backlog of tasks. When the next iteration comes around and you get a similar story you go back and work on the known refactoring.

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

7 Responses to Continously Align Your Software Assets To Be More Reusable

  1. Jing says:

    “Align your software assets closer and closer to a desired state using relentless refactoring and code reviews.” I agree with this completely. I’m a big fan of code reviews, especially when it’s a team effort. I’ve had code review sessions scheduled for each project at my company, and I learn something new each time. These sessions also put me in a mindset of writing better code, because I know they will be reviewed at the end. 🙂

    What I find even more helpful though, is design review. Components reuse can sometimes come out of these discussions. One developer may have designed and written something in a previous project that can now be reused with just a little refactoring or tweaking. Without these reviews, duplicate components would have been written without anyone knowing it. We sometimes even involve the business team in these reviews so that they are also on-board for reusing existing components.

    Good stuff!

    • My experience has been the same Jing. All kinds of interesting things come up with design reviews and code reviews. Most of the developer to developer communication that is essential to reuse is facilitated by reviews. It is interesting that you include the business team – how has that worked out in terms of design/code review effectiveness?

  2. Jing says:

    The business are never involved in code reviews. We do, however, present our design to the business once it’s finalized among the tech teams. Being in the Internet industry, our business team is probably relatively more tech-savvy than those from the financial industry, and are generally interested in the technical solutions we come up with.

  3. Thanks Jing. The business being involved in design reviews is a very good thing. That way it becomes easier for IT to demonstrate the business benefits of certain design approaches.

  4. […] meant to make every feature reusable or every iteration produce reusable assets. Just the opposite. Continuous alignment accepts that building reusable software is hard, takes time, and is iterative.  You can fight that […]

  5. […] Silo thinking specific to an application means potentially reusable assets are not created and existing reusable assets are not leveraged. Think about the application’s needs to get reference data or connect with external systems or format data per a destination’s specific needs. Is your application using reusable assets? If not, is there an opportunity to create one by building or refactoring? […]

  6. […] refactoring, iteration planning, and pair programming used to identify and refine assets in a continuous fashion. Consumers increasingly use reusable assets to build applications and start to co-create assets. […]

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: