The interview process had three stages. At all stages, I was allowed to choose my programming language.
1. A 1-hour phone screen consisting of two algorithmic questions coded using a collaborative editor.
2. A take-home programming assignment consisting of one task that was intended to take 2-3 hours. I was told I could take more time if I needed to when the problem was presented, so I recommend allocating 4-5 hours on the calendar, just in case.
3. A one-day onsite interview preceded by a getting-acquainted dinner.
3a. I met the CEO and two engineers at dinner, and we mostly discussed interesting things. There were no technical interview questions, so it was at most a culture fit assessment.
3b. The day-long interview consisted of implementing the backend for a non-trivial search problem using a Web application template written in my programming language of choice, and Redis. The scheduling e-mail informed me that I should read about Redis and its data structures. I was given a VM on EC2 with all the dependencies installed, and I was expected to have my code running there.
The interview started at 11am, I had lunch with the entire SF office at ~12-1pm, and I resumed coding 1-6pm. Every once in a while, I was asked how I was doing and what I was working on. I was asked to present my approach in a conference room, using a white board. I was told that my first solution was too complex and had performance issues, and we agreed that I'd think for a while and present a second solution, which seemed acceptable.
When I said I was done with coding, engineers around the office ran manual tests using the Web application's UI exposed by the VM, and told me about the bugs they found. The bugs revolved around edge cases that I hadn't considered. I was asked to explain how I'd fix the bugs, then I had to fix them.
3c. The technical interview ended around 6:20pm, and I had dinner with 8-9 Heap employees starting at 6:30pm. Someone asked who's free for dinner around the office, so it seemed like the dinner was intended to include everyone that had time. This second dinner consisted of both technical and non-technical people, and felt mostly like a sell dinner. The dinner ended around 8:30pm, and I was told I'll get the result of the interview as quickly as possible.
At every stage, I got a decision within a couple of hours. The interview process was pretty well-organized, and I felt that my schedule was dictating the pace of the interview, which was good.