Every time I make a project I develop several generic routines/modules/libraries that I expect I'll be using with other projects.
Due to the speed of development I don't spend a lot of time making these modules perfect - just good enough for this project, and well enough documented and isolatable that I can easily add them to another project.
So far so good.
Now when I use them in another project inevitably I improve them - either adding new features/functions, fixing bugs, making them more general, etc.
At that point I have several problems:
- I need to maintain the changes in the module for the code I'm working on
- I need to maintain those same changes in a central "module" repository
- I need to make sure that the updated modules are available for, but not automatically used in older projects, or sometimes even existing projects I'm already working on.
How do you manage this? How are these problems different when you have teams working on various modules in different projects?