Respecting Upstream
Published: Feb 25 2024
There's generally some good advice in software best-practices manuals, i.e. global variables are probably bad, and writing some documentation is likely a good idea. One of the things I don't see written in most software manuals, which I really wish would be included (and is good life advice in general): respect what came before you.
First, a bit of context. A few months back, I started a little software studio which aimed to build everything from scratch with as few software dependencies as possible. Since then, I've done a good bit of thinking about what it means to be "dependency-free", and how it's an ideal that isn't possible realistically, and likely something which shouldn't be aimed for in the first place.
A particularly snarky individual could probably argue that all software built today isn't "dependency free" inherently, since the developer likely didn't write the compiler, develop the operating system, build the computer, or manufacuture the silicon. Ok fine, fair enough smart-ass. Although this argument is valid, I'd argue the real reason why software today could never be dependency free is that many of the ideas and underlying concepts probably came from somewhere, and these days, likely from a previous iteration of said software.
There's very little truly "new" technology these days (and most attempts are usually met with pretty intense criticism), but this doesn't mean that technology as a whole isn't advancing at a crazy rate. Some examples I'm excited about, in the past decade, we've seen the introduction and productionizing of stupidly good AI models, sci-fi level databases, ridiculously powerful cpu chips, and likely-commercially-viable fusion energy. From my point of view, it's impossible to wake up today and not be excited about what's coming. The key idea though; all of these above-mentioned innovations aren't ideas that're fundamentally new, we've been iterating on them for decades. Through this process of iteration, we've been able to make tremendous progress.
One trend I see, especially in young software startups, is an increasing willingness to throw out and discredit the previous/current generation of work in favour of the "new thing". In my view, there's a right and a wrong way to do this, and I've certainly been in the wrong many times here. Notably, the important realization here is that competing software startups, i.e. vector databases, cloud infrastructure providers, are fundamentally working to solve the same or similar set of problems for customers as one another, perhaps from different "angles". The right way to "compete" isn't by hating on your competitors, or discrediting their efforts. Rather, it's by respecting each-other's strengths, and building momentum off one another to build the best possible product for end-customers.
On that note, it can be really hard as a founder to get out of your own head and accept that a competitor may in fact have a good product, one that customers get actually value out of. Yes, you read that right, it's possible for customers to have a good experience using software that you didn't write. Wow!
What this ultimately comes down to is that the best companies, at least in my view, are able to build off of, and work alongside competitors, to "expand the pie", rather than trying to steal market share in a predatory way. Here's a few (recent) examples of this that make me really optimistic about the software industry:
- Railway, a cloud provider, built and released nixpacks, an open-source tool which scans software source directories and builds OCI-compilant images automatically, and encouraged other cloud providers to collaborate and use it. That's fucking fantastic for consumers!
- Tailscale actively supports headscale, an open-source alternative implementation of their closed-source coordination server. They even hired one of the principle maintainers. Hell yeah!
- Cloudflare built a new proxy to replace Nginx named Pingora. In doing so, they sang the praises of Nginx, talked about how good of a web server it is, and shared a few specific examples of how Nginx wasn't the right solution for them anymore (after delaying the re-write decision for for many, many years). That's the right way to introduce a new piece of tech!
Writing software that solves real problems is hard, building companies is harder, and doing so while treating everyone around you as "enemies" is damn near impossible. Respect the projects, papers, and companies that are upstream of you, it's how we as an industry move forward.