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
Design, Security, Scaling, Testing
Mobile has its own difficulties:
Fragmentation, Usability, Debugging, Connectivity
Fragmentation, Usability, Debugging, Connectivity
And non-technical:
Monetisation, Marketing, Analytics, Support
Monetisation, Marketing, Analytics, Support
Can these be abstracted?
Development of non-trivial apps is hard:
Design, Security, Scaling, Testing
Design, Security, Scaling, Testing
Mobile has its own difficulties:
Fragmentation, Usability, Debugging, Connectivity
Fragmentation, Usability, Debugging, Connectivity
And non-technical:
Monetisation, Marketing, Analytics, Support
Monetisation, Marketing, 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
-
Colocation
DIY sys admin
-
VPS/IaaS
DIY devops e.g. AWS, DigitalOcean
-
PaaS
DIY back-end e.g. Heroku, App Engine
-
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
- Cocoafish/Appcelerator (2010)
- Most mature
- Kinvey (2010)
- Good value
- Stackmob (2010)
- Most flexible
- Parse/Facebook (2011)
- Broadest platform support
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/JavaDisadvantages
Data protection, jurisdiction
Data modelling/querying
OS integration (core data etc)
Lock-in
Critical infrastructure
Platform coverage
Offline support
Instrumentation
ExtensibilityCost
UI integration
Parse
// Initialisation and analytics
Parse.initialize(this, applicationID, clientKey); ParseAnalytics.trackAppOpened(getIntent());
// Data store
ParseObject gameScore = new ParseObject("GameScore"); gameScore.put("score", 1337); gameScore.put("playerName", "Sean Plott"); gameScore.saveInBackground();
// File store
new 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!"); } });
// Notifications
ParsePush 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
BaaS
By Mark Woodbridge
BaaS
- 2,096