There is no doubt in my mind that the Cloud is one of the biggest operational shifts in the enterprise today. Businesses have always demanded speed of delivery from technology professionals. I am sure the reader has experienced some of the demands placed by businesses to provide agility and speed in bringing products to market. Cloud Computing brings to businesses the agility they demand and helps reduce capital expenses by minimizing the spend needed on technical resources up front. These days, with public clouds such as Azure or AWS, companies can quickly ramp-up proof-of-concept solutions for greenfield projects and scale that application out as the need dictates. Furthermore, with open source software available freely and programs like Microsoft BizSpark, building software solutions that run in the Cloud with licensing cost next to nothing is all but impossible.
To take advantage of the agility that is the promise of the Cloud, Platform-as-a-Service (PaaS) should be in front of mind. In traditional data center scenarios, we tend to think about software components and packages as separate entities to be installed and configured. That has worked well in the past. However, to move quickly from application construction to deployment, the pieces needed to create the application must be readily available. Think building blocks or plumbing pieces that are ready to use on demand. In the traditional route, the Network Operations team is generally tasked with the infrastructure and maintaining the pieces that an enterprise needs to operate. In the Cloud scenario, the Network Operations team is a third-party vendor providing the cloud infrastructure. Does this mean that the Network Operations professional is now obsolete? Not entirely and I will leave that topic for a separate post.
So, going back to the main topic. What impact does the Cloud have on software architecture in the enterprise? Software Architecture is now front and center in the enterprise. Why? The utility model of the Cloud makes it very easy for businesses to decide quickly if an application is worth keeping around or not as they see the spend each month on keeping the application running. In the traditional data center scenario, estimating the cost can be difficult. The business can look at factors like gain or loss in productivity or revenue to determine the continued utility of a software solution; however, it does not give them a true accounting of the cost of hosting an application since the budget has already been spent on purchasing servers and data center equipment using estimates based on current consumption organization-wide. Current consumption also generally takes into account licensing cost per year for technology pieces such as database servers, ERPs, etc.
Earlier on I made reference to PaaS as an important facet of software construction in the Cloud. To satisfy the business needs of testing new ideas and markets, software professionals need to understand that in order to meet this demand, time spent configuring and installing pieces of software for the entire solution is not productive anymore. There is still a place for this type of software construction. However, with time, it can be expected that most of the automation in making technology building blocks readily available will have been done by Public Cloud Operators such as Microsoft or Amazon. This has a huge impact on how the architecture of a solution is conceived. The biggest impact is on performance of the application since the Cloud is a shared utility model.
Now more than ever, there is a need for Software Architects to establish best practices and take stock of the cost of technology design decisions. Designing for the cloud is different than building an application that will be hosted in your data center on servers you control. Simply put, in the Cloud, you pay for every minute your application is running. In the business world, this translates to a visible sum that can be attributed to the cost per customer or employee using the software hosted in the Cloud. It also means that for Software Architects, trade-offs should be considered carefully as not all clouds are created equal either. The rule here is that you cannot manage what you cannot measure. Therefore, understand the impact of that bandwidth consumed or the disk space usage of that database you have hosted out there.
Another point to keep in mind is that all resources are shared and depending on the data center you choose, your application performance will vary. So measure, measure, measure and keep a running log of your applications performance over time. Azure has some tools built-in that will help you with this task. Since you can scale globally with the Cloud, it is tempting to setup your application in every data center offered by a public cloud operator. My recommendation, resist this temptation unless you already know your audience and can justify the cost of scaling to that level.
If your enterprise has no legal roadblocks to move to the Cloud, then the Public Cloud is a good place to get your feet wet and test out those enterprise applications. For Microsoft shops, moving the applications to Windows Azure is a no-brainer. Sign-up and you can start taking advantage of Infrastructure-as-a-Service (IaaS) and PaaS features of Azure. If you are not sure your application will run in Azure and you have some servers available, try out the Azure Pack and validate your deployments. If you want to connect your applications in Azure to your data in your corporate network, Azure brings VPN capabilities to the table as well. Good luck and I would love to hear about your successes in the Cloud and the choices made to cloud enable your enterprise software architecture practice.