Migrating SimpleGeo Customers: Idea to Production in One Day 16 Jan 2012

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.

Friday

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.

Posted on 16 Jan 2012
By Ilya Sukhar
blog comments powered by Disqus

About Parse

Parse is the easiest way to get a backend up and running for your mobile application. Sign up now!

Archives

16 May 2012 ACLs in the Data Browser
10 May 2012 A Redesigned App Management Console
07 May 2012 Express Your Brand With Parse
04 May 2012 Changelogs
30 Apr 2012 Managing Push Subscriptions with Installation Objects
26 Apr 2012 AnyWall: An Example Geolocation App with Tutorial
24 Apr 2012 Protect Your App By Limiting User Authentication Methods
23 Apr 2012 A Beautiful Login Screen For Your Mobile App
10 Apr 2012 Discovering a Major Security Hole in Facebook's Android SDK
03 Apr 2012 Introducing App Email Settings
02 Apr 2012 Protect User Data With New Parse Features
28 Mar 2012 Parse supports many to many relations
26 Mar 2012 Parse is officially out of beta
26 Mar 2012 Parse 1.0 is released!
09 Mar 2012 One Click Export
07 Mar 2012 Better Pushing from Your Browser
02 Mar 2012 A Powerful Data Browser
01 Mar 2012 Link to Facebook and Twitter Now Available Through the REST API
01 Mar 2012 Usage and Analytics
27 Feb 2012 Parse Now Supports Sign in with Twitter
24 Feb 2012 Viewing the Status of Push Notifications
17 Feb 2012 Saving Data while Offline
16 Feb 2012 Building HTML5 Mobile Apps with Parse and Tiggzi
07 Feb 2012 Facebook Users: Now On Android!
31 Jan 2012 Why Building a Mobile App is Hard
30 Jan 2012 Networking Improvements in PFFile and ParseFile
25 Jan 2012 Uploading Files via REST API
19 Jan 2012 Javascript and User Authentication for the REST API
16 Jan 2012 Migrating SimpleGeo Customers: Idea to Production in One Day
11 Jan 2012 Designing Great API Docs
30 Dec 2011 Tutorial: Make a Remote Data Table in Minutes
30 Dec 2011 Query Improvements and Happy New Year
28 Dec 2011 Parse Powered iOS Table Views
22 Dec 2011 Regular Expressions with Parse
09 Dec 2011 Geo Queries
07 Dec 2011 Counters on Parse
06 Dec 2011 Including Related Objects in Queries
30 Nov 2011 Video Tutorials on Getting Started
29 Nov 2011 Performance and Security Improvements
08 Nov 2011 User Management in the REST API
04 Nov 2011 New Tricks With Queries
28 Oct 2011 Large File Support for Android
24 Oct 2011 Large File Support and Facebook Users
19 Oct 2011 Parse in the Appcelerator Marketplace
05 Oct 2011 Introducing Our Future Pricing
03 Oct 2011 Parse is now compatible with ARC
30 Sep 2011 Easy Caching with Parse
20 Sep 2011 Use Parse with Heroku
09 Sep 2011 Use Parse with Appcelerator or Sencha
06 Sep 2011 Client Permissions
26 Aug 2011 The Parse REST API
19 Aug 2011 Android User Management, Date, and Bytes
04 Aug 2011 Funding, Y Combinator, and the People Behind Parse
25 Jul 2011 Android Push Notifications
20 Jul 2011 User Accounts
18 Jul 2011 Channels and Targeted Push Notifications
15 Jul 2011 iOS Push Notifications
06 Jul 2011 The New Data Browser and Importing
05 Jul 2011 Hello World!