Designing for On-Prem
We all build everything for the cloud, right?
Sometimes we get very focused on a small world, often believing that all software is some cloud-focused startup. But that isn’t accurate.
Much of software development isn’t geared toward the cloud; it is geared to on-premises hosting (on-prem for short).
Probably one of the big differences between on-prem and cloud is that with on-prem pretty much everything starts with a virtual machine (or some sort of machine). You have to buy it all the way back to the VM.
If you don’t mind owning the VM, on-prem gets pretty interesting. There are a lot of great tools out there. Many of them are the same tools we use in the cloud.
Compute hosting with an on-prem system usually results in three types of compute:
- Some form of a desktop application, probably Windows Forms or WPF
- A web application such as an ASP.NET website
- Some form of background application, maybe a scheduled task or a Windows service
File hosting in an on-prem situation usually results in these two options:
- File storage on a VM
- Storing of files on a network share
Databases are also common in on-prem situations. Companies with on-prem hosting often use some form of database and possess in-house database expertise.
Queuing is common in cloud designs but is often missing in many on-prem designs. However, there are many great on-prem queuing options. One of my favorites is MSMQ, but I haven’t used it in years. Another option is RabbitMQ.
Building a solution for on-prem involves the same principles as building for the cloud. Many of the technologies are similar, but building for on-prem often involves more effort and set up. Deploying a web application to on-prem potentially requires configuring IIS to host the application, whereas in the cloud you can pretty much deploy an ASP.NET Web application straight to an Azure App Service.
Probably one of the biggest things to keep in mind with on-prem solutions is that you want many of the same principles, but you will probably have to work a little harder to achieve the goal.