I am David Heinemeier Hansson. Ask me anything.

Held on 22 February 2017, 4:00 pm

DHH is the creator of Ruby on Rails, founder & CTO at Basecamp (formerly 37signals), best-selling author, Le Mans class-winning racing driver, public speaker, hobbyist photographer, and family man.

Ask David Heinemeier Hansson about:

  • Ruby on Rails
  • Setting up business
  • Basecamp
  • Public Speaking
  • Remote Work
  • Leadership
  • Anything else you may want to know

Comments (105)

Ivan Bernatović's photo

Why are enterprise products and companies leaned towards ASP .NET and JAVA platforms so much? Why they don't opt for PHP, RoR, Python, Node.js etc.?

Do you see that changing anytime soon? I know that as of know people say that it is because of large ecosystems and because they are statically typed languages which supposedly helps in large codebases.

David Heinemeier Hansson's photo

Enterprise pursuits are often about things much different than technical excellence. They're about things like cover-your-ass, long-term support contracts, and solutions sold not directly to end users but to managers far removed from it.

In such an environment, it's the old adage that "nobody got fired for buying IBM". The technical merits are far less important than the appearance of making a good choice. And what better appearance than having Oracle or Microsoft's stamp on the box.

This worldview then relates perfectly with the notion that programmers must be protected from themselves. And through statically typed analysis and restrictions, we can ensure that it's less likely that people hang themselves with the ropes of freedom.

Betty Fernandez's photo

What do you think of the Node.js ecosystem? Do you try new languages/technologies on a regular basis?

David Heinemeier Hansson's photo

I think the energy unleashed by material steps forward in the JavaScript language is awesome. I've really warmed up to JavaScript since ES6. It's so much less painful of a language than it used to be.

But I don't agree with a lot of the stuff that's going on in the ecosystem. Things like these massive transitive dependency trees to do the simplest things just seem nuts to me. So does the infatuation with ludicrously complicated architectural patterns like Redux as well.

I certainly wouldn't want to write all of Basecamp from scratch in Node, but I am very happy to see that all the energy is helping to level up JavaScript as a whole. Because we can't avoid working with JavaScript to some extent if we want to work with the web.

Ankit Singhaniya's photo

What is your take on single page apps?

David Heinemeier Hansson's photo

I think they're vastly overused, but that's to be expected. It's still novel that you CAN create an entire web application exclusively through presentation generated dynamically through JavaScript. I happen to think that's generally a huge waste of time and effort for a lot of domains that don't need that level of fidelity, but so it goes.

So I personally try to restrict our use of full-stack/client-side MVC type development to a few areas where it really matters. For example, we've written an entire WYSIWYG editor from scratch using that, and then we embed that concept on individual pages.

But for the bulk of Basecamp, we're far more productive by using Turbolinks to provide the feel and speed of a SPA, without actually going through the horror of, say, a full React+Redux architecture.

Bill Moriarty's photo

Hi David,

This is a business question for you.

Some people whose businesses I like built platforms on which others can do work. Here are three examples:

  1. Matt built WordPress: A platform on which people can build a website or blog.
  2. You built Rails: A platform on which people can build web applications.
  3. Derek built CD Baby: A “platform” on which people could sell their CDs.

Do you think intending to create a platform is a wise idea on which to start a business? Or, is creating a platform something you stumble into as a side effect of making something else (like Valve creating Steam, you creating Rails to build Basecamp)?

I noticed Evernote tried, but failed to intentionally shift their product to be a big platform for developers. Maybe this is because the move came from Evernote, instead of customers requesting it.

Thanks. I appreciate your writing.

David Heinemeier Hansson's photo

I think chasing platforms is completely overrated. I'm sick of fucking platforms. How about people just make something directly useful rather than just extract rents from others making things useful on top of the thing you're doing.

Of the three examples you mention, Rails is explicitly not a business. I don't want it to be a business. I don't want to be the toll keeper taking my cut on the way out. No thank you.

Shahid Shaikh's photo

How do you manage the time between various activities which are not related to each other?

( I get this one a lot to myself, and not able to answer yet)

David Heinemeier Hansson's photo

By having reasonable boundaries, such as a baseline expectation that I won't spend more than 40 hours per week working. Then I have time to pursue other hobbies and interests without killing myself or my 8-9 hours of sleep every night.

Things also come and go in phases. Certain parts of the year are heavier on racing and then lighter on open source contributions. And vice versa.

Don't try to do it all at 100% at once. Doesn't work.

Dave Ceddia's photo

I loved Practical Object-Oriented Design in Ruby by Sandi Metz, and felt like my design thinking took a great leap forward from that book. Are there any other books or code to read/write that you'd suggest for improving software design skills?

Mev-Rael's photo
  1. What are your takeaways as a Leader?
  2. What would you change in the modern world (regarding tech or not)?
  3. What distinguish a great software engineer/architect from the one of the best?
David Heinemeier Hansson's photo
  1. Ensure that the people working for you are motivated. The trifecta of motivational sources as detailed by Daniel Pink in Drive are a good start: Mastery. Autonomy. Purpose.

  2. I wish you could buy a proper baguette in the US.

  3. The most effective people are those who can restate the problems. Turn hard problems into easy ones by finding the unnecessary bits to omit.

Diogo Ferreira's photo

What's the best approach to use react.js or vue.js with Rails?

David Heinemeier Hansson's photo

Rails 5.1 will come with built-in Yarn support and optional Webpack support. That'll be a great combo for starting on both of those frameworks. There's also React on Rails to look at.

Harry Changman's photo

What tips would you like to offer to first time entrepreneurs who are confused between VC funding and bootstrapping?

David Heinemeier Hansson's photo

If you have any option at all to bootstrap, for heaven's sake, try that first. I've written about the challenges and trade-offs at length in this piece called RECONSIDER: https://signalvnoise.com/posts/3972-reconsider

Sonu Kumar's photo

If you were 20 something today and had the itch to build an online business, how would you go about picking up an idea and implementing it?

David Heinemeier Hansson's photo

I think the best odds remain in building business software for small to midsized businesses. All the dynamics there reward starting small, bootstrapping, and being your own commander.

Suraj  E.S.'s photo

What Modern Javascript Web Frameworks seem quite interesting to you recently?

David Heinemeier Hansson's photo

React had a wonderful core concept of blow-away and re-render the world. I'm less enamored by the rest of the flow and I'm positively revolted by Flux/Redux, but the base idea is solid.

Suraj  E.S.'s photo

React seems a unanimous answer :)

Deactivated User's photo

I find it's very hard to properly work agile (Scrum or Kanban) without the team being "in the same room" at least a full day a week. Hangouts and/or Slack don't come close to standing in front of a white board to figure out design or architecture issues. Dragging tickets around in Trello doesn't bring the same energy as walking around during a meeting with a sticky note on your fingertips.

What would be your advice?

David Heinemeier Hansson's photo

"Proper agile" has the same connotations to me as "Real Programmer". It's not something I worry or care much about, as a certification.

Look at open source. How many projects have all their contributors meet in the same room every week to do work? Almost none of them. Yet some of the most impressive achievements in programming were done like this. Being present in the same room is clearly not necessary.

I find that it's less a matter of technical necessity and more one of social needs. Some people just need/like to hang out with other humans for work often. Totally fine. You should find a work setup that makes you happen. Just easier to do so if you're honest why you need the things you do.

Tom Chen's photo

There seems to be growing interest in Elixir and Phoenix among Ruby on Rails developers. What's your take on Elixir and the Phoenix framework?

David Heinemeier Hansson's photo

I think that's great. Love the idea of Elixir that you can take some good, old ideas, like Erlang, and improve the ergonomics such that they appeal to a modern audience. But for me, personally, they don't solve any problems that I have with a Ruby on Rails stack to be worth the downgrade in language and ecosystem.

Gaurav Mittal's photo

What's your take on Progressive Web Apps and their near-future potential? What do you think are the chances they take over mobile from native apps?

David Heinemeier Hansson's photo

I think most web development tooling has a lot of inherent productivity benefits over native development, so as web apps become more capable, they'll win back terrain originally given up because you simply couldn't do certain things or it wasn't fast enough before. At Basecamp, our native apps are mostly navigation shells around web content. But we do level-up some key interactions to native. Mix'n'match is where it's at.

Mariano Viola's photo

Hi David, If you were in the absurd condition of not being able to use Rails, which existing web framework would you use to write the next version of Basecamp and why?

David Heinemeier Hansson's photo

I'd probably still write my own somehow. I'm too damn particular about it.

Gaurav Mittal's photo

What's the second most beautiful language after Ruby?

Stephan de Vries's photo

Hi David, thank you for hosting this AMA! Being the CTO of Basecamp, do you still get to code as much as you'd like?

David Heinemeier Hansson's photo

Absolutely. I spend tons of my time programming. In part because we've kept Basecamp small. Just 50 people at the company. Less than 20 in product development. Amble time to program.

Mahade Walid's photo

How are you ?

David Heinemeier Hansson's photo

Depending on the day, somewhere within this range: 😍😁🙄😞☹️😣😱😵😡.

Mahade Walid's photo

Okay. ( I guess )

Anuj Sharma's photo

My favourite tech person and entrepreneur DHH. "Getting Real" is the bible for PM. Thanks #Hashnode for this. Who inspired you to create ROR ? And what are the most difficult things you faced when you started "Basecamp" ? Thanks for the AMA.

David Heinemeier Hansson's photo

Hey. Rails wasn't created so much out of inspiration as it was out of need. When I started using Ruby to build Basecamp, there just wasn't a lot of the fundamental pieces you'd want for easy creation of web applications. But I loved the language, so I thought I'd just build it myself.

Part of designing the framework was inspired by lots of sources, though. There's the Patterns of Enterprise Application Architecture by Fowler that became a blueprint for several elements, especially Active Record, and there were earlier Java frameworks like Struts and Webwork that gave inspiration too.

Mahendhar's photo

@dhh What was the route you took to go from an intermediate programmer to an advanced programmer? What are the skills you look for when you hire at Basecamp?

Dmytro Samodurov's photo

Do you think OpalRb worth wrapping ES6? Especially with upcoming HTTP2 that would allow tighten integration through different RPC style techniques. Do you believe a single language project development ecosystem makes that sense?

David Heinemeier Hansson's photo

Single language development doesn't have much purchase on me. JavaScript has gotten better enough with ES6 that it's not worth the leaky abstraction of trying to wrap that in Ruby.

Bruno Wego's photo

What's your recipe for being a focused person?

David Heinemeier Hansson's photo

Working on things that I truly care about and that brings me joy. I am the most scattered, unproductive person when it comes to doing things I don't want to do.

Andrew's photo

I saw your recent complaints about the absurdity of programming challenges during job interviews. It is very silly making a someone write an algorithm on a whiteboard to measure his/her ability. What techniques do you use to evaluate potential hires at Basecamp?

David Heinemeier Hansson's photo

Indeed. There's no substitute for looking at real work product and evaluating that. So that can either be commercial projects the person has authorization to share, it can be open source, it can be hobby projects, it can be something made for the occasion. But it has to be real.

Shyam Aghara's photo

Hi David, You have said in the past that a lot of enterprise software sucks. Can you point out a specific industry/category where there is an opportunity to build a sustainable business. Thanks.

David Heinemeier Hansson's photo

Small business software. There's an endless supply of problems suitable for bootstrapped software businesses.

Ankit Singhaniya's photo

Do you think that being a lead/manager is the only way a developer can grow? I like programming and solving problems. With this kind of role, I find myself not so much focused on the programming aspect. Is this natural and does everyone has to face this?

David Heinemeier Hansson's photo

Absolutely not. Becoming really good at the craft is an honorable pursuit and can be very lucrative too. The worst thing you can do is start doing work you don't really like just because you think that's what you're supposed to do.

Dino Maric's photo

Hey David! Choose one Tesla or Porsche :) ?...and can you describe why one over the other

David Heinemeier Hansson's photo

Electric propulsion is clearly the future, but Tesla's design and build doesn't do it for me. So a Porsche with an electric motor for me please :)

Shubham Sinha's photo

Hi I'm a front-end developer at Dipper Technologies Pvt Ltd which uses Ruby on Rails to power it's back-end. I also keep on fiddling with frameworks & libraries from other languages such as PHP Laravel, React / Vue, Next /Nuxt etc.

There has been a significant shift in the app usage pattern from webapp to mobile apps. The mobile apps, Android or iOS can be developed using Javascript. And for that React, Angular and Vue are the goto libraries for frontend engineers . Rails5 API support is sublime, but the frontend support for web apps isn't. Still it's easier to configure jQuery with Rails web app than React / Vue Js. PHP Laravel supports Vue out of the box, so is there any plan to make React / Vue integration really smooth with Rails ?

David Heinemeier Hansson's photo

Checkout Rails 5.1. Built-in Yarn for managing JS dependencies and optional integration with Webpack 👍

Josh Gallagher's photo

Do I need a Degree?

David Heinemeier Hansson's photo

Joint bachelor's degree in "computer science" (really, informatics) / business administration.

Nezir Zahirović's photo

Hi David, How are you, how's your family? Did you rest enough on Seychelles? Is it worth of visiting?

From me just a note: Thank you for writing and publishing thoughts that every reasonable IT person feels and understand but somehow nobody saying directly as you.

Things about Remote Work, Software Testing, YOUR SOFTWARE JUST ISN’T MISSION CRITICAL and so on.

Thanks, man!


David Heinemeier Hansson's photo

Thanks for the kind words! Seychelles were great.

John Burkhard's photo

For someone just getting started in this industry and trying to get a feel for languages, what makes Ruby better then PHP and by extension, Rails over Laravel?

David Heinemeier Hansson's photo

On a philosophical level, I've tried to answer this in the Rails Doctrine: http://rubyonrails.org/doctrine/. But on an aesthetic level, you'll have to read some code and play with multiple languages to get a sense of what's right for you. You can everything anything in anything, so it's not a functional barrier or choice any more. It's a philosophical, aesthetic, passionate one.

Bill Moriarty's photo

Do you think software products are more useful that don't present themselves as an "all in one" solution for something? For instance, did you consider, then decide against rolling Highrise into Basecamp?

David Heinemeier Hansson's photo

You have to draw your boundary somewhere. But for Basecamp, our whole pitch is that it's an integrated solution with everything you need to communicate and coordinate within a small growing business.

Highrise is more geared towards sales, leads tracking, and such. Different domain.

David Zhang's photo

Hi David,

How do you think about the rapid changes on front-ends, and what's the effect towards full stack frameworks like Rails?

David Heinemeier Hansson's photo

I understand why many people are fatigued by it. There's a lot of churn with questionable forward movement. But still, there are glimmers. I'm happy to have us provide better support in Rails 5.1 with Yarn and Webpack.

Ipseeta Priyadarshini's photo

How did you get into programming?

David Heinemeier Hansson's photo

I wanted programs! Particularly, I wanted programs for the web. So I started by learning HTML + CSS. Then a bit of ASP. Then some PHP. Then found Ruby 😍

Anthony Lombardi's photo

What's your take on MVC? Many frameworks from PHP to JS have been going on the theory of MV* (Model, View, Whatever). How do you feel about this approach? Do you see controllers as an important part of web programing?

David Heinemeier Hansson's photo

MVC is the bedrock. It's the key pattern in web development to make sense of the major elements. Rails is forged out of the MVC rock.

Bill Moriarty's photo

I know Basecamp doesn't hire until someone at the company tries the job first. Have you and Jason handled nuts and bolts work like accounting, setting up health insurance, and legal paperwork? Did you learn those topics in business school?

David Heinemeier Hansson's photo

You bet! We used to do all that stuff. It wasn't until, I think, 2009 that we hired an office manager. Jason and I have done all of it. From setting up insurance or typing in expenses for accounting. It might seem daunting, but be reassured that there are millions and millions of small business owners that figure it out every year. So why wouldn't you be able to? Also, you can use freelance accountants and insurance brokers to help you.

Dinesh Kotwani's photo

Hi David, It's 2017 and frameworks in other enterprise-y languages have copied the USP's of RoR like Convention over Config and MVC /separation of concerns, ORM which works well ,why should anyone start or learn RoR now if they are already familiar working in enterprise-y language , so is it worth for say a developer who is familiar with ASP.NET MVC using C# or Django using Python to learn about RoR ? Do you think it would be worth the effort to learn Ruby and then RoR for such developers ?

Wuelber Castillo's photo

What job did you have before creating RoR?

David Heinemeier Hansson's photo

I worked as contract developer, mostly doing PHP.

Adnan Siddiqi's photo

Refer to your tweet(https://twitter.com/dhh/status/834146806594433025), can you shed some light how do you select a developer for your company?

Shai Almog's photo

How do you build traction for a "development platform" company? How do you raise awareness within all the noise in your field? I'm a founder of a platform company and it feels like herding cats.

David Heinemeier Hansson's photo

You have to build an audience who cares about what you have to say and you have to solve problems that people actually have. I don't think there are any shortcuts in that regard. It took years and years before Rails took off as well.

Harrison Kamau's photo

Is working as a remote sole developer suitable for growth in software engineering? I mean, a sole remote dev learns most of the stuff on their own.

David Heinemeier Hansson's photo

I worked as a sole developer creating Basecamp and Ruby on Rails. So you can certainly get started that way. But it's good to be connected with other developers either at work or through open source communities. There's no merit badge for being a hermit.

Kris Immig's photo

Hi David, I like developing with Ruby On Rails or Laravel in my spare time but in my job we use Drupal. I like the hands-on approach and control something like rails gives me but I miss the fast out-of-the-box backend/admin interface that you can pretty much give to a client "as is". I looked at the available admin solutions for rails but haven´t found something that works for me. Do you have a goto solution for something like that, do you copy-paste from old projects or do you build a backend from scratch every project?

Robert Eles's photo

What is the reasoning for dropping the subdomain structure for the base of the URL (eg. https://company_name.basecamp.com) used in Basecamp 2 and instead use an UID (eg. https://3.basecamp.com/:uid/...) for Basecamp 3?

David Heinemeier Hansson's photo

One less thing for people who sign up for Basecamp to worry about. URLs have never mattered less. Lots of browsers are hiding most of them by default now.

Jeremy's photo

How many applications do you receive for a job opening? And how many do you interview and have them working on a project? Can you share some kind of projects you have them doing before hiring them officially?

Is there anything a candidate can do to blow up a possible offer after your initial screening of applications?

David Heinemeier Hansson's photo

I think we usually get between 100 and 300 applications. Then we usually cut that down to 10-20 candidates that we'll talk with on the phone. Then we usually have 3-5 finalists where we may give them a one week paid trial project or we may just decide based on the work product provided.

Candidates can surely be dropped at every step. Either the work product isn't strong enough or they're not good writers or they're just not someone the people interviewing would like to work with.

Amree Zaid's photo

I'd love to contribute to Ruby on Rails, but I'm still a Rails developer after a few years and not a contributor. Maybe this question is too broad, but do you have any tips?

David Heinemeier Hansson's photo

The best thing you can do is scratch your own itch. If you hit a feature you really need, or, even better, a bug or inconsistency that annoys you: Dig in and see if you can fix it. Second best, trawl the issues tracker and find something that interests you and see if you can fix it. Or you can help with the documentation to explain something that's poorly described better.

Thanks for wanting to help!

Adnan Siddiqi's photo

Don't you guys get bored of working on Basecamp all the time?

David Heinemeier Hansson's photo

14 years and counting, not so far!

Rati Iamsopha's photo

Do you have any engineers that in opposite time zone to you? I really love to know how you manage the team. I've been a long time fan of Signal v. Noise blogs and the Rework book.

David Heinemeier Hansson's photo

We always try to be within 4 hours of Chicago. It's too hard if someone doesn't overlap at all. We covered this and more in detail in our book REMOTE.

Prabhu S's photo

What do you think about Swift for server side programming? Have you had time to check it out? What are your opinions about the language in general?

David Heinemeier Hansson's photo

Swift looks like a level-up over ObjC in some regards for iOS, but also a step backwards in others. It's less dynamic, less late binding. I don't see any reason why people would want to use Swift for server-side programming, but hey, whatever floats your boat!

manimaran's photo

What are some of the strategies that helped you succeed?

David Heinemeier Hansson's photo

At such a high level, the answer is bound to be pretty vague: Keep striving. Don't think you're learning by repeating the same lesson 10 times. You need new lessons. You need to stretch.

Harrison Kamau's photo

Were you born a computer prodigy? You seem so good:)

Ankit Singhaniya's photo

You say Phoenix doesn't solve your problem with Rails. I would really like to know what are the challenges you face with Rails?

David Heinemeier Hansson's photo

Making ever more beautiful code ever more quickly. Performance per se hasn't been a problem that I've personally spent that much time worrying about. Explained further: https://m.signalvnoise.com/ruby-has-been-fast-enough-for-13-years-afff4a54abc7