Programming in the Cloud
Authors note:
On August 3rd I will be presenting a talk ("Programming with the OSS 'Cloud Stack'") at CloudDevelop in Columbus, OH. What follows is a preview of what I'll be covering in that talk.
While quite a bit has been written about how "the Cloud" is altering the landscape for platforms (PaaS) and software (SaaS) providers, even infrastructure (IaaS) offerings, not much has been written about how all this affects programmers themselves. What does the Cloud mean to those working to architect, design, implement, and maintain code that runs on these various Cloud offerings? Do the possibilities of remote, commoditized hardware and software alter the way developers and architects execute their work? does it call for new tools? new skills? Does this all result in the need for a new working environment? My All Cloud Diet
These are some of the questions I set out to explore when I recently put myself on an "All Cloud Diet" for six months. During this "diet" I used only a Google Chromebook and/or an Android smartphone to do all my work. I still needed to do the things any active developer/architect is expected to do including coding, debugging, testing, collaborating with colleagues, etc. I also needed to be able to manage source control services, provide code reviews and comments, deal with bug reporting, manipulate and publish structured data, and deploy the final results to production servers. All from a device that has no appreciable hard-drive space and does not allow installing any customer software. In essence, I was on a strict diet of browser-based and plug-in based tools and services reachable via Internet connection.
Discovering a New Toolset
Although it took a while to get comfortable in my new environment, I found that there are quite a number of very powerful tools and services available that support the full life-cycle of a typical developer/architect today; especially one focused on building solutions for the Web.
In relatively short order I was able to find full-featured browser-based editors (even ones that support line-by-line server-side debugging!), tools for managing data stores (CouchDB, MongoDB, etc.), used github as my code repository (including collaboration & code review options), was able to post test scripts for execution and review, and even deploy my projects to a wide range of server providers all from my browser.
Along the way I discovered I had an easier time collaborating online with colleagues in other locations, was better able to take advantage of the most recent releases of new services & tools (since there was no "install" or "update" I had to manage), and was more mobile in the process. In fact, among the new tools I discovered were my own personal growth as a developer.
Compelling Advantages
While going through this experiment, I also got a chance to interview some of the people providing these "Cloud" tools and services. Along the way I learned that there are some additional compelling advantages to this new environment.
For many startups, there is a desire to reduce initial costs and reduce barriers to collaboration. By focusing on cloud-based tools and services, new companies can ramp up quickly and often can create accounts on many free services to begin. SMBs (Small to Medium-sized Businesses) can use Cloud tools to add agility and flexibility to their organizations. If a new contract calls for added staffing, using Cloud-based services means reduced installation costs and makes remote collaboration easier.
Going "All Cloud" also means that production services can be monitored, even modified from almost any location using simple browsers. This “anytime/anywhere” option can improve response time when it is critical without requiring special hardware or software at either the client or server end.
Goodbye Desktop, Hello Tablet?
So, is it time to throw away our desktops, grab our tablets, and hit the road? Is the era of internal networks and dedicated servers a thing of the past? No.
While I found powerful tools and learned to take advantage of many solid Cloud-based services, much of this space is still very "bleeding edge" technology. Not all programming languages, runtime environments, and server profiles are represented “in the Cloud.” And there are still many details to work out in order to make assembling a full-featured “Cloud Tool Chain” easy, reliable, and cost effective. But I can see that it is a possibility and I have met people who are working to make that possibility a reality.
My advice is for everyone to conduct their own experiments; try out their own "Cloud diet" and see what you learn. Even if you decide that not all the pieces you need are available today, you may still discover there are ways to leverage cloud-based tooling to reduce barriers, add flexibility, and increase productivity in various aspects of your development efforts.