Recent years have seen a large rise in the use of cloud based systems, with the vast majority of companies claiming some form of cloud usage. Cloud Computing has many advantages to offer businesses; from cost savings through to the ability to have truly elastic resources manage demand volatility.
This blog will explore some of the repercussions of Cloud Computing, and the impact they have had/may have on software architecture, process and management.
What is the Cloud
Cloud computing refers to both applications delivered as services over the Internet, and the hardware and systems software in the data centres that provide those services . There are several cloud computing service models, including SaaS, PaaS and IaaS.
SaaS, Software as a Service, provides access to application software. Examples of this include Google Apps and Microsoft Office 365.
PaaS, Platform as a Service, provides a complete computing platform upon which you can run your own software. A typical platform may include things such as an operating system, programming language execution environment, database, web server etc. Examples of this include the Amazon Web Services Elastic Beanstalk, and the Google App Engine.
Finally IaaS, Infrastructure as a Service, provides physical resources, such as machines (physical but most often virtual), storage, servers etc for use by the user. Examples include Windows Azure and Rackspace.
Why use it?
Cloud computing can offer several key advantages over more traditional approaches to computing, some of which include:
-Scalability: Cloud infrastructures can give the illusion of having infinite resources, which means you can make REALLY big stuff.  gives a good example of this: organizations that perform batch analytics can use the “cost associativity” of cloud computing to finish computations faster: using 1,000 EC2 machines for one hour costs the same as using one machine for 1,000 hours.
-Elasticity: This means that available resources can be increased or decreased elastically to respond to demand. This can be a HUGE advantage, because it means you don’t need to know how big your stuff is going to be beforehand!
Another example from  to illustrate this: when Animoto made its service available via Facebook, it experienced a demand surge that resulted in growing from 50 servers to 3,500 servers in three days. The elasticity provided by using a cloud based infrastructure was key to the service being able to function, as without the allocation of extra resources the service would have been unavailable. Additionally, when demand began to drop again after the initial surge, resources could be dropped such that the expenditure on the system more closely matched the workload.
-Accessibility: You can access your stuff anywhere you have an internet connection, which is most places, nowadays.
-Cost: Cloud computing can be a lot cheaper than whatever you were doing before. This is in part due to elasticity and being able to allocate/de-allocate resources, and in part due to the fact it costs big vendors, such as Amazon or Google, less money per resource than it would cost you.
How does this impact SAPM?
With Cloud computing being used so prolifically, it has affected software architecture, processes and management significantly, and will continue to affect in into the future.
Project management is something that has been affected by the rise of cloud computing. A lot of applications are increasingly calling for forms of Agile Development, and cloud based software can benefit from this to an even greater degree than normal. Software requires continuous updating; bugs need to be fixed, security holes need to be patched, and new features need to be added. In a cloud setting, this can be done much more easily, as rather than have each user download an update or patch, the developer simply updates the software hosted on the cloud and when a user uses it the software has been updated
Let’s use Facebook as an example. Whenever you load Facebook, you are likely to load a different version of Facebook from the last time you used it as it is constantly under development. New features are very frequently (sometimes to the extreme annoyance of users). Interestingly, the version of Facebook your browser loads is not guaranteed to be the very most up to date version of Facebook.
Flipped around, you could say that agile development is essential to cloud based systems, as if you have the ability to respond to user demands this quickly, and don’t do it when a competitor does, you will instantly be at a competitive disadvantage. This was less the case when software came packaged, as the user had already bought the software, however under a pay per use model a developer must keep their product competitive at all times.
One limiting factor in the past for many projects was that they needed a large up-front investment to get them off the ground, whether this be due to having to physically package and ship their product, or having to plan for worst case loads on a web based system.
With the ability to provide software as a service, the up-front investment on shipping and packaging products has vastly diminished, enabling to such projects to go ahead. Projects which previously had to plan for worst case load scenarios can now take advantage of the elasticity offered by cloud vendors to offer their services without having to expend money for resources which will be under-utilised.
Challenges to the Software Engineer
Software engineers now face many new challenges when working on cloud based projects. Firstly, it is typical for cloud based software to be accessed through a web browser. This in itself poses a challenge to developers, as it reduces the number of tools at their disposal.  explains this well: ‘The traditional window and menu layer of modern operating systems has been fine-tuned over decades to meet user needs and expectation. Duplicating this functionality inside a Web browser is a considerable feat. Moreover it has to be done in a comparatively impoverished development environment. A programmer creating a desktop application for Windows or one of the Unix variants can choose from a broad array of programming languages, code libraries, and application frameworks; major parts of the user interface can be assembled from pre-built components. The equivalent scaffolding for the Web computing platform is much more primitive.’. This is an ongoing challenge for developers.
Additionally, developers now need to build their software to deal with the infrastructures used by cloud vendors. This involves handling failures in hardware, and building software that works well in a distributed environment. This had led to the rise of new architectural patterns, such as Google’s Map-Reduce architecture.
In conclusion, cloud computing has had, and will continue to have, a big influence on the area of software architecture, processes and management.
 A View Of Cloud Computing. Michael Armbrust, Armando Fox, Rean Griffith, Anthony D. Joseph, Randy Katz, Andy Konwinski, Gunho Lee, David Patterson, Ariel Rabkin, Ion Stoica, and Matei Zaharia. 2010. Communications of the ACM 53, 4 (April 2010), 50-58.
 Cloud computing. Brian Hayes. 2008. Communications of the ACM 51, 7 (July 2008), 9-11.