Cloud offerings continue to mature and improve, and can help address pains you may have in your own IT environment. Perhaps your IT budgets are getting squeezed and the monthly subscription model of the cloud is more appealing than another cash outlay for more hardware. Or, perhaps your application has problems with uptime and availability and moving to the cloud will make things go smoother.
Before you make the leap to the cloud, it’s important to pin down your key reasons for doing so, and to make sure you’re ready on both the business and technical side. A thorough project assessment will ensure that the cloud is the right option for you, and will help you realize the most value from your move.
Motivations for moving to the cloud
Spinning up new resources in the Cloud usually takes no more than a few clicks and a few minutes. Contrast this with the time it takes to allocate new resources either via requesting virtual resources from a traditional IT department or acquiring and provisioning new hardware, likely on the order of several hours to several weeks.
Cloud options are low friction and can help your team move quickly. In the past, this easy resource allocation was cause for concern for companies worried about runaway spending, or IT departments wanting to maintain some level of control. When creating new resources is easy, they begin to seem infinite—infrastructure (and therefore cost) can begin to proliferate. The good news is that major cloud providers like Azure and AWS have tools to allow administrative oversight on resource allocation while still providing teams the ability to bring up new resources in a self-serving manner.
You might be surprised to see reliability on this incentives list given some recent high-profile service outages, like the lightning storm in San Antonio that knocked an Azure data center offline, or the typo at Amazon that took its S3 storage service down for several hours. High reliability is absolutely achievable using the Cloud, as long as your app is architected to take full advantage of this reliability. In the on-prem environment, high reliability entails redundant hardware, network connections, software, and support staff. Cloud-based applications also require redundant resources, but the most complex pieces are already solved for you. Recall the point about easy provisioning—redundancy, in some cases, comes down to some point-and-click setup at provisioning time.
Scalability is tough to get right for on-prem hosting. It’s likely your application has some peak load time, perhaps on a Monday morning when everyone is getting back into the swing of things after the weekend. Your systems will need to be designed for that peak load. If you overprovision, you’ll spend extra money on resources you never use; underprovision and you’ll end up frustrating users when the system is not responding or is down.
On the other hand, cloud platforms can offer easy scale with a pay-as-you-go model. Even better, in many cases, your apps can respond to usage spikes and automatically adjust computing power to compensate for the extra load. When the load draws down, so do your provisioned resources. Cost and usage always neatly align.
In organizations wishing to cut capital expenditures, the cloud can be a very attractive option. Budgets become more predictable once shifted to operational expenses. The differences become increasingly magnified as on-prem environments become more sophisticated. Even modestly-sized environments with high-end hardware such as SANs (storage area networks) and high-performance server clusters can easily reach into six figures and beyond. If this hardware isn’t fully utilized, you’ve got a lot of cash tied up in assets that are not producing a full return on your investment. On the other hand, the cloud allows you to automatically scale down resources that are not fully utilized, thereby saving costs.
Perhaps even more enticing: when an app is engineered directly for the cloud and the use case is just right, cloud can achieve a cost-to-performance ratio that’s untouchable by on-prem solutions. In this blog post, Security expert Troy Hunt describes his own web service for notifying users when their information is hacked from online services and shared in the dark corners of the web. His site handles an incredible 4+ million requests per day at a total cost of less than $100 per month. That’s amazing value at scale.
Assessing your cloud-readiness
Getting the most out of your apps requires a careful and thorough examination. The first question is always, “Should my app be hosted in the cloud?” Depending on a number of considerations—cost of migration, the organization’s stance on utilizing public cloud, existing on-prem infrastructure—the answer could be “no.” But if you’ve determined that the cloud is the best option, assessing your application’s cloud-readiness is the next crucial step.
That path may vary significantly depending on whether you are starting a greenfield (i.e., new) app or migrating an existing one. Architecting a brand new app to be cloud-native tends to be much more straightforward than adapting an existing on-prem app, however, migration can be staged over time with adequate planning. For instance, an existing app could be ported into the cloud using a lift and shift approach, first to move the app and its dependencies onto IaaS (infrastructure as a service) cloud offerings (such as virtual machines), and then slowly migrating pieces of the app to PaaS (platform as a service) offerings that fully take advantage of the cloud.
Every app is different, and every migration to the cloud is different. That’s why a full assessment of the existing application is requisite to any cloud migration project. A robust assessment addresses both technical and business concerns, uncovers any architecture issues that need attention during migration, and gives you an idea of the size of the migration effort. During this process, we’ll also evaluate your internal team’s practices and readiness for operating a cloud app.
Even apps of a modest size carry a large number of design decisions and dependencies that may need to be revisited for a successful move to the cloud. Here’s just a sample of items we’ve identified in cloud migration projects:
Server sizing: What does your existing application load look like, and what kind of cloud resources should be allocated to effectively handle the load?
Web app request routing / load balancing: If your app is multi-tenant, you expect more load than a single server can handle or you want high availability, your hosting infrastructure may need adjustment to enable routing requests across multiple server instances.
Session state management: By default, ASP.NET uses InMemory session state management. If your app must scale out to multiple servers, session state will need to be adjusted so it can be shared. Or, even better, your app could be redesigned to be stateless.
Filesystem interactions: Individual servers that back your app in the cloud can be brought online and taken offline as load dictates. If your app writes files to a local disk (for example, as part of a file upload feature), it’s likely to require some redesign to use centralized storage, like cloud blob services.
Database migrations: Cloud SQL offerings tend to have some management restrictions you don’t have when you’re hosting on-prem. You’ll want to find out if your strategy and tooling for deploying database changes in response to app updates will work for your target cloud platform.
Interprocess communications: We frequently find apps composed of multiple separate components written with the expectation that all run on the same physical server. As app components are migrated to use cloud PaaS offerings, old assumptions about hosting architecture must be revisited.
Deployment: Cloud infrastructure looks a lot different than on-prem, especially in apps that utilize PaaS offerings. Naturally, that translates to different processes for getting the app published into production.
Monitoring: You’ll also need to address this new app design in your monitoring tools to ensure the app can be effectively monitored by your IT team. You may even find you need new monitoring tools for the cloud.
Email: Easily overlooked, email may be a critical channel your app uses to notify end-users about processes. When hosted on-prem, your app is probably hooked into your corporate mail server via a corporate network. Moving the app into the cloud will almost certainly require some integration work to get your emails flowing.
Any plan for moving an app to the cloud must include a comprehensive review of your business’s objectives.
Reasons: Recalling some of the key motivations for moving to the cloud, what are the main pain points for your business? Is on-prem becoming too expensive? Are users frustrated with load times and lagging responses? Make sure the key reason for the migration motivates your effort, and that this gets communicated to all stakeholders
Goals: Piggyback on your reason for cloud migration, decide on clear project goals. What is it you want to get out of the move? Is it an improved cost structure, and what do those numbers look like? Do you want to achieve better availability and responsiveness? Again, make sure these are end-goals everyone involved is driving towards.
KPIs: In order to prove the value of a cloud migration, it’s important to know what you’ll measure. What does success look like? What metrics will you use to judge that? You might cut operational costs by X amount over a specific period, or improve load times by X percent.
Organizational readiness: If your IT team hasn’t managed a cloud application before, they are going to need some support in adapting tooling and processes and learning how to manage your cloud platform of choice. The same goes for your internal development team—especially if the app is being re-architected for the cloud. Apps built around PaaS offerings will present brand new architectures and design patterns that your team will need to learn.
Look before you make the leap
There is no one-size-fits-all approach to application migration projects. That’s why up-front analysis and planning are critical to your project success. With a thorough assessment of both business and technical concerns, you’ll gain a complete understanding of a) whether you should even migrate to the cloud, and b) what it will take to migrate or otherwise improve your application and processes needed to support it. Either way, you’ll have a plan that both technical and business stakeholders can use to align on a common definition of success, and you’ll have a strong start towards developing your project backlog.