Many systematic software reuse initiatives in organizations fail to take off or have a slow death. There are many factors for this but one key reason is the pursuit of generic technical assets. That is what I refer to as horizontal reuse. Why? Because the focus and intent is to find software assets that are reusable across most or all your applications. This is not only limits the potential for systematic reuse but also makes your reuse initiative extremely risky. Finding assets that are universally reusable is not only difficult but also will make your design overly complex. Overly generic components might also end up creating assets that are:
- hard to test and debug
- difficult to comprehend and maintain
- complex to integrate and configure
Worse, the horiztonal focus will take your efforts away from domain relevant reusable assets!
In contrast, with systematic reuse the focus is on building a set of vertical software assets for a targeted business domain. These software assets are not meant to be generic for all projects or all domains. Orthogonal to horizontal assets, vertical software assets are deliberately constructed as part of a product line. Take Microsoft Office as an example. It is made up of several vertical reusable assets part of the Office product line. Opening a document, saving multiple documents, document preview, clipboard functions (cut, copy, paste), inserting files and other attachments are all examples of reusable assets that are common across the Office product line. Or take Gmail, Orkut, GTalk as a product line. Logging in with google credentials, exchanging messages, persisting chat, broadcasting messages are all examples of functionality that is common across products. This is the power and reach of systematic reuse.
In the long haul, vertical domain relevant assets will help you create new products faster, offer product variations/flavors, and fetch a higher return on your software investments over super-generic horizontal assets.