20 years working on the same software product
159 comments
·February 21, 2025palata
hiAndrewQuinn
>I hate that everything today is a website and requires a ridiculously fast internet connection. And what seems to be in fashion for "desktop software" today is to ship a website together with a whole browser and pretend it's not a website.
Earlier this week I cobbled together a tiny, totally self-contained pocket dictionary between Finnish and English [1]. It's a TUI, but I tested it on Mac and Windows and the program works perfectly fine there -- double clicking on it just pops open a little terminal for tsk to do its thing in.
The first bit of advice I got when posting it online to my usual places was "Why not make it a normal GUI program, or better yet, use React?" While I did briefly consider it, it really seemed like overkill for the very simple problem I was trying to solve here, and it might balloon the ~30 MB exe to >100. To be fair, I have negative interest in monetizing this kind of thing.
palata
> it really seemed like overkill for the very simple problem I was trying to solve here
Usually people throw heavy frameworks at simple problems just because it's easier, not because it's needed.
I like a lightweight TUI a lot better than a huge ElectronJS app.
DrBenCarson
Yes and most engineers building GUIs professionally use those frameworks day in and day out so they’re just very comfortable with using them
Independent of the implementation, people build GUIs to make the functionality accessible to a LOT more users
hermitcrab
You buy a perpetual licence for version N. You can then optionally upgrade to version N+1 later at a 60% discount.
lotsoweiners
The best business model.
beached_whale
I am also ok with one like Jetbrains where you subscribe and after a year you can keep the last version you paid for. They do a lot of updates, so the money is going into the product but one isn't forced to stay in order to use it.
dehrmann
It's not actually that different from the subscription model; the interval is just longer. At some point, you'll upgrade your computer and find the old version of the app no longer works, and you'll be forced to upgrade. Depending on how quickly the app evolves, you might prefer the subscription model so you can follow new how-tos, and it can be more reliable since developers are only supporting a few versions out in the wild.
I'm not saying you need to be on the bleeding edge, but if any part of your personal tech stack is older than ~4 years, it'll start to have problems, and you're going to be left behind.
null
palata
Do you have a lot of people buying upgrades? Still wondering if this market is not full of people who buy it one time for their wedding :-).
thinkcontext
Probably wedding planners are the biggest customers.
hiAndrewQuinn
I especially like this if the 60% multiplier becomes 60%² at N+2, 60%³ at N+3, and so on. Feels like you're getting rewarded for hopping on early.
hermitcrab
Too complicated. I charge the same for v5 -> v7 and v6 -> v7.
_kush
The most common model I see these days is a lifetime license and one/two year of free updates with it. Once your free updates are over, you can keep using the last covered version forever, or purchase another year of updates for a discount (20% to 40% off of the original license price).
This has 2 advantages:
- You can buy the additional updates whenever you want in the future so it's leaner than a subscription.
- It also makes sure you get at least 1 year of updates, as opposed to unknown time period of updates when the licenses are tied to a major version.
skinner927
I am fully aware how much more performant native desktop applications can be compared to the “let’s ship a browser” popular alternative.
That said, do you, or anyone else who often makes this (fair) complaint, have any experience writing native desktop applications? Have you ever tried to implement drag and drop, animations (like accordions), modals, gradients, and custom elements? Not to mention, GPU acceleration.
I can only speak for Windows and Linux, but the native APIs are atrocious. The frameworks for these native APIs are cumbersome and inflexible. Styling is, without a doubt, the most complex part. It’s all so complex that shipping a browser + an api to talk to the host is easier.
andrekandre
> Have you ever tried to implement drag and drop, animations (like accordions), modals, gradients, and custom elements?
not to sound like a salesperson but its not too hard in (apple) appkit [1] using cocoa and core animation [2](and all of this is even easier in swiftui especially animation and styling [3])
[1] https://developer.apple.com/documentation/AppKit/drag-and-dr...
[2] https://developer.apple.com/library/archive/documentation/Co...
koakuma-chan
You have to own a MacBook though.
lazypenguin
You are right, building a good UI for the desktop has become exceedingly difficult. In my experience new UI toolkits try to mimic the web experience (kivy, QML, Slint, Flutter, etc.) and end up being threadbare with the simplest widgets available. In my opinion, every new UI toolkit since QtWidgets/WinForms/Delphi/WPF/Win32/Gtkmm era has missed the point. The desktop is a power tool and requires powerful widgets. Virtualized lists, data grid with complex interactions, drag and drop, OS integration, modals, background tasks, docking windows, etc. A toolkit that puts a slider, some text and buttons on the screen doesn’t solve the harder problems and the web browser will run circles around that workflow. Easier UX can be built in anything really. Until there’s a desktop app framework that solves the hard problems in desktop UI dev then desktop will languish and hard stuff will continue to be hard.
ogoffart
I'm developer of Slint and I'm glad to see Slint mentioned. I want to clarify that we're not trying to mimic the web. We have a great vision for the desktop integration, but we unfortunately have limited resources. Our team is fairly small and we are mainly working with paying customers to pay the bills, which are mostly in embedded space at the moment. I agree with your points, and while there’s still a lot to do, I hope Slint can become a strong option for building powerful complex desktop applications.
gmueckl
You found the reason why Qt is popular.
nikau
Call me a boomer, but I preferred old apps that had a consistent interface instead of all the random wheel inventing.
riffraff
I don't recall a single time I thought "gosh, I wish this app used an accordion". But custom controls, e.g. the table-and-chair view in TFA seems a sensible thing to have in specific apps.
jeremyjh
If you use Qt, like in TFA, then you don't have those issues. You use a markup language for layout if you want, javascript if you want, C++ if you want.
mixmastamyk
Don't style it, please. I chose my system theme for a reason.
codelion
That's a really good point about the complexity of native desktop development. I've definitely felt that pain trying to wrangle native APIs for even simple UI elements. It took me a while to figure out how to get smooth animations working in one project.
On the other hand, shipping a whole browser feels so wasteful, especially for smaller apps. I've been experimenting with Tauri recently, which uses the system's webview. It's a nice middle ground, and the performance is noticeably better than Electron from what I've seen.
rvz
> Makes me nostalgic of desktop software. I hate that everything today is a website and requires a ridiculously fast internet connection. And what seems to be in fashion for "desktop software" today is to ship a website together with a whole browser and pretend it's not a website.
Funny isn't it? These days developers experienced with building typical desktop software are being asked Leetcode hard puzzles to find the most optimal solution on the first attempt.
Yet when they are hired most of them choose what I see as the most inefficient (in both memory, disk space and runtime), suboptimal and very low quality software as the "solution". When I mean "the most" it really is the worst solution possible, which is all these Electron based "desktop apps" which is an entire browser rebranded as a "desktop app".
It is even laughable that those who believe using a faster language when using Electron would make it more performant. This has never been more further from the truth as the worst-case performance still applies as long as you are using Electron.
SWEs not being able to build (native) desktop apps or apps that don't use a browser is a skill issue.
nobankai
> SWEs not being able to build (native) desktop apps or apps that don't use a browser is a skill issue.
It's a runtime issue. If developing a native app requires an expensive SDK, complex distribution agreement or multiplatform codebase, any rational software engineer will choose to ship once and run anywhere. Anything else is a waste of time and money unless management dictates otherwise.
Electron will be king until shipping native interfaces is as equally accessible as web development.
TeMPOraL
> Anything else is a waste of time and money unless management dictates otherwise.
Management won't say otherwise because management relies on what software engineers tell them, as it's the job of the engineer to consider quality, reliability and operational efficiency, and advise management on the tradeoffs involved. An engineer can choose to not pick the cheapest possible option.
Your "rational software engineer" instead sounds more like someone that's happy to go with substandard solution that's bad for the user and bad for the entire field of software engineering (the more it's used, the more it's normalized), and then hide behind greedy management and penny-pinching beancounters.
People sometimes wonder if software wouldn't get better (boy technologically and socially) if software engineering was a licensed profession. Well, we don't deserve to be licensed professionals, because we've abandoned respect and loyalty to our field, and became just "professionals" in the cultural sense of doing cheapest stuff the fastest and dumping all externalities on customers (on third parties).
tonyedgecombe
Native apps don't require an expensive SDK, it's free on all the main desktop platforms.
They also don't require a distribution agreement (as long as you aren't putting them in an App Store).
It's really not that hard, Fork is a great example of a cross platform app with a rich UI developed by just two people.
zoom6628
This. And I live in hope that WASM runtimes can address some or all of this one day.
fuzztester
>And what seems to be in fashion for "desktop software" today is to ship a website together with a whole browser and pretend it's not a website.
yeah! shipsters
/s
ugh
pmkary
Makes me so happy to see people like this exist. All good software, really all good software, is indie small ones made with love and care whose authors also lived a good life outside of the cubicle mess. (I know about the exaggeration, but really, 95% of what I love is indie software, you don't find that kind of creativity and love in any company)
bnastic
There are a lot of small companies / single devs working in very technical, pro-oriented, industries. They still thrive in the days of browsers and javascripts and what not, writing super optimised, super inovative, native code.
Like all the 'audio plugins' people that essentially write .so's that go into the big desktop audio workstations, doing anything and everything with sound, while also experimenting with various UI/UX paradigms, unrestricted by what's possible in the DOM/CSS, integrating hardware into it all etc. (I imagine similar in the video/rendering industry, but I'm not too familiar with that side)
p3rls
it's true, you can always tell a product that is loved from a product that grew up without it.
i'd add as a caveat that your users probably will not be able to tell the difference and it will break your heart if you care about these things too much.
Tossrock
Spacemonger is this to a tee.
emeril
yeah - I'm sure Everything by voidtools is precisely that
huevosabio
> I was getting married and I volunteered to do the seating plan for our wedding reception. It sounded like a relatively straightforward optimization problem, as we only had 60 guests and no family feuds to worry about. But it was surprisingly difficult to get right.
Man, this sounds way too familiar!
piker
Great read. This was particularly funny.
> A mock-up of PerfectTablePlan, including icons I did myself, was used without our permission by Sony in their ‘Big day’ TV comedy series. I threated them with legal action. Years later, I am still awaiting a reply.
piker
Also worth noting that a more detailed write up of the business elements would likely go down very well here!
hermitcrab
Author here. Since you asked. This TV comedy included a plot point where some wedding planning software was shown to lose the seating plan. The wedding planning software was clearly a mockup (probably done in Powerpoint), but was clearly based on my software - even including icons I had created. I thought I could get some free publicity from it. I talked to a lawyer friend of my father's and he told me it would cost hundreds of pounds to do the research to even send them a legal letter. It was the early days for PerfectTablePlan and I didn't have that sort of money. So I just wrote my own letter demanding a public apology. I'm still awaiting a reply, nearly 20 years later.
kevindamm
The JD in the signature of that kind of letter usually amounts to more weight than the content, regardless of whether the wording was perfect and the research duly diligent.
ryandrake
Funny but kind of sad. If it were the reverse, and The Little Guy used Sony's IP without permission, 20 Sony lawyers would come down on him with the ferocity of a thousand gods and destroy his business. It sucks how much the legal industry serves the rich and is effectively only accessible to the rich.
gwbas1c
Yeah, I'm really curious how the author was able to get the kind of sales needed to support a family.
thfuran
So they called his bluff.
jwr
Now compare the longevity and sustainability of this software product to VC-funded startups, which are more like blips on the radar before they disappear by going bankrupt or getting acquired.
Having multiple people in a company does not guarantee that it will stick around. People saying "but it's a one-person business, I can't trust it in the long term" are wrong.
louthy
> People saying “but it's a one-person business, I can't trust it in the long term" are wrong.
The problem is: people aren’t immortal. That one person could be dead tomorrow. So, you can’t trust any one person business in the long term, by definition.
xp84
Depends on what level of trust you need to have. Obviously you can’t even trust a multibillion-dollar public company like Google to keep maintaining a product forever, or even for a couple years.
On the other hand, someone selling a stable piece of desktop software doesn’t even require a tremendous amount of trust. Just the trust not to ship malware or massive security holes. Even if they fully retire and delete the source code, your software will keep working. That’s more than I can say for Google reader, or the Humane AI Pin.
tonyedgecombe
At age 59 there is a 5% chance he will die in the next year. What's the chance that your enterprise SaaS is going to get canned in that period?
cfn
When he dies, if not before, he or his family can sell the business. There's even websites/communities where you can post this kind of business for sale.
chgs
The software will still work for years even if his who family is wiped out in a plane crash.
A saas product will die when the credit card bounces a couple of months later.
keepamovin
It's all just mindgames bullshit to get you to accept worse terms, or ignorance. Your characterization is right. VC boosted products are sometimes like shit crops sewn in bad soil but laden with chemical fertilizer to force growth. They might have no fundamental strength.
fuzztester
y
see: our incredible journey
side note: after I typed "our incredible j", and then in this very text box, mind you, not even in Google, the full word "journey" popped up as a choice for me to select.
shows ...
fuzztester
here you go, downvoter dude (we can guess you're from one of the types described below, or aspire to be, meaning the startups that gets acqui-hired, and dumps their users ):
https://www.gyford.com/phil/writing/2013/02/27/our-incredibl...
https://ourincrediblejourney.tumblr.com/post/89180616013/wha...
raziel2p
nah I just don't like your writing style.
mezod
Living legend! Lifestyle biz bootstrappers ftw.
Since I cannot ask you your actual ARR, can you answer if you believe it's feasible to reach high 7 figures/low 8 figures in ARR as a solopreneur over a long period of time? I don't mean 1 year $10M ARR AI trendy apps, but a consistent $10M ARR business year after year >20 years.
hermitcrab
I can think of 1 solo bootstrapped founder who says he is doing ~$1 million dollars per year. But he is an outlier.
The more sales you make the more admin/sales/support overhead there is. Eventually you reach a point where your sales plateau or you take on staff to keep growing.
jwr
>$300k ARR is definitely doable with a B2B product and it lets you live comfortably in most places in the world without worrying about money.
I think >$1M ARR is hard, you need an exceptional niche (high margin, low support load, easy marketing) and luck.
I can't see a >$10M ARR happening for a solo-founder business. At least not for my business niche.
Bear in mind that growing a SaaS takes time and it's a multi-year project.
sgerenser
I'm sure its possible, but I'd be very surprised if this particular product (due to being fairly niche, and one-time purchase vs. subscription) was earning > $1M ARR, let alone $10M. But I could be wrong!
aqueueaqueue
Yes. Not me, but check out indiehackers as they show stripe-verified revenues.
hermitcrab
But not their expenses? Revenue != Profit.
aqueueaqueue
Most of these businesses are software as a service so it is mostly profit. There will be some hosting and marketing costs sure.
Unlike startups they are solo operated and usually won't hire people unless they can really afford it an need it.
101008
Excellent read. I was happy for the author while I was reading it, looks like it was and still is an amazing journey.
By the way, some engineers are dream with working at FAANG, others to create a million dollars startup. My dreams was always something like this: work on a niche piece of software that solves a problem for a subset of people. Give them a something that avoids a headache for them, deliver value, and get paid. You aren't going tonbe millionaire, but it's going to be a nice ride.
eikenberry
I wish there was a job site for people like us. I'd love to be able to find a job at a small, niche company like this.
jwr
Thing is, many of those niche companies are single-founder businesses, where founders do not want to hire employees. Many reasons, not necessarily financial: in my case, I just got tired of dealing with people and their issues and decided I want to depend only on myself.
So, jobs of this kind are rather scarce.
Also, in a tiny business, the founder will usually be super-efficient and productive. Most employees are not. There is an impedance mismatch: a hired programmer will talk about the latest and greatest JavaScript framework and the need to rewrite everything in YaddaOfYadda, because that's what the World is doing these days, while the founder will think about the benefit for the users (usually none) and the immense costs (in terms of money, bugs, and time wasted).
Because of all this, it's not very probable that you'll find a job at a niche company like this.
eikenberry
It doesn't have to be as tiny as in the article, but more just a small, bootstrapped company with a good niche to serve. These sorts of company should be very common and jobs at them should be plentiful (due to number of shops, even though each would be small), yet they are nearly impossible to find. I bet they have an equally poor time of finding people. Seems like an under served market.
losradio
I accidentally many years ago fell into a job where I worked on parking automation and fee computers for parking garages, airports, cruise terminals and rental car agencies. It’s a niche but fledgling industry. Not many people know how much software runs parking garages and the like. It didn’t pay very well but the firmware was written in Turbo C and the GUI portion was written in Borland C++ Builder 5 with Delphi. There is a surprising amount of sensor integration with inductive loops and sensors from gates, etc
I tried to create some modernized software at that company with a License Plate Inventory application product using C#, VB .Net, SQL Server, SQLCE (for Windows XP Embedded) and ActiveSync. We sold a hundred copies of it.
palata
Some niches can be very big, too! It's perfect when it's small enough to not be interesting for BigTech, but big enough to pay a few up to a few hundred employees!
hermitcrab
Indeed. Software is mostly written by young white men for other young white men. Consequently there are loads of under exploited niches, while all the 'sexy' niches are incredibly competitive.
fph
I don't understand where gender, age, and ethnicity come into play in this.
palata
I don't understand the downvotes... I think it is true that there are under exploited niches, probably in fields that most developers aren't familiar with.
achillesheels
Emphasis on ride.
El camino es mejor que la posada.
jebarker
+1 this is the dream career!
tasuki
> A well known wedding magazine ran a promotion with a valid licence key clearly visible in a photograph of a PerfectTablePlan CD. I worked through the night to release a new version of PerfectTablePlan that didn’t work with this key.
This is weird to me on several levels.
- Why would it require "working through the night" to blacklist a key? In large enterprise software, sure. But in a one-person project?
- If past versions still work with the leaked license key, what does this solve? If someone wanted to steal your software, they'd find a key anyway, no?
[Edit]: But a very cool project and a nice writeup! I enjoyed! Good luck!
tonyedgecombe
You would be surprised how sales are affected by piracy. Making it just a little harder can have a noticeable impact.
All that stuff you read about piracy having no commercial impact is bullshit used to make people feel better about what they are doing.
lozenge
I'm guessing CICD isn't a priority on a desktop product that doesn't need to be released all that often.
asim
Kudos to you. The only piece of software I wrote was open source and could never find a way to monetize it beyond consulting and VC funding. A sustainable long term business selling a piece of software that just works is all we could ever hope for as developers.
wvenable
This post makes me nostalgic for the old Joel on Software forums.
hermitcrab
I miss Joel's writing. Erik Sink as well.
wvenable
I'm glad you're still doing well. I envy your position; I've always wanted to work on a single piece of software of my own.
I built a few things while working for startups but nothing stuck. Now I build lots of software in a nice secure corporate environment. I mostly get to do what I want and how I want it but ultimately it's not mine.
hermitcrab
Sounds like you have a reasonable mix of job security and freedom. The grass is always greener on the other side!
NKosmatos
Nice one! I would expect more versions of PerfectTablePlan all these years, going from v1 to v7 is roughly 3 years per major release ;-)
zoover2020
I find it wonderful. As the author mentions in the original post, his code does not have a lot of bugs and is mostly feature complete as well.
I think most people never get to work with such software as we need to launch $NEXT_PROJECT
ChrisMarshallNY
I’ve used (and paid for) BBEdit, for more than 30 years.
Makes me nostalgic of desktop software. I hate that everything today is a website and requires a ridiculously fast internet connection. And what seems to be in fashion for "desktop software" today is to ship a website together with a whole browser and pretend it's not a website.
I wonder how the licensing works: do people pay for newer versions? Or do people just buy one version but more people get married every year, bringing new customers? I guess it is not a subscription model, right?