Ask HN: Anyone making a living off of desktop applications?
I have this side project that has been stuck for quite some time, because I can't seem to make up my mind if I should go with a desktop or a web application. Is any single developer or small team making a living of desktop apps, and are they still relevant?
My side project is a kind-of productivity application, and my target users are not really technical people and will probably have one computer, but as I'm a "lonely" developer (working alone) I have to think about the future, and so I have to try to make the right choice on this..
It would be great to hear both successful and unsuccessful experiences made by single or small teams of developers..
200 comments
[ 3.2 ms ] story [ 239 ms ] thread> I have to think about the future, and so I have to try to make the right choice on this..
You don't have to make the right choice right now. For now, focus on getting something complete so that you can prove the idea out.
My problem is with the choice of the best frontend approach, and since I'm only one guy working on this, I am trying to find my "best" decision..
EX: File system tools, AAA FPS, etc.
Concretely, if you create a web-based API, then you can put any front-end on it. If you layer the application correctly, you can move some of the layers closer to the client as needed, adding caching for performance. If the problem is one that can only be solved through a desktop application, then the whole question was moot to begin with.
I've seen enough Excel-spreadsheets-as-million-dollar-business to know that the only thing standing between you and your completed product is yourself, especially when you have technical skills to actually do the work.
In my experience, this is pretty much the same thing as being unable to change your mind.
Get a product out and then figure out where you could have done better.
That's a good place to start. That's 80's and 90's best practice, though. (Most of the industry is stuck in this mindset, to be fair.) I'd say the 21st century version of this would be to structure your code in such a way that transformation tools can be easily applied.
They who dodge the manual rewrite -- those are the real gurus.
I'm just trying to encourage OP to finish a product and we've gone pretty far from that starting point with this discussion.
Finishing a project and the number of large-scale manual rewrites tend to be negatively correlated.
We had no choice technically-we need to use audio APIs on Win/Mac to get our job done.
Based on my experience, I would not recommend building a desktop app unless there is a technical reason to do so.
Data storage, building installers, signing your app for target OS's, and dealing with auto-update are all technical problems that I'd prefer to avoid if I could. Building cross-platform code is also a pain and, while totally doable, will slow down a team that is not familiar with it, I think.
If I really needed to build a desktop app in the future, I'd investigate building building a headless app that hosts a websocket, and use the user's browser to connect to a localhost websocket to communicate with it. (i.e., a technical choice freeing my from Qt)
[1]https://gumroad.com/l/ADWm/tasktopus
The problem is that I know how far I can go with Qt Widgets, but on the same way, I would like to build something more "modern" and Qt Widgets may be quite limited..
My advice - just do it :-). If you want to build a cross-platform desktop app then go for QtQuick/QML/C++. QtCreator has a bunch of example projects. Use those as reference. The Qt docs are solid. Worst case - you will learn that Qt/C++.
I am not a big fan of PyQt/PySide, especially when starting fresh with Qt - you would have a hard time figuring out how everything fits and where the issues are.
[1] https://github.com/papyros/qml-material
Paraphrasing a previous comment:
I have used web-based task/todo lists (trello, asana, etc.) but I wanted something that could be used offline - my work does not allow storing company sensitive data on 3rd-party servers.
Started the project with Electron, using AngularJS and Angular Material. That allowed rapid prototyping with a slick UI and it was fairly easy to find additional Angular-based plugins. My main motivation in selecting Electron and Angular was to learn the two technologies (easier to learn something by doing a project in it). Screenshot: http://imgur.com/NZzEFKX
Had a few issues with the Electron app - big download size (50-70MB zipped), no print functionality, app felt non-native, very convoluted process to get it published on the Mac App Store.
Decided to change the tech stack to Qt/QML. I have published C++-based games, built on Cocos2dx. Wanted to try Qt to build a serious app.
Gumroad has been a slick experience - I have opted for the fully functional trial option and let the user buy a license to use beyond the trial period. Gumroad's onboarding (buy workflow) and tech (license key generation and validation) have been a revelation.
Atm we use a mix of QtQuick/QML and some widget code mainly when wrapping QtWebKit it for some parts of the app furniture that need it.
Although the guts of our app requires native code (for clipboard monitoring and websocket message receiving), were considering ditching much of the UI in favour of a webapp.
So when you browse to our site via the desktop app, certain OS-only features turn on.
So it made a bunch of sense to use QtWebkit. I welcome the switch to QWebEngine though, if for nothing else in the hopes that the underlying browser code gets a update and the app will hopefully then feel more responsive.
Note that the LGPL version of Qt doesn't contain everything the commercial version does. But there isn't a lot missing.
My application must draw one SVG chart, and the SVG support on Qt is quite bad although I can render my SVG there..
We do have a tray icon too, though.
We didn't make a living out of it because we wanted to keep it as a hobby project but it paid out well enough to be considered a small business.
I don't have any advice on whether your app should be a desktop or web, it all depends on what is the app, who your users are, where are your users using it, what are your competitors, what is easier to develop, etc.
All I can say is that desktop apps can still be profitable in recent years, but I can't say it will be profitable for your project.
We are team of two: I am sole developer and there is another person doing sales, support, training and all the rest of stuff.
- running Paradox in network is quite difficult. Whole database was written in 80s before things like tcp/ip was thought as a good thing and all the networking part was hacked inside and it shows. Because of weird architectural choices made 20+ years ago I am not able to migrate out to sane database without rewriting whole application. (250+k lines of code)
- BDE could be quite unstable in various scenarios and you spend quite a lot of time fiddling with memory space, memory size and other variables to make it work.
Can this functionality be separated out into a different process, or called from a DLL compiled using Visual Studio?
The big problem with legacy software without huge user base and limited space for growth is that it just don't make sense to invest huge amount of time and money in it.
Reports are added as an afterthought. Then the resulting spaghetti code patterns are replicated cut & paste, where they then slowly melt into surrounding code in a way that makes them impossible to extricate. After some years, it then becomes obvious that reports are the primary driver of value for those clients.
My big problem is I have so many code paths that I can’t fully test the interactions between the different modules and functions (there are over 10^25 different possible paths). I am not sure what can be done about this given the functionality of the software is critically dependent on this flexibility. The best I have been able to come up with is testing 99.99% of the most popular paths and building in a lot of error recovery code.
Interesting. Have you considered the pros and cons of writing a custom fuzzer for your app, and whether it may help?
But don't all those paths depend on the inputs, ultimately? Trying to understand this here. Can a fuzzer that generates lots of different inputs, not be used to exercise all those paths?
How big is the EXE?
Currently I am also doing some freelancing (iOS apps) and run my other tiny software company.
Starting this partnership is actually funny story: one day I seen an ad which says "Looking for programmer" and there was no other information or text, no company info nothing. At that time I was product manager with big team reporting to me and I feel quite unhappy, missing my days as a programmer, waking up at 5 am to do some coding for fun. I seen it as a sign, so I just replied, quit my job and the rest is history.
IMO, if you think you'll ever have edge cases where users might struggle to stay connected to the Web, think about doing a desktop app - but even then, consider using eg Electron/QTWebKit/similar so you can continue to use HTML.
The only situation I would shy away from using the HTML/CSS/JS approach with new general-purpose PC-centric applications is supporting older hardware - I like my apps to remain snappy, but sadly even Webkit tends to lag (generally speaking) on anything older than an i3 or so.
But when you see normal folks totally confused because the developer decided to "upgrade" their experience in a way that was totally out of the users hands, it can be cringey.
I will admit that I far prefer software that runs fully locally; if I don't like the direction a particular program has gone, I can either just use an older version.
And I do also find it jarring to open an app and be met with some new layout or design, or discover a new feature buried in a menu that wasn't there before. It would be really nice if app design was at the point where we could go "okay, here's a bunch of new features, click this button to switch over!"...
Do you really think users will be doing Photoshop and AutoCAD in a browser? No matter if you have a fibre op connection, the lag is always there.
Recently the main player in this domain moved to Web apps. There was an overwhelming protest from its customers, who insisted they prefer the desktop version.
I don't think this is the case. Facebook never needed desktop apps, did they? The web worked great for them.
On a side-note, didn't Facebook just release a new UWP app and didn't they regret going the HTML5 route to start with (not focusing on native apps)?
https://www.onshape.com/
and as a Photoshop replacement, you have things like :
https://pixlr.com/
And yes, there are people using these online tools.
Also if you are offloading stuff to the cloud you need low latency.
The beauty of AutoCAD was that it was designed for power users only. The learning curve was almost vertical...but to me, that's the true sign of a powerful application. Fortunately, I had a high-school drafting class and then took a class at my local community college...having a real-life instructor was invaluable. It was exclusively designed around a "one hand on keyboard, one hand on mouse" stance, but you could do _everything_ from that position.
Once I got over the the initial learning hump and most of the commands became second nature, I could work almost as fast as I could think. I was working on something like a 500Mhz PIII running Win98, and I cannot remember it ever lagging or crashing while I was working.
But the most important thing to me? Since it was a desktop app, it had 100% control over the keyboard and mouse inputs.
I miss that level of user/machine interface...Every. Single. Day.A couple of days ago I went to an administration worker at a university and asked her to help me with getting the vpn to connect to the net via university wi-fi. She told me to google the vpn to download it. I said: well, this is the very problem, I want to connect to the Internet, I cannot google it while I'm offline. People no longer distinguish between the address bar and google search, searching for files on your local drive or looking for them online. It's become one blob of "computer stuff". And you might think that when we moved from command line in DOS to Windows that was creating a new kind "stupid user". There is the next level, certainly.
1. You can package your web app into electron or similar 2. You can use a portable platform like QT or Xamarin
But more importantly, you should chose the one that will help you conclude that this is a good idea sooner. You'll probably end up rewriting the tool once you get feedback about where it rules and where it sucks.
So I'd say that unless you want to do that side project to learn something new, stick to what you know best (and what you know will work). That'll get you to the point where you can decide whether this is worth pursuing faster.
I'd add while mobile seems to be the trendy place to start a startup, most productivity apps are still easier and faster to use with a keyboard and mouse. So desktop-first can make sense sometimes.
Rule of thumb #1: if you can build the same application for the desktop or the web, choose the web. Don't think more. My company does Windows drivers and some other operating system internals stuff that is impossible to offer as a web app and this is the reason I can't follow this rule.
My last suggestion is trying to attach your app to other revenue streams such as trainings, customization, integration with other apps, and any other service that make you escape from selling individual (and probably cheap) units of your product.
One thing that makes me want to stay way from web is that if this thing does not work, I would like people to continue using the application, even if I don't update it anymore. If it runs on a server, I will not be able to stop the server until everyone stops using the application for some time. I know some people kill services without thinking too much, but this is a very small niche and my name is relatively known there..
The other reasons of wanting to stay way from web-only is that then I have to take care myself of everyones' data (think application data, settings, etc.); front-end web developments is a pain for me (too many options, none good) as I'm mainly a backend developer; and then there's the latency problem.
As I think I said above, my application is something like a productivity application, where everyone does his own thing and there's no intrinsic need for "social" or "sharing" things. The only reason I can think for web is discoverability, hence my doubts, if "discoverability" beats everything else (for desktop apps)..
Again, I think it is very difficult to attack the desktop market even if you target a niche market for end users. Enteprises uses are a different story.
One more thing if you insist: look at the OSX desktop market too because the dynamics of the end user consumption are different from Windows.
Definitely, even more as I develop primarily on a Mac.. Thanks!
If it works well, then plan for the upgrade circus, or if your market allows it, subscriptions. If it goes south and you get tired of it, just release a final free "sunset" edition.
[1] http://thehorcrux.com/
Check it out: http://esotericsoftware.com/
How do you handle patches for prior games into your workflow (i.e. long-term maintenance)? Do you build up an issue queue and then work on patches in between major releases?
I have tested SAAS but have seen that:
* People trust a desktop app more. * People value a desktop app more as they feel they "own" it and will pay more
YMMV
How are you shipping the application to users without Qt or Python installed? Are you using something like cx_freeze?
Subscribed, rooting for your project.
It is for a rather small customer group but still works great and is growing modestly.
In my experience the customers expect a subscription based pricing especially with an application that required high-frequency updates (I release a new version once or twice a month).
If I go the desktop way, I will probably use Qt (PyQt5) so there's some degree of freedom for cross-platform.
- no update process
- support is easier, because you don't have to dig in the users specific setup
- monthly subscription model might be easier to accept for people, if they don't have the feeling of "owning" the software like with traditional desktop apps
- no multiple platforms (although people want apps, but at least, you don't have to also provide Linux and OS X versions)
Disadvantages:
- no offline mode (some people want that)
- some people want the feeling of ownership and privacy
I think as a one-man business, it's easier to maintain a web app than a desktop app.
Whether to go desktop or web really depends on the application itself. Don't try and shoehorn it into one or the other. Ultimately, you'll need to find the right niche. Like in most industries, most people will fail (you usually don't hear their stories) and success will most likely not be immediate.
Doing things solo is tough so some general advice:
- You are going to be wearing many different hats but if you can afford it, contract out what you don't do well (like design, for many programmers). - You have fewer resources but also a lower bottom line. Don't expand without taking that into account, not just for the moment, but for the long term. It will affect how desperate you get with your revenue model. - Don't undercharge (especially if you go desktop). As mentioned, people still appreciate the value of desktop software.
Probably a lot more but those are the main ones plus I have support emails to deal with.
This is incredibly important advice! Marketing & actually finding customers is the hardest part of the business, so if you only need a few customers, you'll be way ahead of the pack.
I know someone who is selling a Photoshop Plugin for $100 and seems to be doing okay from it, even though that's more than the price of Photoshop Elements itself! If your product is valuable enough to your customer, they'll pay for it. If they're earning $100/hour & your product saves them even two hours of work, it's a no-brainer.
> ... plus I have support emails to deal with.
Don't forget this when considering your pricing. Some percentage of your customers will always need support, and you need to account for all those 15 minute blocks where you're helping people. If you're selling a $2 app, a single support email wipes out your earnings from several sales.
Choosing this tech stack lets you postpone web vs desktop app decision and keep both options open. While recurring web app revenue sounds appealing it requires servers and responsibility to secure user data. With desktop app you'll never receive a 3am call that your service is down.
Btw. Subscriptions and desktop apps are not mutually exclusive. We give both options (one-time license purchase or monthly subscription) to our customers and the split is about even.
Then if you decide later you want it to be a web app its not that big of a job to convert it.
I have worked on a surprising number of desktop apps over the years, including Visual Studio and Internet Explorer. But even before that, a lot of businesses rely on desktop applications for a lot of their internal applications.
[1] https://twitter.com/successfulsw
[2] http://www.perfecttableplan.com/
[3] https://successfulsoftware.net/
For me, a successful desktop application has the following traits:
-- A nice specific vertical that is deep and complex to process,
-- Complex entry screens with lots of necessary rules and data validation,
-- Lots of manual data manipulation during the events,
-- Substantial benefit from ability to take advantage of desktop level mouse and keyboard actions,
-- Some complex grid based screens that can be tailored by each user,
-- Fairly complex reporting after the events.
These requirements are still too much for browsers to handle well. The grid based screens are especially horrible in browsers. And browser apps are still pretty horrible for complex data entry screens that want to be customized by the user.
That said, I'm porting the first to a mixed mode where the engine will be internet based but the primary interface will still be the "normal" download and install desktop model. This is to allow some portions to be used in a browser, but the main application still keep the full desktop power.
FWIW: my original apps were Delphi based, but the language long ago stagnated and had become tedious (comparatively). Since I'd switched to .NET for contract work, I started my rewrite in C#. But but I ended up hating the server deployment crap with .NET and also of got really tired the direction Microsoft is going in general. I've now switched C# for the desktop side and Google's Go language for the web/model portion. I picked Go primarily for the trivial single executable deployment. While I don't really get much enjoyment out of coding in Go, it is eminently practical for this type of work. (Note for Gophers: I don't think Go is bad either ... just sort of there. I do use it quite a bit these day and do get the "fun vs practical" trade-offs the Go team made.)
But the future may be bleak with Microsoft moving to an app store. Why the F do I want Microsoft sitting between me and my customers. It adds no benefit to me and provides no benefit to my customers for a portable or unzip and go desktop application. Plus they, like Apple and Google, want to become effectively the worlds most expensive payment processors.