Yes – I know, touchscreens, apps, keyboards.
If you develop apps for any of these platforms that’s great. And if say, your app needs to do something a bit more meaty than the phone’s onboard processor can manage, you’ll almost certainly use processing power on the other end of an Internet connection.
You could build a meaty server and run the code in your own office. You could, if you are a bit bigger than that, use an Internet facing server in your own data-centre. You could use a VM at a hoster. You could provision that server portion of your app on to a public-cloud Infrastructure-as-a-Service (IaaS) provider or you could write your app and send it to a Platform-as-a-Service (PaaS) provider.
Were it me – there’d be almost no decision to make. The first option, buying a server, installing an OS then writing my app on top of that and getting it connected to the Internet from home – hmmm. For a start that sounds pretty expensive. I’d have to buy the hardware and possibly the Operating System (if I don’t choose an open-source option), write my app, deploy it, harden the platform itself and then get it securely connected to the Internet.
The next option of running this is in my own data-centre means I’d have to find the IT group that is going to maintain the service level this server will give me. There will be a fair cost associated with procuring and running the hardware and software (outside of my app I mean) and getting it to provide those services in a realistic and secure way.
I could go to a hoster and take out a contract for say a 12 month period and send them my OS image with my app installed. Again, the work of securing the OS and, importantly, in a hosting situation, keeping it up-to-date and secure is a fair old commitment. But at least I’d be using their infrastructure and rather than being hit with a big capital outlay at the start, I’d just get a monthly bill. It has its attractions – oh of course their big fat pipe to the Internet would especially help.
I could go to an IaaS provider. Aside from the commercial details around the contract and so on, I’d have very similar technical challenges. I wouldn’t be able to just concentrate on my application. I’d have to look after the OS, its configuration, security, patching and so on. But I could buy compute resources by-the-hour. Also, if I wrote my app to scale-out by adding more instances of the app alongside the existing one, on new VMs, with the super-fast provisioning models that IaaS providers provide, I could respond to peaks and troughs in demand very quickly – within minutes. In an elastic fashion as Amazon, the biggest IaaS cloud provider would say. I’d have to write my app to work that way – to be stateless, to work in a multiple-VM fashion, but there’d be a really big advantage of using an IaaS cloud for this.
But not being all that keen on configuring & securing server operating systems, and not being too keen on the commitment that the on-going maintenance of it would put on to me, I’d go to a PaaS provider. All I have to do is send them my application code and data and they’ll take care of the actual environment for me. Like hosters and IaaS providers, they have high-bandwidth Internet connections and they actually tend to give good availability SLAs – like 99.95%, but I actually know the reality is that availability tends to be considerably higher than that anyway.
I work for Microsoft so my preferred choice of PaaS provider would be Windows Azure. But I guess, if I were a phone developer there’s another reason too. The availability of toolkits that allow me to write apps for Android, iPhone and Windows Phone that use a Windows Azure backend.
There are specific services such as Storage in blobs, queues or tables I might want to take advantage of because the phone itself is light on storage – especially if it’s already full of music and videos. Or maybe I’d like a really simple way of using Facebook usernames and passwords, or Live-ID, or Google or Yahoo or… I could take advantage of Push Notification services. The thing is, the phone toolkits plus Windows Azure mean it’s easy for me to concentrate on the only thing that creates value in an application – and that’s the application itself, rather than the infrastructure it runs on.
I’d only have to write phone and Azure code and I could live confident that when an important security patch is released it will simply be applied to my service in a co-ordinated way by the back-end service and I not only don’t have to be bothered with it – I don’t even have to be aware of it. It will happen automatically. Managing infrastructure doesn’t really bring any true value in and of itself. It’s necessary but if I can get all that from a provider who gives me an SLA, then I’m all ears.
And then if I wrote my app the same way I might do for an IaaS provider – stateless, multi-instance, scale-out etc – I could still take advantage of the fast provisioning and de-provisioning of servers. Because provisioning of servers is similarly fast in Windows Azure. So I can scale out and back in an elastic fashion. All I need to do is set the instance count on a service and apply that and bingo! A few minutes later my service has been scaled up. And if it was right in the middle of having a mission critical security patch applied at the time, I don’t worry about the infrastructure, the Windows Azure fabric will sequence everything correctly and take care of that for me.
Or alternatively, I could use the service management API inside my server-app. It could monitor its own performance and call the methods to scale the service out to say 4 instances (entire VMs with the app and all configuration automatically applied) at busy times and then when the app quietens down, to scale it back down to say 2.
This isn’t an example of a phone-specific app, but take a listen to what Mark Bower at Cube Social says about scaling their social CRM app in this 3 minute video.
Get the Android Toolkit for Windows Azure here
Get the iOS Toolkit for Windows Azure here
Get the Windows Phone Toolkit for Windows Azure here
In my opinion, if you are at your core, a developer, not an infrastructure guy – the easiest way to be productive and get not only your code out of the door on time but also the service you are creating – especially for mobile apps, there’s no better combination than Windows Azure plus one of these toolkits.
If you are a UK phone developer and you want to understand more about Windows Azure, come on one of our UK bootcamps. The very next day, you can follow it up with a Windows Phone Bootcamp. They’re free. Next dates are:
Windows Azure Bootcamps:
11th November – Edinburgh
25th November – London
Windows Phone Bootcamps:
12th November – Edinburgh
26th November – London
Planky – GBR-257