From the Blogosphere
Should Developers Care About Cloud Computing?
An introduction to cloud computing for developers
May. 15, 2009 10:00 PM
It seems like just about every cloud computing discussion with a development audience results in the same question being asked: “Why does this matter to me?” As cloud computing first appears to be primarily an operational-centric paradigm, it is easy to understand the reason this is asked. This question can be answered in a variety of ways. Some may say that cloud computing doesn’t affect the developer in any way, while others will say developers need to totally revamp their skill set to cope with the new landscape proffered by cloud computing. The truth, as always, is somewhere in the middle.
Though the industry is still in a bit of disagreement on exactly how to define cloud computing, it doesn’t seem there is a lot of disagreement with the idea of a three-layer cloud. At the top is the Application Services layer, followed by the Platform Services layer, and then the Infrastructure Services layer. For a rough summary, the application services layer constitutes SaaS offerings, the platform services layer encompasses platforms in the cloud like the Google App Engine, Force.com, etc., and infrastructure services provide underlying compute resources like processing and networking in the cloud, think Amazon’s EC2. There are numerous posts discussing what makes up each of these three layers, so instead of turning our focus there, let’s discuss the impact to the enterprise developer in each of these three cloud layers.
On first look at the application services, or SaaS layer, we may not immediately think of developers. More often than not, CRM software, email, collaboration solutions, and other similar offerings come to mind. However, there are at least two ways in which the services in this layer impact the enterprise developer. For one, there is the possibility of more and more development tooling environments moving into the clouds. By extending development tooling in the software as a service model, these often compute intensive offerings could get their resources from a capable cloud instead of the comparably weak personal machines developers often have. In addition, as in all SaaS offerings, the provider is charged with monitoring and maintaining the software, and this means developers put more of their focus and time toward software development.
Beyond the movement of development tools toward a SaaS model, the proliferation of consumable services in the cloud has and will continue to have an impact on the way developers and architects design IT systems. Services in the cloud, both private and public varieties, become part of the overall SOA for an organization. This means considerations of securing services, mediating service requests, and otherwise governing services applies across multiple domains now. Cloud services can provide a powerful boost to the SOA capabilities of an organization, but the ramifications of extending that SOA across multiple domains and into clouds should be considered by enterprise developers and architects as early as possible.
The effects of cloud computing on developers are probably most palpable in the platform services layer. This is where we find platforms like the Google App Engine, Force.com, etc. hosted in the cloud. If an organization chooses to go the route of a cloud-hosted platform, developers need to get up to speed on the layout of that platform including the APIs offered and the application deployment and packaging strategy. Across the different platforms there will likely be support for a common set of languages like Java, PHP, Python, and more, however, there will also be services and APIs unique to each of the platforms. For instance, the Google App Engine offers the Google Accounts service to applications running on its platform. This service allows developers to authenticate a user of their application using the user's Google account credentials. In addition, different platforms offer different connectivity and integration services. These capabilities are important when connecting applications running on the cloud-hosted platform to components running elsewhere. When leveraging platform services in the cloud, enterprise developers need to go beyond their current skill set and educate themselves in the services and APIs offered by the platform in order to utilize its full potential.
The infrastructure services layer likely impacts the enterprise developer the least. These services are typically consumed by the higher level services in order to either provide a platform or software as a service. This is not to say though that developers can be blissfully ignorant of an infrastructure cloud service being utilized within their organization. In some cases, such as the case with Amazon’s EC2, the infrastructure comes with a complimentary set of capabilities such as storage and message queuing. At the least, developers should be aware of the characteristics of the infrastructure. For instance, when developing an application it would be good for a developer to know if an infrastructure can dynamically scale based on request volume. If so, the developer is likely in the best position to convey information about the metrics used to decide when to scale the infrastructure. If the infrastructure doesn’t dynamically scale, developers and architects need to be aware of this when originally designing the system. This allows them to architect and implement solutions that mitigate this limitation.
Cloud computing is here and developers need to be ready. If you are an enterprise developer whose organization is looking to cloud computing solutions be proactive. Research the different layers of the cloud your company is interested in, understand the impacts to you and your job, and voice your opinion about the direction that should be taken. If you have any thoughts on development in the cloud, let me know below or send me a note at firstname.lastname@example.org.