I wrote
SumatraPDF, a PDF, ebook and comic book reader for Windows.
It might surprise you how much time I spent on things that are not related to core functionality i.e. showing documents. Let’s call it a tax of shipping desktop software.
Here are some of the taxes you need to pay to ship a desktop application to users.
Logging
In the long term you want to be able to diagnose problems quickly and logging helps in that.
So I’ve implemented logging to a file.
I went beyond basics and implemented a way to easily see the logs without leaving the app, so that a user can copy them into a bug report.
Website
You need to have
a website. At minimum it’s a few screenshots and a download button, but even that takes a few hours to make. Then come documentation, release notes and translations.
People also need a way to tell me how to improve the program. For SumatraPDF that’s
GitHub issues.
Signing certificate
On Windows anti-virus software and Microsoft’s anti-phishing systems are lousy and often flag innocent software as malware.
You can decrease the probability of that by signing your installer and executables with software signing certificate.
Unfortunately, this certificate is both expensive and pain in the ass to buy. Entities selling them want a proof of your (or your company) identity but the rules are often bureaucratic idiocy.
Installer
You need an installer because it makes the life of your users easier.
What installer does is not complicated:
- copy the files in the right place
- create necessary registry entries for un-installation
- create a shortcut on the desktop and in Start Menu
- implement un-installation logic to delete that which has been created during installation (files, shortcuts, registry entries)
Auto-update system
I want the users to get the latest version in the easiest possible way.
The app periodically asks the server what the latest version is. If it’s newer than the one running, it tells the user and offers to download and install the update.
Build system
To make release process smooth, you need automated build and release system.
In my case it’s a program that builds the software, signs it, uploads the builds to online storage and updates the info needed for auto-update system.
The taxes add up
Those things are not hard to implement. Individually they don’t take a lot of time to implement.
But when you add it all up, for a small app you can easily spend more time building those systems than on the core functionality.
The bright light in the tunnel is:
- I can reuse most of this code in other software
- it only needs to be written once. The more time I spend on the app, the less expensive those things are as a percentage of total development time. I’ve been working on SumatraPDF for many years, so there the tax has long been paid off