Last week I shared a screenshot of the progress that has been made on Birdie 2.0 (see below) and one person left comments on that post asking questions that I promised to answer in more detail in a blog post. He asked why I write desktop apps instead of web apps, and why I develop apps that are targeted for elementary OS specifically.

Why Write Native Desktop Apps, Instead of Creating Web Apps Which Can Run Everywhere?

The reason why I write desktop apps is actually fairly simple: I want to create the best user experiences possible. Writing a web app is not, and will never be, the way to do that. Don’t get me wrong, you can make some pretty incredible web apps, but at the end of the day the only way to provide a truly remarkable experience is to target a specific platform.

Users choose to use systems for many reasons, but perhaps the most significant reason is that they like how the system works. They like the workflow, they like how the visual elements are presented, and they like how different components work together to provide a cohesive experience.

The best apps feel like they are native to the system you are using. The best Android apps are the ones that most closely follow the Material Design guidelines and use Android-specific features like global media controls, advanced notifications, widgets, etc. The best iOS apps are the ones that follow Apple’s design guidelines and feature platform-specific features like TouchID support, App Extensions, AirPlay, Apple Pay, Notification Center support, etc.

The same applies to free desktops as well. The best apps are the ones that tightly integrate with the system and feel as close to first-party as possible. Unfortunately, creating apps that feel native to a platform means making difficult decisions and sticking with them. Picking a platform can be a tough decision. In the Linux world there’s kind of an expectation that an app will run on Ubuntu and Fedora and Arch and CentOS and OpenSuse and… well, you get the point. The fact of the matter is that each of those systems are different. The same code might run on all of them, but the experience will be muddled. Trying to make one app work in all distros is exhaustive and nearly impossible to pull off effectively. You end up having a mediocre product running on 10 systems instead of one incredible product running as well as possible on one.

I struggle with that decision from time to time. Sometimes I feel bad when I get reports that there is an obscure issue causing a bad experience for people on distro A, or icons looking out of place in distro B, or so on. If it’s something easy to fix I always try to do so, but at the end of the day I don’t have enough time to test the product under each desktop environment and modify the code individually on a one-by-one basis. I hate leaving some users behind, but if I had to do it all over again I would always make the same choices every time.

This is the bottom line: I want to make the best apps for users that I possibly can. In order to do that, it means taking advantage of native technologies and making difficult choices by targeting specific platforms. That probably means having fewer users overall, but I would rather have a smaller number of users that are happier using a more polished app.

Why elementary OS?

I love elementary OS. I love the spirit of the project and I have great respect for the technical and design decisions that have been and are continuing to be made. I truly believe that elementary is the future of desktop Linux, and speaking as a third-party developer I want to help as much as I can to make it a attractive option.

So, once again, the explanation is fairly simple: I love elementary OS, I believe in the future of the project, and I’m making apps that I personally want to use— and that means making them for elementary OS.