Hello Maarten before a few days I searched the web for good C# blogs and came across your great blog https://blog.maartenballiauw.be/ I really recommend it for people that want to be a professional .NET developer and do not want to be suspended. It is really great that you take some of your time to answer some questions about the state of the art topic, „Cloud“. Could you please introduce yourself to my readers?

Of course, thanks for reaching out. I’m Maarten Balliauw and I live and work in Antwerp, Belgium. I’m working with JetBrains as a Developer Advocate for the .NET products like Rider – which is a great alternative to Visual Studio – and the various memory and performance profilers. Together with a former colleague at a previous job I’m building out MyGet where we have a software-as-a-service solution that allows you to create and distribute NuGet packages, as well as npm, Maven etc.

My main interest is in everything related to web and cloud, you could say if it uses HTTP or HTTPS as the transport then I’m game. Although I mainly focus on the .NET side of things, so ASP.NET and Azure. If I do find some spare time, I try to brew my own beers. Sometimes good, sometimes less but still drinkable.

The topic of Cloud has been heard for several years. More and more companies are preparing for it, is this just a short-term hype or even a non-halting development to which we as developers should adapt as soons as possible?

If you are not looking at the cloud right now, you may be missing out. I think that advice counts for businesses as well as developers. For businesses, the cloud may (or may not) provide advantages in delivery of their services. These advantages can be in cost, development speed, security, reliability, scale and so forth. As developers, we should definitely have notion of what the cloud is and even better: experience and learn it first hand – many businesses will ask for your experience with it and I am starting to see job ads that specifically require knowledge of certain technologies.

That the data will be saved at the datacenter from another company like Microsoft still produces a bad feeling for some people do you think that the worries are justified?

Like with anything, this comes down to trust and risk. Don’t trust the bakery to not put poison in their bread? Bake your own. But maybe the cupcakes there are good, so let’s get cupcakes from the bakery and bake our own bread. And maybe the bread isn’t that bad, so let’s go all-in on that bakery. As with all things, I think it is important to be aware of all security policies the cloud vendor has in place, and based on your own risk analysis and requirements, pick the best option. And that best option can be the cloud, it can be your own datacenter. As always in IT: “it depends”.

What new possibilities delivers the cloud, that in the past were not realizable? For example, for the requirement that a lot of technical resources are required for a short period of time, this could be on a release day from a computer game, or for a time-limited competition for which advertising is made on the TV?

When I first was introduced to the cloud, all I thought was it was yet another place to run our code. That is true in a large extent, but vendors like Microsoft, Amazon and Google are making their clouds much more than that – enabling scenarios that were either not possible before, or very hard to get right.

Examples could be your example of needing a lot of capacity for a short period of time: just head to one of the clouds, deploy, and one week later kill off the application again. You’ll only pay for that week of capacity, and not negotiate with an account manager at a traditional hoster. Really quick to set this up, and very cost-efficient.

That is a classic example, however. There are definitely companies that have that scenario, but does your company do a lot of these one-off campaigns that require lots of capacity for a short period of time? The big value comes from other scenarios, I think. Each cloud has their specific offerings to make certain scenarios possible.

When I was a consultant, I was hired by a company that collected telemetry from devices that were placed at their customer’s location. They had a working solution, running on just one server. Then they got acquired, and needed to make this work for more customers. Not only that: the devices would no longer be on their own network, and the existing solution was not secure enough to make this work on the public Internet. Pretty much every cloud vendor has some offering which comes with the building blocks for a scenario like this. Why spend months or years on building your own secure gateway device, when there is one you can get with just a few clicks, inexpensive and secure? Instead of focusing on that aspect of the solution, using this “commodity” solution from the cloud vendor means you as a business can focus on making your business better, by looking at things like better reporting or nice integrations with other devices, in this example.

I often hear from the Microsoft Cloud called Azure and the Amazon Cloud called AWS, is there one which you prefer, for example for a special technology like .NET?

I started out with Azure and have been a big fan since, but have also been working with Amazon’s cloud as well as Google’s. They all have their own strengths, and some make it easier to run a specific workload than others. For .NET, they all support this, although for example Microsoft Azure Web Apps do make it really really easy to host .NET applications.

Which function you would recommend a newbie in developing should test first, is it for example Azure Web Apps, and why you would recommend that?

Azure Web Apps is indeed a good place to start. In essence, it’s just a place you can upload your application and run it. It provides those basics, but if you want to level up the more advanced things are there too. Some basic tuning of the server. Integration with a Redis cache. Geo-distribution. Staging slots and VIP-swaps. It’s a good stepping stone if you are building web application and want to get excited about Azure.

Is there also a (easy) way that I can deploy a consoleapplication, which I would in the old way install as a windowsservice on a physical server?

Absolutely! Spin up a virtual machine, remote desktop into it and upload that application and run it. The question is not ideal though. You can take any workload from a traditional datacenter and move it onto a virtual machine in the cloud. But in essence, you are now just running on someone else’s computer instead of your own.

Look at what that console application is doing. Is it reading from a table in a database and then sending out emails to customers? Perhaps something like Azure Functions would be better to run that workload. Yes, the application will need a little rewrite, but it will be cheaper to run, more efficient as well, and there is no more risk that one virtual machine can go down and stop your business at that point.

So “lift and shift” is possible, but each cloud has those specific services that can do a better job at running a specific task.

If you think about the integration of Azure into Visual Studio, how hard is it for a newbie to deploy a ASP.NET Web Application to Azure, the first time?

If you already have an account on Azure, it is as simple as right-click, publish. There is some good built-in tooling that allows you to deploy web applications, cloud services, etc.

The Azure docs are quite good – they have a good starting page at https://docs.microsoft.com/en-us/azure/ where you can select the application type you are developing, and then see how to deploy it to, for example, Azure Web Apps.

And at the end a question not directly reffering to the topic: Do you would recommend a new developer to become a specialist in one topic and work more and more on that topic, or should he also concentrate on other programming languages, technical skills, design patterns which he currently does not need?

That is a great question! And one that has, for me, an easy answer. Generic technical skills and patterns are what matters first. Being a specialist in one topic should be second. But also keep in mind being a specialist in some topic is not a bad thing – there is big demand for specialists.

To give you an example: when I was back in school, I learned COBOL as a programming language. We would get programming exercises like reading a file that held orders for customers, and then generating a summary report that would list a customer, their order total, and then each single line on those orders. While I thought at the time I was learning COBOL, what I was actually learning was a pattern for reading and processing data. Whether COBOL, Java, C#, the structure of doing something like that is always going to be similar, and knowledge that I can apply in whatever he programming language of the moment is.

Another one. Right now, there is a big push towards “microservices”, splitting up your application in multiple blocks that are developed separately, hosted separately and ideally deployed separately. 10 years ago, there was a similar concept, “service-oriented architecture”. Not 100% the same, but similar enough to just read an article somewhere and know what microservices are trying to solve. So that prior pattern I learned, combined with a short news article on microservices, now helps in understanding when a customer asks something around microservices.

Does all of this mean we should not be learning new stuff at all? Absolutely not! Being a developer is continuous learning, and through learning and experimenting, you build experience. And that experience helps make it easier to learn and understand the next big thing.