Update and Redevelopment

Hey all, first post here, looking for some answers that I couldn't find otherwise on the web.

Several years ago, my company hired a developer to develop a database system for our company. It handles all customer records, and is used by 6-10 users on a daily basis. It was written with Rails 2.0.2 (I know, archaic). The developer used a ton of non-traditional approaches to the code, so attempts to upgrade to a newer version have caused half the system to not work, resulting in more time reverting code and SVN back to its original state.

After numerous updates, enhancements, addons, etc., it now crawls along slowly, and the interface isn't very efficient. I know a lot of the problem is JavaScript, as it has 4 libraries in place to do everything the system needs to do (most of which is unnecessary eye candy - while I want things to look good, every form element does not need to be skinned). However, a lot is poorly written code (some was the original developer not knowing MVC that well, some was my early "I'm still learning the language" code that probably takes 10x the lines).

What I'm getting at is I believe our system needs an overhaul - a complete rewrite from top to bottom - and I'd like to do it with the most recent version of Rails. The biggest issue I have with this is that it currently uses over 100 tables to handle all the data, not all of which is very efficient. I don't want to rewrite the entire back end database schema, because the majority of it is well factored, and some of the code in some of the helpers and models is very good. However, I believe this deserves starting over with a whole new, mess- free RoR project.

I know I can copy and paste code over without a problem. But what I need to know is this: Is there an easy way to migrate the database and model code over without having to rewrite all of it?

Thank you in advance for your help.

I get the feeling - I really do. But just before you start, go get a copy of Mike Feathers excellent book on Working effectively with legacy code. I’d strongly recommend using some of his patterns to slowly port to the new version of the app. They aren’t trivial to implement, they add additional complexity during the transition period, but compared to the death march that most ground up rewrites end up as, I can’t suggest too strongly to think twice about a big bang, ground up rewrite.

http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052

Just my 2c. Hopefully someone else will chime in about porting the schema and model code.

Best Wishes,

Peter