For example, some library (in my case it's ruby gem) became deprecated. And my app is using this library. It's ok and I have not any problems with how it works. When should I switch from deprecated open-source library to something new? Or should I at all?
What was the reason for the deprecation? You have a responsibility to balance keeping your technology fresh with the demands of stable software. Every time you make a big change, you introduce a decent amount of risk that you'll break something doing that change. So evaluate the following for your situation:
- Did I use the gem/library so pervasively in my system that I am forced to rewrite a lot of my code? If so, you better have a solid test suite to make sure nothing gets broken before you attempt an upgrade.
- Is the library deprecated because of too many security/architectural problems? If so, you are in possession of a ticking time bomb. Start planning the migration now.
- Am I currently in between releases? If so, this is the best time to consider what it would take to update the library.
- Am I almost done with a release, or in the middle of one? If so, this is the worst time to consider changing the library. Just don't.
A deprecated library is a library without any support. It also means that as other libraries improve (such as the rails framework), they will become incompatible with the deprecated library. If you are trying to stay current with those libraries, you might be forced to migrate to the new version. Otherwise, you can keep your whole library stack the same and never have to worry about the updates. You won't get new features, but you at least know how everything works together.
Deprecated in general means don't use it to write new code. It's perfectly fine to keep it in old code, but as you continue to maintain it, you'll find that legacy code becoming more and more difficult to support. It's usually pretty obvious to tell when you must upgrade it, as that code will be holding you back from making other changes you want to make, but that could be several years down the road. In other words, you don't need to worry about it right now, but you should probably plan to make the move at some point most convenient for you, such as when you're making a new major release anyway.
Deprecation today means that bugs will not be fixed tomorrow, unless you do it yourself.
If you do not mind that, then no need to worry.
factors to consider:
- Will your application need new features that are not provided by the deprecated library
- Time / Effort involved migrating will you retain the original functionality and features?
- will the new library make it easier to maintain your application code base and improve its performance and quality.
After you have written a full set of unit tests verifying your application's overall functionality.