The Struggle of 80/20 in Software: Why Finishing Is Not Always the Goal
My drives are full of small tools and prototypes and the like. And with a few exceptions, never published. But often that’s not the goal. Why is that?
I need to expand on this a little. Besides my actual work, I am constantly programming something or simply trying out technical things. Often it’s very simple tools that I either need myself or I want to understand how something works. Sometimes it’s just to experiment with a new API. Or someone mentions a problem and I wonder what could be an approach to it, then do a quick prototype. The reason I rarely sit down to polish is somehow the 80:20 ratio, which I find to be really cruel and also a very universal law (you know, with 20% of the effort you achieve 80% and for the remaining 20% you need 80%).
And if you do it like this, without polishing, then it’s totally relaxing and you also learn something in the process, you should give it a try.
What kind of things are these? For example, color replacements in PDF or SVG files. They work for my use cases, but to make them publicly available you’d have to support all kind of color spaces, build a elegant UI - and then do all that effort for something that might be downloaded by a handful of people in total. For all these things, there are usually x online programs and I think many people simply don’t care that they upload their data to some service and what they then do with the data (even commercially). Apart from the fact that some data is confidential and should not simply be given to third parties.
SonemixVoice - Removes Background Noise
So for example now I’m sitting on on something I occasionally also have a need for, a macOS tool to remove background noise and reverb from audio. The tool should run locally, show me where the noise/reverb is detected, allow selective application, and ideally work on videos as well. I know that with ideal production, such post-processing wouldn’t be necessary. But often I want to do the screencasts quickly and then there are tradesmen working on the balconies of the house. Or I forget to close the window. Quick screencasts simply convey certain things much faster - I’ve been making them for a long time, but it also has to be quick to create one. In other words, for me a tool like this also has to be easy and efficient to use.
I can build something like that myself. However, I need a UI for this because I want to see where the recognized background noises are. Then I could actually polish it and make it available, which I do occasionally with my side projects, but actually rather rarely. I took a quick look at it and was slightly surprised to see that one of my apps has reached 110K downloads over time, but that was from 2013, when it was much easier. If you don’t have or do any marketing behind it, the expectation that you’ll get lots of downloads even for a free tool is a totally invalid one. When you think about publishing, it starts with the fact that you need a sensible app name (preferably without name conflicts 😀) and an icon, whereby the latter can be quite fun to create.
The concept looks like this, and maybe a few more UI elements need to be added:
Bittersweet Irony: Super-Powerful Computers Often Used as Dumb Terminals
And there are certainly use cases that clearly only make sense server-based. On the other hand, there are also many use cases where it is more efficient (faster, costs less energy and the result is deterministic) if it runs locally. That’s ironic: nowadays you have these super-powerful computers and then they are essentially only used as a dumb terminals for server services. And local means: control over data that cannot be used commercially by others and no outflow of data. To cut a long story short: I’m a big fan of things that run locally.
And with the rise of AI, there will probably be even more of them. Actually it’s already the case. Soberly speaking, it very much depends on the use case. But with the hype and excitement about being able to “solve” things using natural language dialogs, these things are now being “solved” using a lot of energy, whereas local tools, I repeat that now, would be faster, deterministic and more energy efficient.
And of course, AI makes perfect sense in some areas. The motto should simply be to use it soberly (hey, work smarter not harder, anyone?). But as a study by IBM shows, this is a problem for many. CEOs surveyed report that only 25% of AI initiatives in recent years have delivered the expected ROI and 37% said it’s better to be “fast and wrong” than “right and slow” when it comes to adoption. But let’s not digress now, the study is available from IBM here.
Even More Reasons not to Finish Something
Another aspect of not worrying about the last 20% (or 30% or 40%): Something similar probably already exists, you just have to look long enough. But then you often realize that maybe there’s a little something missing that you need (e.g. applying the tool to 400 files in a batch).
So we’ve already established that it’s exhausting to finish, and as I said, there’s hardly any reward for doing so. However, there are some reasons to do it. Sometimes you want to do something that solves at least one aspect comprehensively. Sometimes it’s to work on the complete flow from start to finish so that you don’t lose your sense of scope. However, it is sometimes the case that if you had known at the beginning how much effort you were going to put in at the end, you would have left it at once. That’s how I feel about my GitChronicles tool, which is actually available from the Mac App Store.
I mean, I had created a tool with Kotlin Mutliplatform pretty quickly back then, and ok, while it only solved the rather simple aspects and no multithreading at all, I had already achieved two things: I could play around with a new technology (KMP) and then use it for part of my needs. But then I decided to start from scratch and develop it natively with all the features I had in mind, and that’s when the whole complex and laborious part began.
Mental Tricks
If you now realize that without marketing you won’t reach any distribution, the reward is really small, the idea is just a very small part of the whole, and the implementation is really tedious and time-consuming (even with AI), and you won’t make any money with it, but just want to create something from start to end: how can you approach this?
- Start small but start
- Take one step at a time
- Share your progress (with colleagues it totally fine if you don’t want to use social media) -> this will keep your motivation