Should I rewrite my app?
Before you shout "NO!!" hear me out. I think this may be one of the those cases where a rewrite is reasonable.
Our current application:
- is 6 years old
- is currently on Rails 3.2.14 and Ruby 2.0.0
- basic architecture and data hierarchy is fairly simple
- 15 models/controllers
- 12 service objects
- 50% test suite coverage
- 17,000 users
- 500,000 database records
- 12 database tables
Upgrading all the way from 3.2.14 to 6.0.0 looks like an enormous undertaking. Integration tests requiring JS broke a long time ago and I haven't had time to get them working again. This would need to be addressed before doing any kind of upgrade.
I'm the sole developer/designer on this app. We don't have the budget to hire out for upgrades.
If I do a rewrite I'll start with the Jumpstart Pro template which will save me dozens of hours of work for users, authentication, impersonation, social logins, payments, forms, Tailwind, etc.
I would be able to implement Active Storage, Action Cable, Action Text, Trix, Turbolinks, form_with and other 'new' features from scratch instead of trying to adapt our current code.
To test the feasibility of a rewrite I'm going to code about 20 hours over the next month and see how far I get. My main concern is the database. Whether to rewrite in a format 100% compatible with the existing data or to optimize then import data to a new database.
Basecamp rewrites their app every 4 or so years and continues to maintain the old versions for any users who don't wish to upgrade. They explain it similar to buying a car. Porsche's going to completely redesign the 911 every 5 years or so, but that doesn't mean all existing 911 users are forced to upgrade. They can if they'd like to, but there's no requirement to and you only have to fix bugs (which should get less and less over time) on the old product.
I always thought that was an interesting philosophy for software which almost never is seen this way. You're always forced to upgrade to the rewrite. Something to keep in mind!
And if you rewrite, I'd consider using the existing database and then adding any migrations you need to change it to how you'd like it to be. That way you can more easily transition customers over to the new version.
Thanks guys. Good reminder about Basecamp. I did already know that, being a user of both Classic and Basecamp 2. Very interesting that they keep every version alive.
Thumbs up for the rewrite so far then. Any naysayers?