Software reuse is very alluring – we can leverage common assets across products, improve quality, reduce development and testing time, and accelerate productivity for our teams. Sounds right and most of us in software want to do this.
A worthy goal? Yes, of course! An easy one? hell no! You must be thinking…yeah, right…the systems, services, and components i interact with resembles…
Anyone who has spent time building software in an organization will tell you that achieving software reuse is extremely challenging. Large scale, systematic reuse is even harder in an organization. As a developer, I have always struggled with reuse – with deadlines to meet and functionality to deliver it was impossible to keep even code reuse in mind. Being a team lead made this predicament only worse – now I have to meet sponsor needs, deliver the features, and manage the development team to ensure we were on track with the project. Reuse, what reuse? forget about it!
Going through several projects and being part of very productive teams I have come to realize that software reuse is a indeed a viable idea. That isn’t to say it is easy but it is doable if we get some key things right. There are several ways to botch software reuse -that is the easy part! - but, I believe the following are essential for success:
- Learn what your business stakeholders are trying to achieve – understand their vision, their priorities, and constraints and work on a reuse strategy aligned with that vision.
- Work on several pilot projects, build steady momentum, and encourage word of mouth marketing for reuse. Never formally advertise a deparment-wide or firm-wide reuse initiative – this is a sure recipe for failure!
- Realize that the common impediments to achieving large scale software reuse have nothing to do with technology
- Put an extremely lightweight process for ensuring projects leverage your firm’s existing software assets
- Collaborate, partner, and evangelize the benefits of reuse not just to developers – it is an absolute must to sell reuse to your management, business sponsors, and technical support staff as well
- Understand the multiple levels of granularity with software assets. Software reuse isn’t only about cut-and-paste code reuse!
- Build a network – this coud be across distributed teams or within your deparment – of fellow evangelists who buy the vision, understand the chanllenges, the benefits, and most importantly will allow you to scale your success over time.
Now, none of this is straight forward. However, without these foundational building blocks it will be extremely difficult to achieve traction with software reuse. Many reuse initiatives fail to go beyond a single project, vaporizing without a trace. In the coming days, I will expand on each of these concepts.
What about your experience? How easy or difficult has it been for you to achieve reuse?