If this is a huge job for you, might I recommend investing in an automated test tool to make it easier for you to manually test every patch?
Yes, it would assist in testing, but it also increases the workload as you now have patches and a new test suite to manage and manage upgrades.
The testing of patches wasn’t the primary issue. The bigger time-sink was when a patched part of functionality was transferred to a different area within the codebase. The engineer then had to get acquainted with the changes, figure out what was changed, and apply the patch to its new version. It’s a lot of work just to maintain the status quo.
If we were to ask if we really needed to update so often, sure, we did. We hope that the OP does not, however.
The process of maintaining custom patches for a codebase from another country is likely to be difficult according to the number of patches that are needed as well as how dispersed they are across the codebase.
Take this into consideration: whenever the Rails team makes changes, you’ll need to examine your patches and ensure they’re applied correctly. If, for instance, you’re involved in a major change, you’ll need to figure out which functions were moved , and then apply the patches as needed.
My project consisted of managing a custom set of patches for a free library for some time and was labor-intensive. Every time the library provider announced the latest version, a senior engineer would spend the majority of the day looking through the codebase, patching it, testing the new version, and more. However, the issue was that they released frequent updates and we had to be able to use them immediately after they became available.
If your patches don’t have the potential to be able to move upstream, I’d be cautious about spending a large amount on maintaining them because the core library is constantly evolving. You should determine how much time it will take to upgrade your patched local version of Rails whenever they launch the latest version (especially one that is major and if you’re able to) and make future estimates of work based on the information.
We had to compromise functionality in exchange for development speed. We moved to a weaker library that ran immediately from the beginning without the need for endless patching.