April 25, 2009
Instead of looking at systematic reuse a separate analysis, design, and implementation effort that requires lots of time and resources view it as being part of what you do. Practice a few techniques
with every project, every single day. When your development activities are aligned with a systematic reuse roadmap your activities are aligned towards delivering today’s needs and positioning you for the future. Think of this as your team’s practice routine before the game. You won’t win if you don’t practice, would you?
Here are some ideas for aligning reuse efforts as part of your everyday development:
- When you review user stories look for patterns and similarities with stories from the past. Or stories from other applications in your team or within your shop
- When doing design always look to existing legacy assets for ideas and refactoring. I wrote earlier about wrapping legacy assets – you will be surprised how much code you already have that is worth reusing when you change the assumptions and decouple it from the existing code
- Be on the look out for opportunities to help other teams with what you own. Got a great algorithm, user interface widget, data service, process flow, content fragment that is reusable? spread the word - establish partnerships with your peers, colleagues, and keep sharing. The good karma is bound to help your team and your organization as a whole by increasing consistency and reducing development time.
- Keep overlapping requirements, functionality, and feature variations in mind while you design, implement, and refactor code. If you get ideas for a reusable component add it to your list of refactorings or to-dos. Come back and finish it when there is a real need.
- Get your team to review existing code. All the code all the time. Code reviews are just about the most effective way to get the most out of reuse – your codebase will continually get leaner and better. Prepare code review check lists for targeted assets (services, features, user interface widgets, classes, etc.) and make sure you use them over and over.
Like this post? Subscribe to RSS feed or get blog updates via email.
:
:
:
: 
Leave a Comment » |
Design, General, Reuse | Tagged: software reuse, tactics |
Permalink
Posted by vijaynarayanan
April 20, 2009
Tip #8 Get requirements from production support for your reusable asset
There is one thing you should do before placing your reusable asset into production and that is talk to your production support staff. Get their input, share your design, and get their feedback early and often. This will not only make your asset supportable (imagine a reusable asset without logging or instrumentation or ability to report on key metrics) it will also get you a valuable partner. Production support will soon learn to trust your assets, your services, and will demand that multiple projects leverage the capability. It is one thing for you to sell reuse but another thing for your partners to voice support.
Like this post? Subscribe to RSS feed or get blog updates via email.
:
:
:
:
:
Leave a Comment » |
Planning, Reuse, SOA | Tagged: process, software reuse, tactics, tips |
Permalink
Posted by vijaynarayanan
April 19, 2009
In order to maximize the reuse potential of your assets offer multiple interfaces to the same functionality aimed at targeted audiences. For example, may be you need to expose a service that finds products based on some input criteria. Typically, you might create a findProduct capability that will be generic and reusable and this capability might take input parameters such as product name, identifier, and product family etc. In addition to this basic capability expose additional interface based on line of business – findProduct (name, line of business), findAllProducts (name, line of business) or one based on the relevance criteria – findProduct (name, full-text-match or starts-with-match or fuzzy match) or a combination of these.
This doesn’t mean you run out and build interfaces! More interfaces mean more maintenance so there is a careful balance between flexibility and the number variations that you can effectively manage. On the flip side, if there are multiple interfaces offered your consumers will find it easier to integrate and invoke your reusable assets. To realize this idea, map the variations into a standard set of parameters and the rest of your processing can proceed oblivious of the consumer input. Defaults and standard values can be provided for missing inputs when doing this.

how do you identify these additional interfaces? As with everything else, these interfaces need to be identified based on demand and priority. If your business sponsor needs to offer a capability for a particular geographical region (e.g. offer for the Americas first, followed by Europe, and Asia-Pacific) or for a particular product family then that is what you should consider for development.
Like this post? Subscribe to RSS feed or get blog updates via email.
:
:
:
:
:
Leave a Comment » |
Design, Reuse, SOA | Tagged: Design, software reuse, tactics |
Permalink
Posted by vijaynarayanan
April 18, 2009
Working alongside some very interesting and high performance teams I have come to believe that success with reuse is more than technical brilliance or elegant design. Great teams produce high quality work, understand each other, their strengths, their limitations, and most importantly harness conflict as a medium for healthy constructive dialogue, creativity, and innovation.
Peter Senge in his landmark book The Fifth Discipline says: “Almost all of us, in one time or another, have been part of a group of people working together in a extraordinary way. ..ever been part of a group who worked together in a extraordinary way, who were really exceptional in their effectiveness, in what they were able to achieve, and created a kind of environment that was really exciting to be part of.”
Why is teamwork relevant to systematic reuse?
Because, producing something reusable under severe deadlines and delivery pressures, integrating with legacy systems and processes, working with a myriad teams spread across several organizational departments, geographies, and still delivering high quality products is incredibly hard. It is the kind of challenge that motivates technology leaders and professionals go to work and make a difference.
The fundamental technical concepts for systematic reuse are well understood and what differentiates the winners from the rest of the pack is their ability to execute the reuse vision within their business domains with the help of productive teams on the ground. Every single component, service, asset matters.
Extraordinary teams talk to each other often, exchange ideas and collaborate more effectively, and most of all identify and mitigate risks to ensure the team as a whole is best positioned for success. If this sounds a lot like the agile manifesto it is not coincidental! Building reusable services requires creative brainstorming, conflict resolution, design synthesis, and arriving at a logical point that will be used to deliver your iteration. This isn’t an event – its iterative, continuous, and execution focused. If your team blends creativity and continuous delivery systematic reuse will be a natural byproduct.
Like this post? Subscribe to RSS feed or get blog updates via email.
:
:
:
:
:
3 Comments |
General, Reuse | Tagged: Design, software reuse, success factor, teamwork |
Permalink
Posted by vijaynarayanan