How Scott’s Cheap Flights is Using Ruby on Rails to Scale
As a part of a Rails development company who works with clients in all types of industries, it’s always fascinating to learn how interesting companies are using Ruby on Rails to power their business. It’s a bonus when we learn that companies are migrating to Rails to improve their customer experience after trying other solutions first.
After browsing flight deals on one of my weekly emails from Scott’s Cheap Flights, I noticed they were hiring for a few positions — including Ruby on Rails engineers. With that information, I reached out to them about interviewing one of their team members about their experience with Rails. Below is a quick conversation I had with Philip Szalwinski, the Lead Developer at Scott’s Cheap Flights. He’s part of a team of 25 full-time and part-time remote employees who work on product, customer support, and flight research at Scott’s Cheap Flights.
Philip heads up the Scott’s Cheap Flights engineering team. He’s been with the company for about a year and was the first technical hire as they outgrew the contract-based work that the original site was built with. He joined when Scott’s Cheap Flights was still operating on a “Frankenstein’d” Wordpress site built by freelance developers.
The founders at Scott’s Cheap Flights knew they needed to adapt their technology to scale and continue to grow. Philip, a polyglot generalist with a strong preference for Rails, knew that Rails would provide the capabilities their customers needed while increasing stability overall.
Here are some thoughts from Philip on the migration to Rails from Wordpress.
What is Scott’s Cheap Flights?
Scott’s Cheap Flights is a subscription service that alerts users when super cheap flights pop up. Think $400 round trip to Europe, or $450 round trip to Japan. When you sign up, you pick where you want to depart from, and when mistake fares or unseasonably low-priced tickets go on sale, you get an email with information on the deal (availability, normal price, etc.) and instructions on how to book the flight.
Your site originated on Wordpress. Why the switch to Rails?
WordPress provided a lot of advantages that allowed us to grow very rapidly without the need for a team of full-time developers. Rapid growth is a double-edged sword though, and the technical debt that accumulated while achieving that growth necessitated the need for a new platform.
WordPress is an excellent platform for blogging, but by switching to Rails we can bring in-house a lot of business logic that had been living in disparate places. This makes things much easier to change, monitor, and control.
What triggered a move to a new framework? How did you know it was time to try a new technology?
Being reliant on third party WordPress plugins for critical subscriber journeys meant that we couldn’t make all of the changes or support all of the features that were needed. We realized that we needed to make a lot of changes. For example, in the Wordpress app, only Premium subscribers can have accounts that are managed through a Wordpress plugin.
By switching to a new platform, we’re able to provide that functionality to all of our free subscribers as well. The previous way we managed accounts would not have been able to scale from our several thousand premium users up to a million free users. This account feature is slowly rolling out for new users, and will be available in the future to all of our users.
Have there been any sticking points as you make the transition?
Scope creep has been a large challenge. When we first started out, reaching feature parity in order to replace the WordPress app was goal number one. But we quickly discovered areas in need of improvement, leading us to want to make things even better than just “not broken.”
For starters, internationalization. The current WordPress site was kind of internationalized. We wanted to provide all of the site’s features in the languages we support. The globalize gem has been helpful for this. We haven’t battle-tested it yet as it’s just debuting as a beta test, but it’s been handy for translating fields on our models.
What was the evaluation process like for choosing Ruby on Rails as your framework of choice for this app?
I’ve seen capable teams develop quickly within Ruby (Rails and Sinatra), Clojure, and JavaScript, among others, but the conventions in Rails and the community around Ruby weighed heavily in the decision.
The bedrock of following established conventions means that new developers have a quicker ramp-up time, and we also get to benefit from the richness of the Ruby community (a language created with the explicit intent of maximizing programmer happiness).
What unique challenges does your type of application need to handle? How will Rails help with these challenges?
We need to support both a “standard” Rails app as well as an API for mobile apps. Being able to quickly develop new core journeys in Rails, while using a pattern of service objects, has meant that once we encapsulate the behavior into a service object, we can share that module with our API, making the API endpoints easier to develop while maintaining consistency across platforms.
Are there any 3rd party integrations or gems that you’ve been impressed with recently that you’d like to share?
Throughout the process of internationalization, we found that managing translation files and translation versions is a big challenge. One way we’ve simplified that is by integrating with a service called PhraseApp. We keep our master English locale files up to date in GitHub, and PhraseApp monitors our repo and pulls in any changes.
The changes in need of translation are presented to translators (either our own or those provided through PhraseApp), and when they are complete, we export them as a pull request to GitHub as a normal part of our development workflow.
We’re excited to see how the migration to Ruby on Rails from Wordpress will help their company scale and provide an even better experience for their users.
If you have a passion for travel and are keen on a good deal, check out Scott’s Cheap Flights and subscribe to their flight deals. And if you’re a Rails developer seeking a remote opportunity, take a look at their careers page to see if you might be a good fit.
This post was originally published on the Planet Argon blog.