logoalt Hacker News

stephenhueyyesterday at 8:19 PM0 repliesview on HN

Exactly. Early in this century, I was excited to be working on a Java shipping web app deployed to Tomcat running on Windows because it felt like cutting-edge technology! As an aside, thermal printers were fun to print shipping labels on. At the time, I couldn't quite put my finger on it, but the many thousands of lines of code in the AirbillBean (to represent a shipping waybill) handled pretty much all persisted attributes and business logic in the application--well, almost everything of consequence, unless you count my address book importers. :) The app didn't need Struts or any other framework, and the JSPs were very convoluted, all working with that AirbillBean model. This was a high-traffic app in a booming business. Later, I realized that a lot of that AirbillBean should have been pieced apart into other classes. A younger me shook my head in disgust at the sorry state of that codebase after I left. But you know what? That code served them well for years and years after I left, and hardly changed.

Rails arrived around that time, and it influenced many other popular frameworks. From what I remember of how things were back then, a lot of developers' eyes were opened by seeing a cleanly organized Rails project. I'm sure Basecamp has had to do a lot of custom refactoring beyond whatever is covered in the Rails Way. Any app that has grown as much would have to start customizing outside of the initial framework.

Today, a lot of solutions I've worked on wouldn't have even seen the light of day if they hadn't been built with Rails. I often ship complete SaaS platforms on Rails at a fraction of the cost and time of the competition because Rails makes business experiments easier and cheaper to try. Are models sometimes heavy? Yes. As heavy as that old-school AirbillBean? Not usually. But the fact is, anyone who is tasked with maintaining that would be wise to start refactoring a lot of that into other classes once complexity is increasing. But you might never have gotten to the point where you were dealing with increased complexity if you didn't start out iterating quickly with the Rails Way or something comparable. :)