In my previous blog, I wrote about cloud-native applications. About the joy of creating your own cloud infrastructure as a developer. One question, however, is not very enticing in these days of ubiquitous cloud solutions:
Does our new application really need to be completely Cloud-native?Not many people
Dinosaurs vs astronauts
I once helped an architect with an application that could be classified as a ‘tool’. This tool will help a few users with specialized knowledge to make their lives easier. So no more writing scripts in a complex management application, just a small app performing just the required tasks. The front-end would be Angular and would ideally run in a Docker container in the cloud. Of course, the application had to be secure, protected by the clients Active Directory. During a meeting with infrastructure architects, we discussed networking and single sign-on. Passing credentials to a database backend while supporting multiple authentication providers was quite challenging. That is when the dinosaur in me woke up.
As I looked at the requirements, I wondered if we could also create a simple desktop app’ I replied, ‘Not every app needs to be a WebApp’. It would make integration in the complex ‘Enterprise’ cloud environment a lot easier. If developed properly, users could just install the app by copying it to their pc. And when logged into a domain-joined Windows PC, that would already solve one security requirement. Ignoring my Jurassic proposal, the discussion continued about Kubernetes .
From disadvantages of desktop apps…
Naturally it makes sense to develop many applications with a web front-end. Users have to install desktop applications. Next, there is updating to be done (which can also consider be considered an advantage of desktop applications by the way). Typically desktop applications are Windows only and not cross-platform. They make changes to your PC configuration. And they are not sexy for front-end developers, which can also present quite a challenge in todays job market.
… to solutions and advantages
We can resolve many of said disadvantages nowadays. Yes, you have to install desktop apps. But we have come a long way since DLL Hell. So most of the time there is no reason not to have a simple XCOPY install. The user does not need administrative rights to update, which makes updating even easier.
Desktop apps also don’t need hosting. Even with a small number of users and small-sized resources, there are monthly costs involved in maintaining a web application.
Securing access to the application and integrating it in a corporate network are easier on a typical desktop.
The cross-platform challenge is perhaps a bigger issue. Users are spending less time on in Windows desktop environment as Linux, macOS and mobile platforms become more popular. So, when developing a desktop app intended for more than a few Windows users, it would be very nice to be able to build cross-platform. With .NET MAUI there now is an option to explore. In addition to WinForms and WPF, this gives us more choices for Windows. And cross-platform of course sounds much sexier than those two 😉
Microsoft lists some technical advantages of desktop apps as well.
As you can see, developing for desktop is great for many reasons. The technology is mature and time tested, the development cycle is fast, the debugging is powerful and arguably, desktop apps have less complexity and easier to get started with.Microsoft
The reasons Microsoft outlined here perfectly explain why I often write a desktop app when I am asked to write a small application quickly. Not every app has to be a WebApp
Not every app has to be a WebApp
Some recommendations when creating your next app for desktop:
- Think of your application as if it were running in a container: keep everything needed in one folder, and don’t put any configuration in the Windows registry
- If needed, make your app cross-platform. .NET Core does it well, but don’t forget to work around Windows specifics like timezones as well if it must run on macOS or Linux.
- Treat your desktop front-end as if it were a web front-end. You can create an API backend that a desktop client consumes.This makes it easy to add a web front-end in a later stage as well.
In my opinion, this list contains enough modern solutions to transform this desktop dinosaur into a desktop astronaut.