I've been blogging a lot recently about mobile application development and continuous integration (this blog gives a round-up of the key topics). It's now time to stand back and look at the big picture. What is it that makes Continuous Integration (CI) and Platform as a Service (PaaS) so interesting for mobile application development?
Let's face it, building mobile apps today is a lot harder and less fun than it should be. Developers have to burn cycles supporting an ever-increasing set of form factors without a dedicated QA team to help, but in the unforgiving mobile marketplace any mistake that impacts the quality of your application will quickly result in bad ratings and lost opportunity. If your app doesn't display or behave properly for a particular user's device, that means a poor review on the App Store or Google Play. Mistakes can be costly and hard to recover from.
Manage Device Complexity and Automate Build Tasks
Device independence simply means more devices to test but how do you manage that, if you don't want the cost and complexity of running your own private device farm? And no amount of emulator testing will ever provide the vital feedback and extensive coverage that comes from real users in the field beta-testing your apps on real devices, in real locations over real networks: how can you manage beta test distributions within an automated continuous integration environment?
The emergence of PaaS - where application development and runtime services are available on-demand in the cloud - is starting to deliver an unexpected benefit for development organizations: bringing scale and control to this challenge of automated testing and continuous delivery for mobile applications and their ecosystem. The tools and techniques needed to solve these problems have existed for some time in sophisticated development environments: what is needed is a way for mobile app development teams to tap into those services without the cost and effort involved in setting up a dedicated Continuous Integration (CI) environment. That's why having these development services available on-demand using cloud resources, with mobile SDKs, platform libraries and tools pre-provisioned is critical. It's all about letting developers develop and build quality assurance into the platform, so it's just easier to do the right thing and follow best practice.
Build, Deploy and Test Mobile and Backend Services Together
Another aspect of mobile app development where Platform as a Service makes developers' lives so much easier is the often-overlooked backend services. Here I'm not talking about the interesting and important Backend as a Service (BaaS) space, where a lot of exciting new companies are offering support for mobile-specific services such as location and push notification, but rather the more basic problem of storing, managing, crunching and serving up your application data.
If you look at the apps on your phone right now, I'll bet that most of them follow this pattern: native mobile clients that "phone home" via backend services to get accurate, up-to-date data. Of course, there are different types of "data" and various ways of getting to the device: for me, that ranges from streaming video of the penguins at the California Academy of Sciences to refreshing the account details on my Starbucks card. Two of the technologies that I expect to be most important for mainstream mobile app backends are REST web services and HTML5 websockets.
The mobile apps and the backend services that support them are really all part of the same deliverable: in the web world, you would test the "client" UI against running backend services and the same holds true for the mobile world. There is a hierarchy of tests to run through: these range from basic unit tests and interface testing with tools like Selenium or SoapUI, through to fully integrated functional testing with on-device mobile apps talking to live backend services. Platform as a Service is a perfect model for this: the mobile client apps and the backend services can be built, deployed and tested, separately and together - following the basic principles of continuous integration, tests increase in scope, building on logically prerequisite component tests.
Total Testing - Use the Platform Ecosystem
One of the great benefits of the PaaS model is its inherent flexibility: you can very easily deploy those backend services with a combination of environments and data services and that adds a whole new dimension to integrated device-backend testing. Now add in beta test distribution management, mobile ALM metrics (for example, network latency and response time) and support for the growing family of mobile-friendly "No SQL" data stores, all available via the platform ecosystem, and I think the potential is obvious.
If you look at the mobile space right now, what you see is a flood of exciting new services, all designed to address the challenges and pain points of delivering great mobile apps. Look closely and you'll notice that they all follow a cloud model in one form or another: it's just the natural approach for building mobile apps. At CloudBees, we are adding important new partners to our mobile ecosystem on a weekly basis and I am always struck by how easy it is, how smoothly their services fit into the PaaS model: I don't think that's just a lucky chance. The fact is, mobile application development and Platform as a Service just go naturally together.
Mark Prichard, Senior Director of Product Management