The technology behind our Mobile First Cloud First strategy

Excuse my particularly nerdy topic today. This is an exception for me but felt it important to outline what technologies we are using to make this strategy work.

The problem with being Mobile First Cloud First as a tiny little indie developer company is that you have to become proficient at a bunch of different technologies. This is hard for a single developer or two-person team to accomplish.

We are currently developing for three platforms using five technologies. The three platforms are the web, iOS and Android. The languages are Javascript, (ansii) C, iOS/Objective-C, Android/Java and Ruby on Rails. The technologies, besides Javascript and C, don’t matter that much specifically, although writing for iOS and Android leave little choice.

Have you ever really looked at a map of Florida? I mean really looked? In the middle of the state is a massive lake, Lake Okeechobee. It’s so big that it is actually the primary source of fresh water for all of south Florida with tens of millions of residents. When I was in high school in Ft. Lauderdale I remember hearing that Lake Okeechobee was so shallow, though, that you could walk across the entire thing without ever having your head below water level. I’m sure that’s not true¹ but I love the metaphor. That’s how I am as a programmer: miles wide and inches deep. I know all four languages pretty well (my partner does all the ansii C development) but in none am I an expert. Allowing myself to just be proficient is important to pulling this strategy off.

The one that I am probably best versed in today is the most important to make this cross-platform strategy work: Javascript. It’s the primary language we have that works across all devices. And lucky for us it has gotten awfully good over the last few years. We use it in specific views, never for view transitions, minimizing the places where it is obviously not native code.

Within those views we do have some animations and a few controls.² We consciously decided, however, not to match the look-and-feel of native controls. Instead we created our own that function well but don’t try to be the same. I suspect most of my customers won’t really notice the difference.

As much as we could develop in cross-platform code we did. That means big chunks of the UI are in Javascript and big chunks of the back-end technology are in C. This allows us to treat the “native” code as glue. On the web that glue is Ruby on Rails, although it could be Python or Go or node or whatever. For the most part it handles JSON callbacks, serves pages and interacts with the database.

On iOS and Android, the framework for the apps is all native and only a single primary view is HTML. This one page, though, is 80% of the UI work to develop and maintain the app. Thousands of lines of code are all cross-platform. Furthermore, we stuffed as much of the processing into C as we could, which will link into Rails and Android and run natively on iOS. The key is being able to make quick updates to all apps.

If you are just starting out, I highly recommend the following resources for iOS, Android and Javscript:

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition)
iOS Programming: The Big Nerd Ranch Guide (4th Edition)
Android Programming: The Big Nerd Ranch Guide
How To Learn Javascript Properly
Agile Web Development with Rails

Becoming proficient at multiple languages is time-consuming but important to our success long-term. We can keep churning on the same ol’ mobile-only apps we have, making a few bucks a month, or take some of that time and start learning technologies that let us be mobile and cloud first. I think the latter is the only way to sustain success.

¹ Besides, I think the alligators would probably get you before you made it across.
² Check out Greensock, especially in the iOS and Android browsers. Amazing stuff.