November 5, 2009
If you want to kill the potential for systematic reuse, all you have to do is think only about your silo and not about anything else. This silo could be many different things and in each case it inhibits reuse as well as the effectiveness of your team as a whole. Here are some specific examples:
- At the enterprise level, silo thinking can introduce very many inefficiencies and redundancies. Silo thinking will optimize solutions for a specific project at the expense of the overall firm. For example, say you have a reusable asset for calculating taxes and a new project re-implements the tax calculation business logic all over again. Or they ignore existing software infrastructure and introduce a new vendor product. This may help a specific project but adds cost and complexity to the enterprise.

- 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?
- Silo thinking specific to a team typically results in lack of reuse across projects that impact multiple teams. Do other teams in your department/division/organization know what reusable capabilities exist? do they know the overall reuse roadmap and how that aligns with business objectives? can they contribute towards growing the asset base?
- Silo thinking specific to a person typically results in solutions that don’t benefit other developers in the team. Maybe you have a neat utility that makes it easier to fetch correlated data across multiple data sources. Or you wrote a neat script that validates system variables or smoke tests key functionality. If they save you time and effort, why not share them with your team? Two immediate benefits will happen: other developers will start saving time as well increasing the team’s overall productivity. You will start getting constructive ideas on making these solutions better.
Have you noticed these? how do you encourage solutions that go beyond a specific silo’s needs?
Like this post? Subscribe to RSS feed or get blog updates via email.

Leave a Comment » |
Collaboration, Design, General, Reuse | Tagged: Collaboration, sharing, silo, software reuse |
Permalink
Posted by vijaynarayanan
September 25, 2009
When you start building reusable assets there is considerable awkwardness with trying to align your reuse strategy with iteration goals. The real challenge is when you are not sure about refactoring existing assets. You will discover hidden couplings to implementation technology or platform, undocumented assumptions about how something will work, and all kinds of duplications sprinkled across your codebase. Soon, you will find yourself asking the questions such as – What can we reuse? Didn’t we just solve the same problem? Is this reusable as-is or needs to be refactored? It will get easier to align your assets to a product line with time and practice. Product lines tend to grow and your understanding of the business domain expands. Your ability to spot common needs and variations in these common needs also improves over time. You will deliver on your immediate goals and still be building towards the systematic reuse strategy.
You are doing right if
- You whiteboard a design as a team and in a few hours identify new and existing reusable assets
- You design identifies gaps in an existing asset that needs refactoring so the asset can be reused
- Add items to your refactoring list as and when you identify a gap in an existing asset.
- The team collaborates on aligning your systematic reuse strategy with your iteration goals.
- You are able to recognize variations in your domain and apply that to your reusable asset design
- You are decoupling connectivity components from business logic components
- A family of message types are defined and used for integration with external systems
- Design patterns are being leveraged to support essential variations in your domain
Warning signs
- You are spending week after week in design and architecture. There are no signs of working code.
- New design patterns and technologies are being introduced without reason (showcasing architectural complexity or technical brilliance don’t count!)
- You don’t organize existing assets in any consistent manner forcing your team to recall capabilities every time they want to evaluate existing code for reuse.
- Nothing in the business domain tends to vary and you have a tough time finding common patterns across user stories
- The codebase is sprinkled with several design patterns that increase complexity without any domain alignment
- You create only CRUD type interfaces assuming that will address all product line variations
- Every asset in your codebase raises an ad-hoc set of error codes
- You are modeling all the complexity in your domain and trying to cram choices instead of meeting iteration goals
Like this post? Subscribe to RSS feed or get blog updates via email.
:
:
:
:
:
9 Comments |
General, Reuse, agile | Tagged: agile, Collaboration, continuous alignment, refactoring, software reuse, teamwork |
Permalink
Posted by vijaynarayanan
August 4, 2009
Tip #16 – Work with multiple stakeholders not just development
Systematic software reuse is a complex and challenging journey. Many of us in technology think of reuse from a developer standpoint. This is only part of the story. The success of reuse efforts often hinge on more than developers and development practices. You need to recognize the other stakeholders in this journey – they include system analysts, production support staff, information modelers, technical leads, and most importantly executives and development managers. Unless you have management support it will be tough influencing many projects in your organization. In the same vein, unless your reusable assets are supported in a production environment you cannot garner the required credibility of consumers and partners within your organization. Before you rush to buy the latest greatest silver technology silver bullet that will take you to the promised land of systematic reuse recognize that there isn’t one. It is a collaborative, incremental, and iterative effort requiring technical excellence, diplomacy and negotiation skills, and continuous communication. All these ideas apply whether your reusable asset is a library, framework, or service capabilities in a SOA context.
Like this post? Subscribe to RSS feed or get blog updates via email.
:
:
:
:
:
Leave a Comment » |
Collaboration, General, Planning, Reuse | Tagged: Collaboration, software reuse, teamwork, tips |
Permalink
Posted by vijaynarayanan