BaaS


Backend as a service

or

 Not reinventing the wheel


Mark Woodbridge, IC SaaS, September 2013

The Challenge


Development of non-trivial apps is hard:

Design, Security, Scaling, Testing

Mobile has its own difficulties:

Fragmentation, Usability, Debugging, Connectivity

And non-technical:

Monetisation, Marketing, Analytics, Support

Can these be abstracted?


Development of non-trivial apps is hard:

Design, Security, Scaling, Testing

Mobile has its own difficulties:

Fragmentation, Usability, Debugging, Connectivity

And non-technical:

MonetisationMarketing, Analytics, Support

But why?


You want to focus on design, innovation and user experience

...and you'll need an API anyway

So why not let someone else do the
  • design
  • documention
  • implementation
  • maintenance
  • scaling
  • and security
so that you don't have to?

Server-side


  1. Colocation
    DIY sys admin

  2. VPS/IaaS
    DIY devops e.g. AWS, DigitalOcean

  3. PaaS
    DIY back-end e.g. Heroku, App Engine

  4. BaaS
    DIY front-end


Client-side


  • Native platform
    iOS, Android, Windows, BlackBerry

  • Cross-platform native
    Xamarin, Titanium, Flex

  • Cross-platform hybrid
    Trigger, PhoneGap

  • Mobile web
    jQM, Sencha, Bootstrap/Foundation

  • All BaaS compatible

BaaS: The big players


BaaS: The alternatives


Open source
Helios, BaasBox (Ruby)
OpenMobster (Java)

Proprietary
Apple iCloud
Google Cloud Platform/Play Services
Amazon Mobile SDK + AWS

Niche
Urban Airship (notifications)
Firebase (datastore)
Flurry (analytics)

Features


Core
Datastore
Notifications
Authentication
Custom code

Extras
Analytics
Billing/Mobile Wallets
Advertising
Streaming
Versioning
Location services

Advantages


Autoscaling

Security

Code push

Shared (de-duplicated) logic

Direct API access

Structure, UI separation

Future-proofing

Consistency

Dilemma of choice

No need to learn Ruby/Python/Java

Disadvantages


Data protection, jurisdiction

Data modelling/querying

OS integration (core data etc)

Lock-in

Critical infrastructure

Platform coverage

Offline support

Instrumentation

Extensibility

Cost
UI integration

Parse

// Initialisation and analyticsParse.initialize(this, applicationID, clientKey);
ParseAnalytics.trackAppOpened(getIntent());
// Data storeParseObject gameScore = new ParseObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.saveInBackground();
// File storenew ParseFile("resume.txt", "Hello World!".getBytes()).saveInBackground();;
// Authentication
ParseTwitterUtils.logIn(this, new LogInCallback() {   public void done(ParseUser user, ParseException err) {     Log.d("MyApp", "User logged in through Twitter!");   } });
// NotificationsParsePush push = new ParsePush();
push.setChannel("Giants");
push.setMessage("The Giants just scored! It's now 2-2 against the Mets.");
push.sendInBackground();// File store

Parse

Analogous code for:
iOS and OS X
Android
.NET and WIndows Mobile
JavaScript (browser and server)
REST (anything else)

Cloud modules for:
Email: Mailgun, Mandrill, SendGrid
Telephony: Twilio
Billing: Stripe
Crowdsourcing: CrowdFlower

Dashboard for:
Analytics, Files/Data, Notifications, Users 

Final Thoughts


Good for prototyping

Can be used for webapps too

AppCooker, proto.io, Fluid UI...

Consolidation inevitable


Resources


http://en.wikipedia.org/wiki/Backend_as_a_service

http://www.crunchbase.com/tag/backend

http://www.kinvey.com/backend-as-a-service

http://trigger.io/cross-platform-application-development-blog/2012/05/21/making-sense-of-mobile-development-platforms/

http://www.raywenderlich.com/20482/how-to-choose-the-best-backend-provider-for-your-ios-app-parse-vs-stackmob-vs-appcelerator-cloud-and-more