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!
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 »
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.
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
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
I've worked on cross-platform applications before and learned a few hard lessons:
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.
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!
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: