Blog Posts

Being a Good Code Reviewer

At Rover, we practice peer code review as one way to improve the quality of our code. Taking a little extra time to look over each other’s work saves a lot of time debugging code later. There are a few things you can do to be a good citizen when reviewing someone else’s code.

(Read more...)

Downsizing the storage of your live PostgreSQL RDS instance

As you might know from previous posts, we are hosted on Amazon Web Services (or AWS). We’re using the awesome Relational Database Service (or RDS) for our RDBMS backends. Let’s suppose you have a production database that kept growing and growing until it reached a point when the hosting fees exceeded 20% of the entire production environment hosting costs. What do you do? Well, the Rover Engineering team got itself into this situation, so in this post we’ll present our approach to solving the problem.

(Read more...)

Why MKMapView and UITableView don't play nice

TL/DR: Anytime you stop displaying an MKMapView in UITableViewCell don’t forget to set showsUserLocation = false.

(Read more...)

Storing Secure Config in Amazon S3 for AWS ECS, Lambda, and More

We run containerized services in Amazon ECS (EC2 Container Service) and wanted a way to set environment variables containing sensitive configuration in running containers without defining those environment variables in ECS task definitions. We do this by storing encrypted (at rest) key/value JSON objects in S3 and reading them into the environment in either a docker entrypoint script or in the application’s bootstrap process. We wrote Snagsby (https://github.com/roverdotcom/snagsby) to make this process easier. We’ve found it a convenient way to read configuration into lambda functions as well.

(Read more...)

Optimizing Webpack: An Adventure

Here at Rover, our team of front-end engineers and engineers contributing to the web client projects is growing rapidly along with the company. In order to facilitate that growth, we recently spent some time looking at ways to improve the developer experience.

(Read more...)

Making Django Upgrades Easy(er)

At Rover Engineering, we recently undertook a major project to upgrade our Django version from 1.8 up to 1.11. As a team, we’ve done our share of Django upgrades before. This time however, we were particularly ambitious in upgrading three versions plus dependencies back-to-back with a goal of little to no interruption to the other projects going on in the tech team. (And we were already busy!) A couple months in, things are going pretty smoothly - we’ve managed to successfully land our other big projects, make significant progress, and we’re now about ready to put the final pieces out into production. It used to be a fairly painful process to upgrade, but we’ve definitely learned a few lessons along the way, and made our lives easier with some smart planning. Here are the lessons we’ve learned through this process:

(Read more...)

Build time optimization with pip and virtualenv

Using pip and virtualenv to manage your Python dependencies is a no brainer for development. The ability to ensure all developers use consistent versions, simplfy development environment bootstrapping, and quickly test new dependencies versions in an isolated environment are all huge wins for development. What about in a production environment or with continuous integration?

(Read more...)

Doggie Bag: Night Owl Edition

A weekly bag of snacks to take home after the meal, curated by Rover Tech.

(Read more...)

Doggie Bag: Guacamole Edition

A weekly bag of snacks to take home after the meal, curated by Rover Tech.

(Read more...)

Speeding up Django test runs by optimizing Factory Boy

From the very beginning at Rover, we’ve focused on making deploying code as fast and painlessly as possible. One important piece of our deployment infrastructure is Jenkins. As soon as we merge to master, (via a pull request) Jenkins runs our test suite—if the suite passes Jenkins automatically deploys the new version. As our app and our test suite have grown, these builds started taking longer than we’d like, so we decided to spend some time optimizing performance.

(Read more...)

JavaScript Error Reporting using Source Maps and Sentry in Django

Sure, you have error reporting for when your app 500’s, but do you know when your latest JavaScript changes to your core funnel interactions block your users from doing anything at all? Errors are far easier to catch and test for on the backend using automated unit tests, but the front-end of the web is everything but predictable. You can test to your heart’s content with qUnit or Jasmine, and automate your testing in tools like Browserstack and DalekJS, but even our best efforts will have bugs falling through the cracks.

(Read more...)

Doggie Bag: Free as in Internet Edition

Rover Tech’s weekly bag of snacks to take home after the meal.

(Read more...)

Can you code better than this rap?

In this job market, a company has to do everything it can to attract top developers

(Read more...)

Doggie Bag: Programming Sucks Edition

Rover Tech’s weekly bag of snacks to take home after the meal.

(Read more...)

How I removed email from my life

Of the many things that are really great about Rover, one of them is that we have a very healthy “email culture”. We mostly talk face-to-face or in a chat room. Most mornings, I arrive at work with very few new emails in my inbox.

(Read more...)

PhantomJS, Selenium, and Django: Headless browser testing for the rest of us

Rover.com is a Django shop, but I personally come from a Rails background. The Rails world has great tooling and infrastructure for automated functional tests - capybara, capybara-webkit, and the new hotness poltergist. Underneath poltergeist lies PhantomJS, a headless webkit with very few dependencies, excellent for automated testing. Unfortuantely, PhantomJS version 1.5 dropped Python bindings, leaving us Djangonauts out to dry. There also isn’t a great capybara equivalent in the Python world (Ghost.py is the closest).

(Read more...)

Who We Are

Rover.com connects pet parents with the nation's largest network of pet sitters and dog walkers. On Rover, pet parents can easily discover, book, and manage personalized care for their dogs including pet sitting, dog walking, and doggy day care. Founded in 2011 on the belief that everyone should have the opportunity to experience the unconditional love of a dog, Rover improves and simplifies life for pet parents and the dogs they love.

We're headquartered in downtown Seattle. We're an agile, fast-growing startup, and our leadership comes from some of the country's most respected tech companies. We've been named among Seattle's "Best Places to Work" in Seattle Met magazine, Seattle Business Magazine, and the Puget Sound Business Journal." We're also a recipient of Seattle Business Magazine's 2015 Tech Impact Awards. Needless to say (but we're going to say it anyway)-we love dogs, and we wouldn't dream of going to work without them by our sides.

Join Our Engineering Team

GitHub Repos

@roverdotcom on GitHub