Initiated the process through an employee referral and the initial phone screen was quite thorough and really helped me evaluate what the company was doing and whereabouts it was at in terms of its product and their objectives. Recruiter was very down to earth.
After the phone screen, the HubSpot coding assessment was setup. You simply follow a link to kick things off. Get familiar with the instructions. It's helpful to have a skeleton application ready to go beforehand. I won't divulge too much on the content as I believe it is a fair assessment of developer skills and the HubSpot team did put a good bit of thought into it.
I decided it would be prudent to do this on a Saturday morning as the code targets an API using a key so no requirement to have anyone on the HubSpot side at this stage and it allows for a block of time to focus on it without distractions. At times I did feel quite pressured by it as I changed my approach twice in the first hour. Nevertheless, completed the assessment in roughly 2.5 hours, received a confirmation mail straight away. You have however much time you need to clean the code prior to submitting the package.
On-site was arranged a couple of days later. Standard procedure here. They provided a full breakdown of the schedule for the day. All in all it ran from 13:45 to 17:00. For anyone who hasn't done extensive on-sites, it is best to arrive a little early and get a feel for the environment and a drink plenty of water. Your brain needs it!
First round was heavily focused on a relational database schema and walking through queries of average complexity. This was essentially social media connections and how to model them and relationships between them. I felt a good momentum with this round but fell a little short at the very end with some of the more exotic queries. Most people should get the majority of these questions even with a little experience with MySQL, MSSQL, Sybase, Postgres, etc.
The preferred solution here was to double up records which initially confused me as I found it to be quite an expensive way to handle this situation, although I could not get over my own mental hump and fully figure out my own solution without tripping up. Think complexity versus simplicity. Both interviewers were quite helpful however and really it felt more like a technical discussion one would have during their normal day to day. The very final portion of this round related to indexing tables and how to optimize queries. These would would be the bar raiser questions.
Second round was a high level system design discussion for a URL shortening service. Basically, TinyURL after a nice chat covering a few laid back situational questions.
I enjoyed this one quite a lot. Actually learned quite a few tips from the interviewer here and my suggestion to breaking certain parts of the system down into micro-services was well received. Know concepts such as load balancing, caching, database replication, redundancy, CAP and a couple of other key concepts relating to well scaled distributed systems.
This is quite a broad topic so be careful not to over rehearse some predefined answers because one criticism and your whole plan will fall apart. Learn and understand the concepts and the interviewer will guide the discussion based on your understanding. The key with these types of interviews is to assess how you deconstruct a much larger problem. So ask lots of questions and get a very clear definition of what it is the system should do, then define the API and work from there. I contradicted myself a little here when it came to SQL vs NoSQL.
Third and final round was a one to one with the hiring manager. A good few situational questions here like dealing with conflicts etc. There are plenty of examples of what comes up during these types of interviews.
No real conversational flow to the questions though in this round and I didn't feel as relaxed as the previous rounds but can't really say for sure how that impacted the final decision as sometimes it is really more formality and hiring managers just want to see if you can work with the team and fit in and ultimately not be a pain in the backside for them.
After that, I was given a tour of the office. Quite a nice space they have and really has that start up vibe. Overall, I quite enjoyed the experience and it gave me a very good chance to correct my shortcomings.
For junior-mid level positions, if you really want to work here, practice your A game and start white-boarding solutions as the common trend for these on-sites nowadays is to ask easy questions to ease you in, then intermediate, then more complex, then basically the bar-raising questions that get you the gold stars if you can answer them.
My one critique of the whole process: the role was Java focused and yet the topic was hardly covered at all, nor any programming concepts for that matter.
If you like what HubSpot is doing, go for it! :)