BaaS
Backend as a service
or
Not reinventing the wheel
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:
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 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 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