David Heinemeier Hansson

June 2, 2024

Why I retired from the tech crusades

When Ruby on Rails was launched over twenty years ago, I was a twenty-some young programmer convinced that anyone who gave my stack a try would accept its universal superiority for solving The Web Problem. So I pursued the path of the crusade, attempting to convert the unenlightened masses by the edge of a pointed argument.

And for a long time, I thought that's what had worked. That this was why Ruby on Rails took off, became one of the most popular full-stack web frameworks of all time, inspired countless clones, and created hundreds of billions in enterprise value for companies built on it. But I was wrong. It wasn't the crusade that did it.

Since those early days, I've talked to thousands of programmers who adopted Ruby on Rails back then, and do you know what virtually every one of them cite? That original 15-minute blog video. Which didn't contain a single comparison to other named solutions or specifically pointed arguments against alternatives. It just showed what you could do with Ruby on Rails, and the A/B comparison automatically ran inside the mind of every programmer who was exposed to that.

That's what did it. Showing something great, and letting those who weren't happy with their current situation become inspired to check it out. Because those are the only people who are able to convert to your cause anyway. I've never seen someone who was head'over'heels in love with, say, functional programming be won over by arguments for objected-oriented programming.

You simply can't dunk someone into submission, and it's usually counterproductive if you try. But you can absolutely attract people who aren't happy with their current circumstances to give an alternative a chance, if you simply show them how it works, and allow them to conclude by themselves how it would make their programming life better.

What I've also come to realize is that programmers come in many different intellectual shapes and sizes. Some of those shapes will click with functional programming, and that'll be their path to passion. Others will click with vanilla JavaScript, and be relieved to give up the build pipelines. Others still will find their spirit in Go. This is great. Seriously. The fact that working for the web allows for such diverse ecosystem choices is an incredible feature, not a bug.

I found my life's work and passion in Ruby. I have friends who've found theirs in Python or Elixir or PHP or Go or even JavaScript. That's wonderful! And that's really all I want for you. I want you to be happy. I want you to find just that right language that opens your mind to the beautiful game of coding in your most compatible mode of conception, as Ruby did for me.

This is not the same as just saying "everything has trade-offs, use what works best". That to me is a bit of a cop out. There is no universal set of trade-offs that'll make something objectively "work best". Half the programming conundrum lies in connecting to an enduring source of motivation. I wouldn't be a happy camper if  I had to spend my days programming Rust (but I LOVE so many of the tools coming out of that community by people who DO enjoy just that).

It also doesn't mean we should give up on technical discussions of advantages or disadvantages, but I think those are generally more effective when performed in the style of "here's what I like, why I like it, so look at my code, my outcomes, and see if it tickles your fancy too".

Programming is a beautiful game. I would give up all the fancy cars I have in a heartbeat, if I was made to choose between them and programming. The intellectual stimulation, the occasional high from hitting The Zone, is such a concrete illustration of Coco Chanel's "the best things in life are free, the second best things are very expensive". Programming is one of those "best things" that is virtually free to everyone in the Western world (and increasingly so everywhere else too). 

So let's play that beautiful game to the best of our ability, in the position that flatters our conceptual capacities the most, and create some wonderful code.

About David Heinemeier Hansson

Made Basecamp and HEY for the underdogs as co-owner and CTO of 37signals. Created Ruby on Rails. Wrote REWORK, It Doesn't Have to Be Crazy at Work, and REMOTE. Won at Le Mans as a racing driver. Fought the big tech monopolies as an antitrust advocate. Invested in Danish startups.