Before I get into this, I want to be clear: I am not trying to market anything here. I’m writing this as a developer talking to other developers. I’m not wearing a "founder" hat; I’m wearing the hat of someone who spent way too many late nights staring at a terminal, frustrated that I couldn't get two pieces of software to talk to each other the way I wanted. I’m talking as me, because I think the way we talk about software "competition" is fundamentally broken.
If you spend any time in developer circles—Hacker News, Reddit, Twitter—you see this constant, exhausting need to rank everything. We want to know what the "best" framework is, what the "Selenium killer" of the week is, or why anyone would use Tool X when Tool Y exists. We treat software development like a high-stakes sports league where only one project can hold the trophy at the end of the season.
But after building Doppelganger, I’ve realized that "better" is a pretty useless word in engineering.
Software doesn’t actually evolve in a straight line from "bad" to "good." It doesn't move toward some objective perfection. It evolves horizontally. It branches out to fill specific, painful gaps that the previous generation of tools—no matter how powerful or polished—was never designed to bridge. No tool truly replaces another; it just offers a different set of trade-offs for a different set of problems.
asernasr•1h ago
If you spend any time in developer circles—Hacker News, Reddit, Twitter—you see this constant, exhausting need to rank everything. We want to know what the "best" framework is, what the "Selenium killer" of the week is, or why anyone would use Tool X when Tool Y exists. We treat software development like a high-stakes sports league where only one project can hold the trophy at the end of the season.
But after building Doppelganger, I’ve realized that "better" is a pretty useless word in engineering.
Software doesn’t actually evolve in a straight line from "bad" to "good." It doesn't move toward some objective perfection. It evolves horizontally. It branches out to fill specific, painful gaps that the previous generation of tools—no matter how powerful or polished—was never designed to bridge. No tool truly replaces another; it just offers a different set of trade-offs for a different set of problems.