Engineering Blog

Technical challenges behind Hunter's products, crawling millions of websites everyday to connect businesses.

Keeping an enjoyable Rails application, years after years

Hunter.io and its API are served by a single, monolithic application built in Ruby on Rails. The first commit was performed by Antoine on March, 16th 2015, on the 4.2.0 version of Rails. Today, more than 5 years later, we’re still working on the same repository. Fortunately, we’re on a more recent Rails version. More importantly, we’re still having fun and enjoyment working on this application on a daily basis. Here are a few conventions, best practices and tools we’ve put in place to ensure our application remains up-to-date, clean and of course, enjoyable.

Fraud Prevention: Being Strict While Being Fair

At Hunter, one of our daily tasks is to fight against fraud. Preventing the creation of duplicate or bot accounts, as well as blocking payments from stolen credit cards, for example, are missions we undertake at any moment. Using both automated and manual means, we want to make sure every Hunter user is a legit, well-intentioned human.

Lessons From Migrating to GCP

A few weeks ago, we migrated most of our service to GCP. We learned a lot during this change to the infrastructure. Overall we’re very happy with the change but there’s, of course, some nuance. Here are some of our main findings.

New in Hunter: Improved Infrastructure Redundancy

Over the last ten days, Hunter experienced two separate downtimes of around one hour each and multiple smaller downtimes of 10 minutes. The availability of our service is essential as, at any moment, hundreds of users are working and counting on us to be online. Over the last few days, we weren’t up to your expectations; we know how frustrating this must have been. Here is what we improved in our infrastructure to prevent the problem from happening again.

Deploying 20 Times a Day Without Thinking About it

At Hunter, we love simplicity. As we’re a small team of 5 handling the traffic of 1 million monthly sessions, it’s necessary to have simple tools and processes we can rely on. When dealing with continuous deployment (aka “how to automatically deploy code to production, dozen times per day”), we obviously applied the same principles. This is how we did it!