Skip to content

Migrating SimpleGeo Customers: Idea to Production in One Day

Last Thursday started out like any other. We got into the office, had our daily stand up meeting, did some work, ate some tasty catered food, and were humming along in our usual routine. Somewhere in the afternoon things took a different turn. Here’s the play by play of how we launched a one-click migration tool for SimpleGeo Storage customers in one day.

2:03 pm

I finish up whatever I'm doing and load up Hacker News for a quick break. I notice a story about Urban Airship shutting down SimpleGeo and paste the link into our HipChat room. We discuss the Hacker News commentary. It seems people are upset with the shutdown.

2:05 pm

Kevin asks "can we reach out to people who were using simplegeo storage somehow?" James immediately counters with "we should make a migrate your account landing page!"

2:12 pm

We take a look at SimpleGeo's documentation and map each of their constructs (Layers, Records, Locations) to ours (Classes, Objects, GeoPoints). It seems reasonable.

2:12 pm - 2:25 pm

Rapid discussion ensues. How long would it take? Is it worth it? How good are the suggested migration options? Do we write a script that people can download or provide a service? Do we have an account to use? Are their APIs robust enough to allow a wholesale export?

2:25 pm

It's on:

2:25 pm - 2:46 pm

James starts working on the landing page. I start on the backend by looking at the SimpleGeo API for the first time. I fire up curl and try to make some sample data. I hit a snag immediately. I don't have "write access to the layer." Huh? How do I create a layer? I panic a bit. I don't see it in the docs. Maybe new layer creation is disabled? Things
look a little dire on my side.

After a little head bashing, it turns out that I'm too accustomed to our philosophy at Parse of "zero configuration to get up and running." You have to create a new layer in the web UI.

2:55 pm

James comes up with the idea of having a visual hook — a neat icon to represent the core of what the importer is doing. He spies a lifesaver image and immediately knows what the design should look like.

3:05 pm

James has the landing page mocked up:

3:32 pm

I have a rough script up and running:

3:32 pm - 5:35 pm

We crank our headphones and hack.

5:35 pm - 7:03 pm

I merge in my code and we start testing it together end-to-end. We find various bugs around state transitions in the backend and frontend. We decide to have the backend periodically notify the frontend about how many objects it has processed. We test, fix bugs, iterate on the UI, repeat.

7:03 pm

I merge our branch into master, push to production, and spin up the import workers. We declare victory and show it to a select few people.

12:14 am

James discovers a bug and we discuss it in HipChat. We declare victory again.


We post the importer on Hacker News. Jason Kincaid at TechCrunch picks
up the story
. James creates a walkthrough video to illustrate the
import flow:

Just another day at Parse 🙂

We're currently hiring smart hackers to come and build the platform with us.