Home-cooked software
Software developers will sometimes run into problems and, if they have the skills, will develop personal-use software to fix them or work around them. As usual, the thing itself is not new, but terminology matters. Robin Sloan posted An app can be a home-cooked meal
in 2020 and the term somewhat stuck. In the last couple of years, Maggie Appleton
and Karan Sharma
pointed out that AI was about to enable a lot of home-cooked meals apps. I think they were mostly right.
Karan miscalculated in thinking that non-technical people would want to build software. Even if building software that suits your needs can be done without learning technical skills beyond typing to an LLM. This is a fairly common mistake for engineers to make, especially if they don’t hang out with or talk to people outside our techie bubble. Maggie got that one closer to correct, I think. However, while a lot has been written about the supposed ability of non-programmers to program, not that much has been said about how it can extend the abilities of those of us who already have technical knowledge and help us get out of our silos.
To give a personal account, the vast majority of software I developed for myself before LLMs got good was automation scripts, CLIs or at most TUIs. Occasional efforts to go beyond that were made , but I already spend ~40h/week making software and there’s a limit to how much time I want to devote to this over everything else. I have the same problem with UI work as I do with prose: I have more taste than skill . Having to suffer from bad UI and being unable to improve upon it is a fairly frustrating experience.
Enter LLMs. All of a sudden, making something that works without devoting much time to it became possible. While I understand where the ‘coding was never the bottleneck’ people are coming from, they are factually incorrect. Even more so for personal projects. To get a bit ahead of ourselves, one of the apps I’ve made is a read-it-later app. Before LLMs, I’m pretty sure I could knock out a first version of the back-end in Ruby in a few hours here and there over a weekend. Hono (what I ended up going with) would take a bit longer, but still in the same ballpark. Making the Android app to a point where I would be happy switching to it would have taken months. With LLMs, I had the first version working end-to-end in less than a week.
I’m probably pickier than average when it comes to software, but I notice bugs 1 and hostile UX in the vast majority of apps I use. Beyond that, some things are not necessarily objectively bad, but I have no use for them, so they just add bloat and take up screen space for something I will never use. Most software engineers I know have always had a hubristic side which makes them, upon finding buggy software, humbly declare “wow, this is terrible, I could make something better in a weekend”. Truth is, for a slice of the functionality, that may very well be true, but the issue with software is that we don’t work in slices, we work with highly complex systems, and adding a new feature is rarely as easy as coding up that feature in isolation. Simply getting rid of that complexity enables leaner, more performant, more usable software.
Anyway, the whole point of writing this up was to say that if you enjoy well-made software that fits your use case exactly but aren’t willing to put infinite time into recreating it, we’re living in a golden age and you should take advantage of it. This is a list of things I’ve been building, with a short history of the motives:
- Florilegio . Pocket closed down. Raindrop mostly did the job but had small annoyances, which got too much one day. Runs fully off the Cloudflare free tier, but I’m fairly certain I could make it self-hostable in an evening. It’s single-user and it doesn’t have article extraction or highlights. Which is great because I never used them!
- revisa . A fast diff viewer with great syntax highlighting.
- integritas . Like hashdeep but faster and with some flags added to fit my backup data integrity checks better.
- scry. An Obsidian vault viewer. Instead of syncing to my phone, I just sync to a Raspberry Pi and have this serve it with a nice and fast UI.
- upnext. A Youtube Watch Later replacement. Powered by yt-dlp, saves playback position, speed, allows very powerful sorting… Everything Youtube has been missing for years or gated behind personal data access.
- feeds. A feed reader. I moved to Feedly when Google Reader closed, but their web site is more bloated every day and their Android app is unusable. I had been using FeedMe, but the sync model makes it frustratingly slow to use. So I built a well-behaved fetcher, rules powered via expr that can hide entries for a feed, or automatically send certain entries directly to upnext or florilegio, all with a UI that feels instant to use. Easily my most-loved app now.
- trackr. A family media tracker (like Letterboxd, but private, and with tv shows).
- games. A client-side game hub: 2048, minesweeper, queens… all the mindless games I get drawn to. But fast and working fully offline. Fun fact: the original 2048 is behind Cloudflare so it doesn’t work when there is a football match in Spain.
- memos. A simple note-sharing app. Sort of like Google Keep but feels instant and with better UX.
- A period tracker for my wife that doesn’t bury her under thousands of ads and sell her data.
The fascinating thing about our LLM age is that, while ambitious features seem to be shipping faster, I keep running into bugs of the sort I never used to run into. Things that you would hope someone would catch before deploying. Oh well. ↩︎