30 November 2020
This is why I made Biff, a web framework for Clojure. I put a lot of time into figuring out my preferred tech stack (and building the parts that were missing). It would seem like a terrible waste if other programmers didn't have the option to take advantage of all that work. That's also why I've put so much effort into the documentation. Biff would be pointless without it.
Sometimes people bring up the butterfly analogy: if you help the butterfly out of its chrysalis, it might not develop the strength it needs. I agree in a sense; people need to be able to solve problems on their own. However, there's an infinite supply of problems, and I'd rather not force others to re-solve the ones I've already tackled.
Hence with Biff, I'm not trying to "protect" anyone from having to learn the lower layers of web development. In fact, Biff's design encourages you to take it apart when the time is right. The goal is to speed you along the path I've already taken so that you forge ahead on your own.
Code reusability is great, but we need more. You should be able to improve the software you use without releasing a completely separate artifact.
The best example of this is probably Emacs. Emacs isn't just a text editor; it's an open-source application platform. Emacs plugins can be composed together however you like. The joy of Emacs is the result of an evolutionary process that optimizes for user happiness rather than business metrics.
The "platform" bit is important. It's not enough to have open-source applications. If the difficulty of diving into an open-source codebase is too high, it may as well be closed-source. The fundamental unit of releasable software needs to be at the feature level, not the application level.
I want an open-source, pluggable application platform that enables complex graphical applications for mobile and desktop.
For a while, I've been interested in self-hosted web applications as a solution for this. In fact, that's how Biff started out: it had a plugin system that used Clojure's tools.deps to install plugins from git. A search bar displayed Github repositories which had been tagged with
clj-biff. I was planning to make a 1-click-install image for DigitalOcean so you could easily spin up your own instance on a $5/month droplet.
Although I ended up turning Biff into a "regular" web framework, I still think the self-hosting space is worth pursuing. All of the self-hosting projects I've seen so far focus on privacy, data ownership, etc—not extensibility. Seems like there's an opportunity to try it again from a fresh angle.
The way that information flows through society is highly inefficient, which leads to all sorts of problems and missed opportunities. I am convinced that improving discovery is one of the most important problems of our time. If good ideas travel further, it will impact everything—from large societal challenges, like climate change and politics, to personal issues, like career choices and parenting.
Although that quote is tailored for the demand side of information, the problem is even more acute on the supply side. This essay will not be widely read, even though it's one of my better pieces of writing. In general, when producing a good, it takes a lot of effort just to alert the relevant people of its existance. In some cases, that's a feature: I don't want more spam. But for goods that will actually improve my life, I want the cost of reaching me to be as low as possible. "If you build it, they will come" is often decried as a falsehood, but what would the world be like if it was true?
Findka will be a major step forward if I can figure out how to get lots of people to find out about it. However, no proprietary system will ever be the final step for this problem. Information discovery is far too complex and far too important for that. As I wrote previously, we need open data: if everyone used some protocol to publish data about what they like and don't like, then anyone could use that data to build search engines, recommender systems, and social networks—and like Emacs, these projects would be optimized for people, not business metrics.
The biggest thing we can do to foster a healthy software ecosystem is to increase the number of hackers who have time to work on whatever they want. Ideally, "open-source developer" would be a viable career path. Efforts like Github Sponsors and Clojurists Together are fabulous, and maybe one day they'll have enough funding to compete with, say, going to grad school.
Until then, I think part-time labor is the best default. I've written about this already in some detail. If you can make enough to pay the bills in 20 hours per week, then you could spend your remaining time on open-source (and be sure to write about it!). As your reputation and skills grow, you can keep an eye out for consulting gigs, grants, and startup opportunities. If I could go back in time three years, I would tell myself to try this (probably via freelancing) instead of getting a regular job after graduating.
(For those interested in startups, part-time labor would also make it easier to experiment with different ideas. It's extremely difficult to avoid getting overly attached to your current idea when you're working on it full-time. That's probably been my biggest pitfall of the past two years.)
Findka might be able to help with this. After it reaches a certain scale, I plan to monetize it with job postings, similar to how Hacker News advertises job openings at YC companies. I would love to focus on the part-time niche.
These four ideals have a common thread: they increase the leverage of individuals. Much of the software industry today is scaled horizontally—you get high leverage not by coding but by nudging lots of other coders in the right direction. That's fine if you like being a nudger, but I think society underutilizes people who want to become great hackers. What would happen if we got better at scaling vertically—at increasing the throughput of individual, independent programmers?