If you want to see what a blank stare looks like, start talking to a developer about “deployment” and “environments.” We app developers don't want to deal with the minute details of environments. We just want to code. "Hey man, it works on my machine." should be included in the signature block of every software engineer's email. In our minds, if an application works locally, then it is on DevOps to get it to work everywhere else. So, you might ask, “How does this work for smaller companies where the engineers wear all the hats?” Well, these people have to plan, code, test, and deploy their own applications. That is a hard job for any one person, but there are plenty full-stack developers out there working at startups, small businesses, or woefully out of touch large companies. For these developers, there are some amazing tools to help them with this task. However, they do need to more effort in during the planning phase to get the most out of their time; this is where cloud development comes in.
Cloud First Makes Sense
Cloud infrastructure should be the go-to for most applications these days. The benefits of hosting an app in the cloud by far, outweigh any negatives. Still, there is a push against cloud app development and while I have to admit there are valid arguments against developing in the cloud; I just can't see those arguments winning against resource planning. A common mistake many business owners or stakeholders make is developing an application on-premises without even considering the cloud. Then, sadly, finding out six months after launch that there is some serious technical debt accumulating. Trying to maintain and scale your application can get expensive very quickly and inevitably one day your team will all be in a meeting and someone will say "Well what about moving to the cloud?" It really does make sense to let someone else (we like to let Microsoft take this one on) worry about the hardware, environments, connections, downtime, maintenance, etc.
Developers and the Cloud
As a developer, I hate the word "environment", to me that usually means one thing, bugs. I am not a development operations manager. I don't know all the different landscapes. I know how to write code, and that is what I should be spending my time doing... or so I think. Companies should not be paying developers to do much more than, well, develop. However, some businesses don't have this luxury they have a small handful of resources, and they have to lean on them to handle out-of-scope tasks. The cloud gives these developers the tools that make managing DevOps tasks easier and less of a headache. Microsoft's cloud platform, Azure, makes juggling these jobs so much more palatable. I had little experience with development operations, and when I stepped into the Azure suite, I was able to stand up SQL databases and web servers within fifteen minutes. Thus, the cloud allowed me more time for writing code, which is what I love.
Using the Cloud is a Business Decision
Up to this point, the title of this post could have been "Why Dealing with DevOps Sucks for Developers". However, I want to be sure to make the point that building in the cloud is a good business decision in general.
Let me take you through a scenario:
You are a small business owner, and one of your developers has a revolutionary idea for an app. He brings this idea to the decision makers in your company. You are all excited. Now, you walk into your engineering department and layout the plan, break the application up into small agile (like how I squeezed that buzz word in?) pieces and everyone starts hacking away at their keyboards. Fast forward four months and it is now time for QA and testing. Everyone checks in their build to the on-prem test.awesomeapp.com server. No bugs (yeah right) hooray! Now it is time to publish this AMAZING APP onto the self-hosted (on-premises) www.awesomeapp.com server and mobile.awesomeapp.com. It is Sunday night; the app officially launches tomorrow morning at 8 am. No one can sleep. First thing in the morning you drive to work with high hopes, stars in your eyes, and butterflies in your gut. As you pull up to the building, you see fire trucks everywhere. It is 8:05 am. It looks like your servers overheated due to traffic and melted down, taking the entire building with it (ok I know, exaggerated.) No one took into account the amount of traffic your app would get. Or on the flip side, maybe your company over thought it and over purchased hardware for this project. In that case, 8 am rolls around, and you have a bunch of quiet servers that aren't being utilized because your AMAZING APP isn't as amazing as you thought. Now you have all this hardware and nothing to do with it. And hopefully, a light bulb is turning on... The Cloud (Echo, echo, echo).
No More Guess Work
Cloud development takes the guess work out of prepping your application. Suppose you decided to build your AWESOME APP using the cloud. It saves you the financial dice roll that you have to take if you are keeping everything on-prem. Say your database is performing fine, but the servers can't handle the traffic, well no need to build new databases just add some more servers. All this is handled so seamlessly with Azure. You are literal clicks away from scaling from 100 to 1 million users. You also saved a ton of money in people resources. You didn't have to hire a systems architects to maintain servers; this is why cloud development makes so much sense. It’s like having an entire army at your back. If a tornado comes through and rips your building apart, your application is still running. When you need more, you get more. That should be the slogan for cloud systems. Your infrastructure grows with your application; it breathes with your application, and it is your application. Up until cloud systems, applications and infrastructure were decoupled. They had a symbiotic act/react relationship. As the application grew in popularity, the systems behind it would react by adding more. If it started to die down, then you would be left with extra unused hardware (wasting your capital). Now cloud systems merge the two worlds together. As your app grows, your infrastructure grows with it.
Microsoft Azure Cloud
The tools in the Azure suite also make managing this environment extremely easy. Like point and click easy. You don't need to have a Ph.D. in logical computation systems just to stand up a development environment. With the Microsoft cloud, it’s just a quick read of the Azure suite handbook, and you are off and away. Now, to be fair, there are some extra hurdles that must be accounted for when developing with a "Cloud First" approach. When I say hurdles I don't mean Olympic height track hurdles, I mean like those little plastic table things in pizza delivery boxes. You have to account for server changes and latency issues in your code. But these things can be mitigated through existing tool libraries. Another benefit of cloud development is access. You have access to the entire world. Microsoft has massive systems throughout the world. Say your application is a hit in Japan, well an on-premises system may have a hard time serving up all that code to your Japanese customers, but your cloud system could just be shifted to locale-specific web farms to keep things humming right along without a hiccup.
Your Entry to the Cloud is Simple
If you aren't developing in the cloud now, you should consider it for your next project. The benefits you are missing out on are numerous. Start with Azure; it is a robust and fantastic entry into the cloudy sky. The future is in the cloud – and that isn't just a marketing tagline, it really is. There are a bunch of companies out there that can help you migrate your existing codebase to the cloud so you can start reaping the benefits of the cloud right now. Hey, we do that! Give us a shout if you need some help!