I am David Heinemeier Hansson. Ask me anything.
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
- Public Speaking
- Remote Work
- Anything else you may want to know
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.
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.
What do you think of the Node.js ecosystem? Do you try new languages/technologies on a regular basis?
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.
What is your take on single page apps?
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.
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:
- Matt built WordPress: A platform on which people can build a website or blog.
- You built Rails: A platform on which people can build web applications.
- 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.
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.
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)
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.
Executive Product Leader & Mentor for High-End Influencers and Brands @ mevrael.com
- What are your takeaways as a Leader?
- What would you change in the modern world (regarding tech or not)?
- What distinguish a great software engineer/architect from the one of the best?
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.
I wish you could buy a proper baguette in the US.
The most effective people are those who can restate the problems. Turn hard problems into easy ones by finding the unnecessary bits to omit.
What's the best approach to use react.js or vue.js with Rails?
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?
What tips would you like to offer to first time entrepreneurs who are confused between VC funding and bootstrapping?
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?
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.
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?
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.
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?
"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.
Co-founder at Appther.com | NodeJs | AngularJs | NoSql | MySql | Ionic |Next Generation APIs Developer.
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.
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.
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?
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?
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?
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.
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?
How do you think about the rapid changes on front-ends, and what's the effect towards full stack frameworks like Rails?
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?
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.
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?
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.
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.
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.
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?
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.
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?
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.
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?
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!
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?
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.
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?
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?
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.
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.
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 ?
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?
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.
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?