Inevitably distributed source code is locally modified. Bugs are found and fixed in local versions of the code. Attempts to globally apply fixes are hampered due to diverging code bases. The Human Factor Suppose that our reusable code has made it this far, and is now in the hands of a developer or group of developers working on a project. Sadly, not good.
Software development is still more craft than engineering.
Developers all have their own style, and almost universally, developers will estimate that it will take more time to learn how to reuse a piece of code than to simply write it themselves. And they may well be correct if the code in question is poorly designed, documented, or tested. The key to having reusable code adopted is to make the developer's life as easy as possible. For each piece of reusable code, have an evangelist who can explain to the developer how the code works and how to integrate it into the project that the developer is working on. Ensure that there is a standard process for reporting bugs in reusable code, and ensure that bugs are fixed promptly or work-arounds are provided.