Ask HN: Anyone making a living off of desktop applications?

137 points by jventura ↗ HN
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
This type of analysis paralysis will kill your project.

> 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.

separation of concerns. Just write the logic in a fairly portable language.
I do have it in Python! I've successfully build some frontend experiments with Android (http://joaoventura.net/blog/2014/python-android/), Web (with Flask) and Qt (PyQt5 and pyotherside).

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..

Generally, if it works as a website use that. Desktop apps are for things you can't do with a website.

EX: File system tools, AAA FPS, etc.

It's not about making the ultimate right choice. It's about not getting trapped in a dead end, or in a situation where you can't change your mind.
There is virtually no dead end corner that the OP can paint him/herself into. They could pick literally any language or approach, platform or format, and create a successful business from it. The risks come from not being able to _easily_ make changes, but those risks are mitigated by the choices you make in developing the software, at an architecture level, using proper design and weighing out the realistic possibilities, not the universe thereof.

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.

The risks come from not being able to _easily_ make changes

In my experience, this is pretty much the same thing as being unable to change your mind.

If you are a developer and good at what you do, you will layer your application to buffer against changes. If you aren't then just write the code the best you know how because building a business AND learning how to be a good coder at the same time is not the most efficient path. That path is littered with constantly rewritten, half-finished, failures.

Get a product out and then figure out where you could have done better.

If you are a developer and good at what you do, you will layer your application to buffer against changes.

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.

So you understand my point.
The code architecture "win" is always to dodge the big manual rewrite. The "lose" is to have to do the big manual rewrite. People make it into a game of ideological purism, but really, it's as simple and pragmatic as just that.

They who dodge the manual rewrite -- those are the real gurus.

Being a guru and finishing product have close to 0 correlation. It doesn't matter how you would've/could've/should've done it if in the end, you didn't do it.

I'm just trying to encourage OP to finish a product and we've gone pretty far from that starting point with this discussion.

Being a guru and finishing product have close to 0 correlation.

Finishing a project and the number of large-scale manual rewrites tend to be negatively correlated.

Obviously people still are, or else commercial desktop software would no longer exist/be maintained. Not being snarky, just saying it's a non-question (and that our company certainly is a "we do" response to your post).
I believe OP would like to know about solo operations or very small teams, side-project-sized operations.
We have a desktop application that uses QtWebkit for the UI.

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 for using a wrapped-web stack approach. We've recently taken another look at the Electron/NodeJS/WebSocket stack - it allows you to build a native app using web technologies, even calling native (WinAPI) calls. This space has really come a long way recently.
Hi, if I can ask: "why QtWebkit instead of Qtquick?".
+1, I'm wondering if anyone is using Qt Quick for productivity-like desktop applications?
I built Tasktopus[1] using QtQuick/QML/C++. Highly recommended. I built it on the LGPL version.

[1]https://gumroad.com/l/ADWm/tasktopus

Can you comment on your experience? One of my doubts is if I should go the QML / Qt Quick Controls way or the standard Qt Widgets (with PyQt).. For instance, do you think you could implement your app's interface with Qt Widgets by itself?

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..

I could have implemented it with QtWidgets, however I had found a decent UI widget library that suited my use case very well ([1]). Hence went with QML/QtQuick.

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.

We (copycopy.com), do.

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.

We have a website presence too, and the website UI (as visited in a normal browser) is 95% the same style and functionality as the desktop app.

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.

For anything-QT that is commercial you need pay and it's not cheap for small teams.
Is QtQuick commercial? No GPL version?
IANAL but if you're making commercial products you need pay for QT. You can use GPL etc if you're doing open source I assume.
Qt has both commercial and LGPL licenses. I think you can develop commercial applications with LGPL and not distributing the source code of your own app, but you can't statically link to Qt's libraries. https://www.qt.io/qt-licensing-terms/
IIRC some of the newer libraries are being licensed under GPL (unless you pay for a commercial license of course)
That's not correct. You can use the LGPL version of Qt to develop commercial product without paying for a license and while keeping your source proprietary. You aren't allowed to statically link Qt under LGPL, but that isn't a big deal.
Does the LGPL deal with the fact that you actually pull in a lot of Qt code in the form in header files into your actual compiled binary?
Yes, my understanding is that including headers is not a problem for LGPL. If it was, LGPL libraries would be useless.

Note that the LGPL version of Qt doesn't contain everything the commercial version does. But there isn't a lot missing.

Do you have the frontend entirely made in HTML inside the webview, or it is just a small component?

My application must draw one SVG chart, and the SVG support on Qt is quite bad although I can render my SVG there..

The frontend is all HTML inside of the webview.

We do have a tray icon too, though.

There are still financial desktop applications. Some old school people insist on using them.
I can understand some people not wanting to send sensitive financial data across the web.
I've published a desktop Windows app before with a freemium strategy. It was developed by a team of 3 after hours.

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.

I make living off desktop app in construction industry. The app is 21 years old and is still written in Delphi 5. I still actively maintaining it and it runs fairly well on modern Windows OSes, but there were some low level problems in recent years.

We are team of two: I am sole developer and there is another person doing sales, support, training and all the rest of stuff.

What are the low level problems you have been running into?
Three main things: - memory space for printers and sound cards changed in Vista, so when you have some constellation of printers and you change the printer in dialog whole program just crash, because it is trying to touch restricted memory or something.

- 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.

Three main things: - memory space for printers and sound cards changed in Vista, so when you have some constellation of printers and you change the printer in dialog whole program just crash, because it is trying to touch restricted memory or something.

Can this functionality be separated out into a different process, or called from a DLL compiled using Visual Studio?

Probably not: the application has around 100 printouts (with tons of spaghetti logic behind it making it impossible to count all variations) and it will be very hard to switch to new reporting framework.

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.

This is funny. I saw the same pattern in Smalltalk apps: Reports being the locus of spaghetti code.

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.

Ugh, this. Have you had luck escaping that hell?
I knew enough to keep myself away from those projects.
Yeah, I tried to migrate out of that mess into other tools and it ends up as even bigger mess. Now I do have three different reporting systems in three different technologies (QuickReports in Delphi, code that generate HTML code from inside Delphi code and then XQuery based declarative code that can be customised by (/for) customer) and I ended up in even deeper hole.
Thanks for the explanation. A lot of my code is getting old (just like me), but I was lucky in that it was designed from the start to be cross platform. This ended up meaning that it was written in C and all the platform specific code was kept as separate modules.

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.

>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).

Interesting. Have you considered the pros and cons of writing a custom fuzzer for your app, and whether it may help?

I actually have written a custom fuzzer. It has been really useful in chasing out bugs caused by improper handling of corrupt files, but fuzzing won't help solve the combinatorial coverage problem.
>possible paths

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?

Not when you have 10^25 paths to cover and each path takes around 2 seconds.
> (250+k lines of code)

How big is the EXE?

6 mb for typical binary, but there are around 10 different exe files compiled from this codebase, most of them overlaping and sharing big portion of functionality.
Let me know if you need help. I belong to a network of Delphi devs that can join your cause. Cheers.
Is this the only app you maintain on daily basis? How did you get this client and how did you start this software?
Hard question. I am working on this software for almost 10 years now and there were times where I was working on it fulltime, there were times I was also working on numerous other apps and businesses, and also two years when I basically quit the tech industry to focus on wine making, but keep working on this app for couple of hours a week just because I don't want to let my business partner down.

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.

Great serendipitous story.
From a desktop-application standpoint, the Web provides something very useful: easy upgrading. Like, you go to a URL, and if you aren't seeing the latest production revision of the site code, that's a bug.

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.

Yet the same feature can be a pain in the ass as you don't control your upgrade destiny. I know, I know, git orf mah lawn!

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.

Yeah... that's very true too, I hadn't considered it from that angle.

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!"...

I do, but I use a SAAS sales model. I think trying to use a one and done sales model is hard these days.
Yes, I am thriving with a niche C++/Win32 graphics app. Web apps are a long way from having the responsiveness and control of a desktop app.

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.

> Web apps are a long way from having the responsiveness and control of a desktop app.

I don't think this is the case. Facebook never needed desktop apps, did they? The web worked great for them.

But they have a native mobile app where the FB main consumption happens.
I don't think you can compare the way you use Facebook with the way you would use AutoCAD or Photoshop...
Maybe not for those cases, but a lot of apps aren't as demanding as those. So I don't think you can say in general that the web can't compete with desktop apps, maybe only just for specialist cases. The web is good enough that it didn't stop Facebook becoming a billion-dollar company. Mobile is a different matter, but think on desktop how many services are fine to work web only on desktop with no desktop app (especially if they have a mobile app).
Depends on the audience and the application. As Photoshop and AutoCad are both mentioned, I think that's the benchmark and not something like Facebook that wouldn't benefit as much from running as a desktop client.

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)?

They were fine for years without any kind of desktop app, and the HTML5 backtracking was just for mobile. I don't think they ever said they regretted being web-only on desktop from the start. In fact I think it is even a big reason for their success - would Facebook have taken off if it had an installer?
Well, as an autocad replacement you have:

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.

OK, yes, people use those. How many people actually use them as replacements for the tools you mentioned? Are they practical alternatives, or "alternatives" in the sense that Gimp is an alternative to Photoshop?
Onshape is much closer to a cloud version of Solidworks than to a cloud version of AutoCAD.
You don't need a fibre connection to run JS client side...
You do to get simulations working properly.

Also if you are offloading stuff to the cloud you need low latency.

Right, but you can't write intensive algorithms and procedures in JS, because it would be very slow, you have to move those to the server side, which incurs the network lag.
Ahh, AutoCAD...the desktop app that pretty much _ruined_ me for all future applications. The first application that I ever used to actually create something new, before I even really learned to write code.

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.

  No accidentally closing a tab or refreshing the page.  
  No browser updates f'ing with my right click menu.  
  No scroll-jacking.  
  No zoom-jacking.  
  No shortcut-key overlap with plugins (looking at you, 1Password/google docs)
  No input lag...EVER.
I miss that level of user/machine interface...Every. Single. Day.
Oh, the future. The land of what ifs. Listen, you described your market already. Non technical people go to Google and type in facebook.com. A simple desktop app that they can just click will do. Still worried about future proofing it? Put it inside a webview and move on.
Off topic - googling facebook.com drives me nuts.

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.

The whole UI/UX has been app-fied. The most common device an average person uses has a touch screen interface. Writing on an address bar is old. Google is now their personal assistant and facebook replaced their tv.
There are many ways you can actually not ask yourself that question.

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.

That is the tricky part, is that I know how to make web apps (used to work as backend web developer), desktop apps (did my fair share of them), and can also play a bit with Android (did some small experiments and patches for Cyanogenmod). It seems that I just need to commit to something and work from there..
Our startup develops a HTML5 game editor called Construct 2, which is a Windows desktop app (Win32). We've been running about five years successfully with that. I'd say depending on the market it can still be relevant, but I don't know for how much longer - Windows in particular seems to be trying to drag developers away from Win32 and the new Windows Store UWP apps. Note that Windows Phone and "Windows RT" can only run Windows Store UWP apps, with poor support for Win32. MS continue to push UWP hard and I'd expect to see more MS hardware in future with no Win32 support, which is a little worrying, but doesn't seem to be happening fast enough to cause any kind of panic.

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.

One of my two small companies develop Windows development libraries for use in desktop and server applications and I see the native desktop apps doomed, except if you are targetting the enterprise (best in niche markets) and you know how to sell to enterprises.

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.

The application that I want to build is for a niche market (but not for companies), that is why I am in doubt between desktop and web.

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)..

How long will it take to develop your desktop application? If it is just a few weeks or very few months go for it and test the market. If it doesn't work after spending some marketing efforts move away. Indeed nobody can predict your success.

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.

> 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 is not for work and you are not sure, go desktop with pyramidal approach (don't plan for upgrades, just include them, so that everyone has the latest).

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.

I've been developing Horcrux Email Backup[1] over the years. The application had to be desktop by the nature of it. I'm not a living out of it but it is a very good side income. Given the fact that I live in a third world country helps too.

[1] http://thehorcrux.com/

Very nice programme, that saves a lot of bacon. Please keep it maintained, I beg you.
I'm making video games for PC, Mac and Linux (like this one - http://store.steampowered.com/app/386900), it's a very traditional release cycle, I work on a project for x months, and then I release it, moving onto the next game after a few weeks of post-launch support. PC games are generally seen as more valuable than mobile games, so I don't need to sell a terribly large volume in order for me, a single developer, to make a living.
Mind sharing your stack?
Not at all. Unity is the engine I use, these engines are immensely valuable to developers like me, I can't invest years into building my own stable core right now, and although it has its rough edges and problems, it suits my projects very well. Builds to all sorts of targets, too. For my latest project I'm using the FMOD middleware for positional 3D audio. On the graphical asset side of things, I paint everything in Photoshop, and animate it in the amazing animation software Spine (which has an open source Unity runtime).
+1 for Spine. Will literally change your perception of what's possible in sprite animation and illustration ;)

Check it out: http://esotericsoftware.com/

Oh man, Spine is amazing. The latest 3.0 release has some great new scale features, and the fact that you can browse all the runtimes on github and submit patches is just the best. And the community is great too, lots of support on the forums, and bugs I've reported were fixed in days. So yes, Spine is absolutely worth the investment.
>> [...] moving onto the next game after a few weeks of post-launch support [...]

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?

That's exactly how I do things. I'm very glad that by distributing digitally, it's incredibly easy to roll out small fixes that are applied as incremental patches, so I don't tend to 'save up' for major updates. A benefit that comes with a stable engine is that it's already been tested on a wide variety of hardware, so most of the issues I fix are very rare gameplay bugs.
Hi , Can you tell us how you are rolling out patches to your unity client. As far as I know unity doesn't have an inbuilt updater. But there are few plugins on the unity asset store which do that. But they don't cover all scenarios.
As I sell mainly on Steam, Steam handles the updating, it works out the diff and updates the files that have changed.
(comment deleted)
This game looks awesome! Thanks for sharing.
When you say "make a living" - how does that compare to a "typical" US developer salary/benefits - say around $120K total compensation? (and yes, I know that's far below a SV total compensation, but you wouldn't have to live in SV for this kind of lifestyle business).
Just to keep your expectations in check - I work for a major games company in the UK as a C++ programmer and make 25k pounds/year($36k USD). US salaries are an abnormality.
$35K is what a decent developer in India would make. So, your UK seems too low.
Much of the games industry is incredibly low-paying. I felt fairly fortunate to have worked in my 20s for a good game company (where I was paid OK, learned a ton, and we eventually had an exit to Sierra), but I feel like most of my peers at other companies were working for terribly low pay and often under poor management.
GDP per capita in India is $1,498.87 though
As a web developer I frequently get offers for 50k+ in UK you are seriously underpaid
I only see 50k+ offers in London though, and I have no intentions of moving to London. I also don't think it's entirely fair to be comparing web developers to C++, I would say I'm an advanced C++ programmer but I would need to learn how to do web development from scratch, it's not like I can pick up a web development job and just get on with it.
Writing advanced C++ code is more difficult than writing node.js code for sure imo. So having a /2 salary for the most difficult option is meh. I have also had these offers from companies outside of London (don't know about rural areas OK). I think you should research a bit because I really think you are taken advantage of mate.
My first job when I graduated outside of London was 30k. You are seriously underpaid.
I'm still in college, and and an Eastern European country (where the average wage is around 550$). And I still make > 20k USD per year. So yeah, you are underpaid.
That only shows that you are being paid extremely well, not that I am paid poorly. To say that I am underpaid you would have to say - compared to what? To people doing jobs that have absolutely no interest to me? I like my job, I genuinely enjoy it. The money is enough to allow me to live very comfortably. If I lived in London, it would have been a different discussion - but out here, it's not bad at all.
If you don't mind saying, what sort of area in the UK do you live in, where 25k pounds/year is a good salary?
North east. My partner makes 30k(as a web developer, no less) so together we can easily afford to rent a 4-bedroom house, have 2 cars and save enough to get a mortgage soon. On top of that having a job that I really enjoy is just icing on the cake, really not complaining.
Refreshing attitude! Nicely put. Midlands here, and while I always want more 'stuff', reality is I'm quite steady. Still, happy to try new projects a few times a year just in case.
$120k in just salary is common for a regular developer with 3 years experience here. Not even SV
Steam is cross platform right? Would it be insane for me to develop an Enterprise application on the Steam platform?
I sell desktop software to individuals (not business / industry) at a cost of $50-$100.

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

I'm just launching a file manager (https://fman.io). In general I'd say use web / SaaS whenever possible. If you do go with desktop, you may be interested in a blog post I just wrote about the technologies we ended up picking: https://fman.io/blog/picking-technologies-for-a-desktop-app-....
I read your blog and it seems that you have something similar to my case, at least as technologies are concerned. I also have my business logic in Python and one of my ideas is PyQt (or Qml through pyotherside).

How are you shipping the application to users without Qt or Python installed? Are you using something like cx_freeze?

I haven't fully decided yet but was thinking of using py2app. I have to see.
Very good idea, if you can pull off what sublime did to text editors, then take my money :) I'm still using Total Commander, but I definitely see the need for a more focused app that help my directory browsing habits.

Subscribed, rooting for your project.

Very cool. Subscribed. Waiting for a decent alternative to FAR Manager.
For more than 3 years now I am making a decend full time income with a desktop cross browser testing application ( http://www.browseemall.com)

It is for a rather small customer group but still works great and is growing modestly.

Very interesting case of subscription based desktop application, am I right? How do you manage things such as a person being offline, do you require the person to connect to the internet so that you can manage the subscription? How does your users react? Have you already started with a subscription-based approach?
Generally people will need to get online to get the latest version (which is necessary frequently to get newer browser versions). During this time the licence is also checked.

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).

It really depends on the usage of the application. What does it do? What features does it provide? What are the requirements of those features? You may need to consider a hybrid app, that has both a desktop component and a web service. If you can implement one or more of the features as a service, it will allow you to update them more easily. Also, keep in mind that a desktop app limits your install base to an OS, depending on its implementation, while an HTML5 application can be run almost anywhere.
For my application there's no intrinsic need for "social" or "sharing" features. It's supposed to be a productivity application where each user does his/her own thing. The target user are mostly non-technical people which probably will not have the need for have it on more than one device, so "sync" of data between devices may not be a relevant for them..

If I go the desktop way, I will probably use Qt (PyQt5) so there's some degree of freedom for cross-platform.

I run a web app and am happy with it. Advantages:

- 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.

Solo developer of a productivity app for the Mac for quite a number of years now. Yes, desktop apps are still very relevant and at least on the Mac, plenty of people willing to pay good money (unlike, say, the mobile market).

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.

> Don't undercharge (especially if you go desktop).

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.

Our desktop app Pinegrow Web Editor (http://pinegrow.com) is build with HTML / JS / Node.js packaged with NWJS/Electron. Three years ago I started by myself, now we're three working on the app full time and making a comfortable living (mid six figures in yearly 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.

I love pinegrow (paying customer).
Holy shit, that's a nice app. I have many (adult) students who would greatly benefit from its simplicity, any way to get a discount/promo code for them? You can reach me at my username @ gmail.com. Edit: this isn't a strictly "educational" setup - these are corporate students, not academic.
I'm not sure why it bothers me, maybe I'm just grumpy this morning haha, but I might have preferred "Enter your email for a free trial" rather than being forced to do it after I've already downloaded and installed and run it and can't use it.
Try making it with Electron http://electron.atom.io/

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.

I have a couple Windows desktop apps (animal husbandry and event management) that have been around for years and still doing quite well. But I think these succeed primarily because they have a nice specific vertical and are particularly well suited for desktops.

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.