Another Azure site

August 29, 2017

Big difference between on-premises and cloud development

Filed under: Uncategorized @ 12:02 pm

In an interview I had recently (been doing that a lot lately trying to find a good job) I had one person ask me “What do you feel is the biggest difference between developing for on-premises and the cloud?”   That one caught me a bit off guard as I have never really considered it before.  Is it the fact that you have so many readily available services to use?  The fact that you can scale out your code quickly and easily? The fact that you can make it instantly available to everyone in the world? The tools involved?  I was thinking of all those items when it the answer came to me in a flash.  It isn’t any of those things (at least in my opinion).  It is how you handle errors.

When you are on-premises you do everything you can to make sure that your program will not stop for any reason.  This starts with the hardware.  Your server will most likely have multiple power supplies, each of those plugged into a different circuit, RAID enabled hard disks, and more to keep the machine up and running.  Then it is up to you, as a developer, to make sure the program does not crash when encountering an error by checking inputs and uses of Try/Catch blocks (in C#).

It is different in the cloud.  First, you have no idea what the hardware configuration is for the server.  Does it have multiple power supplies?  Maybe and then again maybe not.  There is a saying I keep hearing when talking about cloud hardware:  “Cloud servers are treated more like cattle than pets.”  Meaning if one server has an issue it is just replaced.  It can be sent somewhere else to be fixed but as far as the cloud provider is concerned it is easier to replace it than fix it right there and then (I should note I do not care for this saying.  Growing up in Dairy country I know how important the cows are). In any case, if a machine has an issue there is no consideration as to what the server is doing, it will be shut down and replaced.  If your code is running then it dies (it is always a good idea to make sure you have at least 2 copies of your software running for just such a reason).

There are plenty of other issues that can happen in the cloud that may not happen on-premises.  You may not be able to access your SQL server due to network issues.  Granted, this can happen on-premises but at least you have a phone number that you can call and someone to yell at 🙂   You may also be running on a shared server and the other applications start taking up too much CPU or network bandwidth.  In any event, cloud applications need to be able to die and restart gracefully which is something that most on-premises applications are not written to do.  Of course, you still want to check your inputs and catch errors but you need to decide if an error is severe enough to just start over or continue.

Edit: As I was writing this I noticed that Jeffrey Richter release a video series called Architecting Distributed Cloud Applications which discusses a lot of the same topics

RSS feed for comments on this post. TrackBack URI

Leave a comment

© 2023 ShareBlog   Provided by WPMU DEV -The WordPress Experts   Hosted by Microsoft MVPs