Joshua Wood

Keynote Interview with David Heinemeier Hansson

David and Evan talk about Rails, work, and the world.


  • HEY was supposed to launch the week before RailsConf 2020
    • Technology was not wrapped up for this talk, due to Covid
    • Launch was postponed
  • HEY on mobile:
    • Majestic Monolith at Basecamp:
      • It’s is for everything, not just web
      • Many native views on iOS are rendered by Rails
      • 10% native/90% Rails currently
    • Hey took similar approach, but they began with native mobile. It’s full native and uses web views (I think?) to pull in Rails views.
    • 2 teams of 3 people (6 total) build and maintain iOS and Android apps.
  • Ruby is great because you can know a little JavaScript and then jump to Ruby, understand it, and own the full stack.
  • One generalist at Basecamp can ship an entire feature to everyone on every platform at once.
  • 37signals/Basecamp has been around 20 years. Looking back:
    • Things don’t change that rapidly.
    • DHH’s early Rails code could show you how we’re building Rails apps today.
    • Developer ergonomics in the early days 2004-2008–he’s holding onto that.
    • Even as CTO of 58-person company, DHH needs to program every week at least.
    • If being a Software Craftsman is toxic, sign me up for that
    • If you don’t know how to make it better, you’ll probably just mess it up by changing it.
    • Looking back over 20 years, the big change was the iPhone.
      • That change has almost petered out. High end phones are faster than many desktops now.
  • Silicon Valley money is partially to blame for development bloat
  • “That will be 15 people and 9 months plus tax”
  • He thinks the pendulum will swing back.
  • From Microservices back to Monoliths:
    • Bernie Sanders: the pendulum swung back to him. He was saying the same shit with more hair in the 70s.
    • The pendulum is swinging back towards us.
    • The amnesia is partially caused by so many new people entering the industry. They haven’t experienced it any other way.
  • Nothing stays the hot shit forever.
  • Your own intrinsic motivation is what matters.
  • Technology is not that fast. Over 60 years there are blips where shit happened.
  • Are there other technologies that you look at that seem interesting?
    • When he doesn’t know what to pick, he tries everything.
    • Ruby is still exciting
      • Especially because it’s dynamically typed
    • Modern JavaScript/ES6+ is probably DHH’s closest thing to a good time outside of Ruby
    • He’s an OO programmer, even though functional has influenced his programming style
    • Matz: if you’re listening, do not add types to Ruby. Let people play with that on their own.
    • Shopify has different concerns from Basecamp, and may need types (much larger team size).
    • We can have Sharp Knives (Programming) and safer knives in the same drawer.
    • Finding another language is not high on DHH’s list of hobbies.
  • How has DHH’s role w/ Rails evolved over the time? Who does he look for on the core team?
    • DHH writes the minority of Rails today. His role is now “biggest fan,” or “biggest user.”
    • He doesn’t care about how it’s implemented as much anymore.
    • It’s great when people you trust can take over caring about complicated things so you can put them out of mind to focus on other things.
    • Evan: DHH is the Rails “super fan”
    • DHH on his “executive privilege” :trollface:
      • Sometimes he’ll open a PR to request a feature
      • Putting really shitty code out there knowing a bunch of people will make it better
      • His drafts are super rough now
  • What about choices of defaults?
    • Rails Asset Pipeline
      • We built the transpiler approach before it was cool.
        • Now it is
          • We don’t need to do it anymore.
      • Why not pipe all assets (CSS, images) through Webpack and get rid of asset pipeline entirely?
        • It’s not better!
        • It doesn’t need to be pure
        • Purity means nothing to DHH
        • Dogmatic purity is bad
          • JavaScript+Ruby is not bad
          • SQL+ActiveRecord is not bad
        • Remember ActiveResource?
          • In those scars: Microservices are bad.
            • A method call is not the same thing as a service invocation.
              • No one writes SOAP apps anymore…
              • DHH believes the same will be true for Microservices
  • Syntax formatters. Do you like them?
    • DHH is grinning.
      • No quick thoughts.
    • “If there’s one thing I swear at the most in Ruby, it’s RuboCop”
      • Part of the beauty of Ruby is the incredible subtlety of syntax.
      • This is why Python was not for DHH: “one way to do everything” is written into the language.
      • Ruby is poetry.
      • “Go is a newspeak kind of language”
      • Ruby would suck if there was something that said there’s only one way to say if something
      • DHH hopes a formatted doesn’t get included in Ruby
        • Ruby has dialects. It’s a cultural treasure (Seattle Style)
          • You can write your own
          • ActiveSupport is the Rails dialect of Ruby
      • Concession: after 15 years of Ruby, DHH realized that choosing between the subtlety of single vs. double quotes is more trouble than it’s worth.
  • DHH tells himself every day: if you don’t want to go to work, you don’t have to.
  • Things he’s working on:
    • HEY
      • It’s where abstractions for new things in Rails are currently coming from
      • Hopefully launching in December 2020
    • A unified theory of Basecamp-style apps is forthcoming
  • END
  0 likes and retweets
  • Author's Avatar

    Rails was the first mvc framework that actually made sense to me. I got into it about 8 years ago and was told "don't bother" by a lot of people.

    Instead I focused on JavaScript. I kinda regret it and miss working with Rails. With the improvements that the GitHub team has made and tools like stimulus/reflex, I can see there being a much greater potential for Rails over the coming year.

    But unfortunately there are still unfounded stigmas out there like "Rails is dying" or "Rails can't scale well" that need to be squashed (at least in some of the enterprise circles I've been involved in). We need more evangelism to make people understand that Rails is just as relevant and the tools and ecosystem are just as vibrant as they ever were. Just my $0.02.

  • I was fortunate enough that Rails was the first framework of any kind that I got my hands on, almost 7 years ago. To this day, my favorite language is Python, followed by JavaScript. I don't care that much for Ruby if I'm honest.

    And yet, whenever I can, I go to Rails. I've used the other things: laravel, django, flask, express, next, etc. I believe it is an indisputable fact that Rails is the easiest to understand and the most organized of them. They literally designed it so that you have to WORK to make Rails confusing. This is not the case in JavaScript.

    Python, my favorite language, is also not as human readable as Ruby is. Everyone is more confident reading `array.length` vs `len(array)`. I wish the Python community would acknowledge this, but we swear it's the most readable language out there.

    JavaScript is getting better, but damn if it ain't a mess. Besides the fact that the language evolves so much, there's also the tools that are based on JS that must inevitably change. The biggest problem with the JS community is that we let people get away with way too much. People say they are building a Node app, but they really mean they are using Next or Express. No one corrects it. People say they are doing the UI in JavaScript, but they are really using jQuery. No one corrects it. People say they are doing their UI with React. They completely fail to mention Redux. No one corrects it. It gets really annoying.

    Who can deny that Rails has been incredibly consistent since it's inception? It has even embraced the emergence of front end frameworks in it's more recent versions. A lot of the hate that Rails gets is outright misinformation. You would be sad to hear the number of times I've heard someone tell a new developer, "Don't learn Rails. Rails is slow. Learn Django", thinking that Python is somehow faster.

  • He kept referencing the “majestic monolith,” and I turned it off.

  • Thanks for posting these notes!

    There are a ton of new people who haven’t been exposed to the joy of Rails because JavaScript is mainstream and/or someone told them not to bother.

    The “Rails Way” is completely foreign to many of the new JavaScript developers I’ve met. Don’t assume people get it just because it’s been around forever.

    This is such an underrated point right now. Really, the revolution that was Rails, is not so much the framework, but the philosophy. The whole ‘Rails is omakase’ analogy, meaning convention > configuration, is sorely missing from a lot of modern web dev.

    I personally love the direction and possibilities of JS, but the fact that redwood, gatsby, blitz, etc all seem to be gaining traction, tells me that when push comes to shove, all devs fundamentally has to solve real problems, business problems.

    The magic of Rails is how it removes all but what you need to start creating value from day one. And from personal experience, I know that good Rails people with some frontend chops are in very high demand, and I think that’ll be the case for a long while.

  • I love Rails. I’ve been programming with it since 2006. It made me love programming again. It’s literally changed my life and I’d never trade it in for anything MEAN or MERN or whatever the heck acronym comes next.

    I’m too damn productive. Clients love it - especially the ones who pay by the hour!!!!

  • Many people say rails is great and maybe I will even join them on some days but many of those seem to think rails can't or shouldn't be overhauled to make it better.

    I think both Ruby and Rails need to be looked at fresh to take them to the next level. For Ruby this means a much faster VM and type checking (optional or not). On the VM front we have been promised one after the other and still no change. Rubinious came and went, jruby didn't pan out like it was promised and almost nobody uses it and it looks like graal/truffle isn't coming anytime soon either. The problem is with the language itself There are things about the language like exceptions handling, stack unwinding etc that need to be overhauled in order to make ruby faster. Sorbet may address the type handling but it's just a band aid and still relies on runtime checking.

    Rails takes up way too much memory. It's also obscene in object allocation and garbage collection overhead. It needs an overhaul to make it efficient and fast.