It might surprise you that I spent more time on things that are not related to core functionality. 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.
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 in a window. Simple to implement as all you need is to use built-in read-only text box control.
You can toggle log window from File menu. As an additional touch, if it logs an error and it’s a dev build, it automatically opens a window.
You need to have a website
. It’s a simple website: few screenshots and a download button, but it does take a few hours to make.
It also has a feedback page,
so that people can tell me how to improve the program.
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.
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)
I want the users to get the latest version in the easiest possible way, One possible way to implement it:
To make release process smooth, you need automated build and release system.
In my case it’s a Go program that builds the software, signs it, uploads to Digital Ocean Spaces for storage, 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 this particular project I estimate I spent more time building those system than on the core functionality.
The bright light in the tunnel is:
- I can re-use 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 percentage of total development time