Winning: Space Monkey

In 2012, I left Instructure to join the Space Monkey team, founded by a couple of good friends I worked with at Mozy. We're changing how the world stores data - forever!

Check out Space Monkey »

Kickstarter - Launching Space Monkey

Extremely Hard Work

We spent over a year building the foundations, making it possible for people to both buy and use our platform. It's hard building an entirely new product - especially a reduntant, secure data storage platform. With enough of the foundation in place, we looked to Kickstarter to help us get across the finish line. You can check out the archive of our successful Kickstarter launch here:

SpaceMonkey on Kickstarter »

Launch Festival 2012

Back in 2012, we weren't entirely sure how long it would take to build the product. At the Launch festival (which Space Monkey won), the hope was to get a product out the door in a matter of months. When we turned the corner into 2013, we felt terrible that we hadn't been able to deliver that fast.

Kickstarter 2013

Our launch on Kickstarter was carefully coordinated to coincide with hardware and software releases. For months prior to the start of the Kickstarter campaign, we had been aggressively testing and actually using the Space Monkey service - for the first time ever. We knew that, when Kickstarter finished, we would have to get a real product - a working product - into the hands of those who pledge within 30 days.

Core Client - My primary responsibility

Client Technology

Space Monkey is a distributed, redundant, self-healing and self-building storage network. There are two principle tiers of technology: the distributed, node-side platform (written primarily in Python) and the client-side, user-facing set of applications.

I've worked on most of the projects in play at Space Monkey, ranging from the Python distributed storage infrastructure to the various web services. In the last year of my tenure at SpaceMonkey, my focus shifted almostly exclusively to the user-facing client desktop clients

Languages and More

Space Monkey's desktop clients started out life as light wrappers around a Python core. We decided early on, however, that we wanted higher performance and a lighter profile and switched to C++. Before you question too much, there were many, many reasons for this switch - and it's something we never stopped questioning. In all, however, it gave us the benefits we sought: the Space Monkey client is lean, mean, and fast

Tying Things Together

I've worked on cross-platform applications before and learned a few hard lessons:

  • There is no such thing as a cross-platform UI (that you want your customers to see)
  • Cross-platform is tricky in any language
  • Cross-platform is particularly hard in compiled languages

I argued early on that, regardless which language we used for the core functionality, all user-facing elements should be written natively for each supported platform. I stand by that - and you can see the difference by downloading the Space Monkey OS X and Windows clients today.

Mac Heads Rejoice! - I certainly did...

Objective C is Beautiful

I love the Objective C language. I love it more and more as I continue to work with the alternatives - specifically C++. Don't get me wrong: C++ is a wonderful language. In fact, I'd go so far as to say that I even love C++0x. But the object model specifically (along with many other features and attributes) of Objective C are simply beautiful.

Because we elected to write all user-facing components in native languages, I had the (wonderful) opportunity to continue to work with Objective C at Space Monkey - a huge win!

Going Native: Lessons

As glad as I was to continue to work with Objective C at SpaceMonkey, I'm far more pleased that we've skipped the mistakes other companies make. For posterity's sake, here are the key lessons we applied:

  • User-facing components should always be natively coded. On Mac and iOS, stick with Objective C. On Windows, .Net, C#, C++ and others will work. But don't waste time trying to find that perfect cross-platform widgets library- there isn't one.
  • Cross-platform libraries are an amazing investment of time. Build them, use them, and do so in C or C++ (seriously).
  • Know your native technologies. More than just the user interface - learn about Grand Central Dispatch, run loops, Core Animation, etc. on Mac. Each platform has gems like these. Using them can pay back a hundred fold for the #ifdef tradeoff.