About the talk
RailsConf 2019 - Beyond the whiteboard interview by Joel Quenneville & Rachel Mathew
You've spent a lot of time preparing for this moment. Your palms are sweaty. You take a deep breath, walk into the room, and shake hands with the candidate. Welcome to the interview!
Interviewing can be intimidating and our industry is notorious for interviews that are arbitrary, academic, and adversarial. How can we do better?
Come be a fly on the wall for a real interview! At thoughtbot, we've put a lot of thought into crafting an interview that is both humane and allows us to accurately capture a candidate's strengths and weaknesses relative to the real-life work they will be doing.
Hi there all thanks so much for coming in. Yeah, I'm really excited to get started. So I know that you got an email talking a little bit about what our interview process is like, but I thought I would be good to go over it in person and give you a chance to ask any questions you might have about my whiteboarding skills a little while, but I think I got this interviews are pretty stressful. And I know that whiteboarding interview especially can be nerve-racking because
they're a little confrontational and the questions are often. Not what you might see you everyday as a developer. But your thought we put a lot of work into thinking about how we can make our interview more collaborative and closer to work. They would actually be doing so just to give you an idea of what we're going to do here. We're going to walk through a scenario and I'll ask you a few questions. It's really an opportunity for us to discuss the questions and how you might approach there a mixture of technical questions as well as Consulting
questions. Okay. I'm kind of curious questions product company has never consulted. Can you give me a heads up like what the weather going to be? Like, I mean questions about like products Co team interaction process things that are really important for a developer is day-to-day job, but aren't necessarily like technically okay, so like. That's a big part of it. But there's also going to be stuff that goes just beyond just process. Okay. Alright. So for this first question, we're going to imagine that you're a developer that pot and you're rolling onto a new project.
Your client is a gym that's in the area and they have an existing code base there looking to expand upon want to build out a system that allows users to schedule sessions online currently. All of their gym-goers are calling into the gym to schedule a class which is not ideal. So to get us started. How would you begin onboarding and getting to know an existing Fitbit? I think I would probably look in the models directory first resuming. This is a real stop right there. So I
probably take a look at that and then try to find you. So Kyle got object to the system. There's often a lot of the business logic is centralized there. I can also see where are some of the pain points in the app where things get a little bit more coupled not to give me a good idea finding God objects and then finding out from there if you like that works really well, are there other techniques that you might you? Yeah, I think I might look at the other routes file as receive your things roof restful or
wait. Let me take back. The first thing I would do is run the test. I feel like first thing I should never do. So testing. I would like to test a little bit I thought but I hope you don't feel like I was like fishing for a particular particular response. I really just wanted to give you an opportunity to talk about my unborn Tanto project. What's the matter in that you've gotten some of the kobeisy feel really confident and the client is itching to get started. They are looking to thoughtbot for a little bit of help defining
won an MVP might look like so I'll tell you a little bit about the requirements that they've given us and we can talk through what the process of scoping and if he might be like, okay. So, let's imagine that they're building a website. They want users to to be able to book appointment through the website without having to call in their planning on opening a new location sometime next year. So they imagine that their new location will have a different schedule and they also run promotional events throughout the year.
So the next promotion about that they talk to us about it sometime at the end of June and they're going to run extended hours. But sometimes they do promotional events where they do like shortened hours. They're also closed on major holidays. So given given all of that. What do you feel like should be the MVP of this product? They wouldn't miss coping and MPP its importance where to find. What is the core problem that were solving and I think here it's self service. So if a client is able to self serve at the gym, then whatever
minimum piece of software that we've built that is successful is doing the job that were wanting it to do and that's. I think particularly given that the new gems only opening next year. I think you said then we could probably cut that functionality and say that we don't need support for multiple locations when we launch V-1 make fun of reasoning is solid. Do you feel like being able to handle like being closed for the holidays is core to the app. Tough. I feel like it had a lot of complexity to the logic
and I'd rather not have to do it. But at the same time it's really hard to go to market without that if they mention we'd be closed on the 4th of July. If a client were to book an appointment for the 4th of July then show up to the gym and it's closed that cost with a lot in terms of Goodwill and probably caught this in like actual dollars as well as bad experience all around like book a session and then go in and the gym is closed is probably a really bad experience.
Is there anything that you could see changing about maybe the requirement that would make you more comfortable cutting scheduling from scalp? Was that the wrong answer was I supposed to say? Yes, I just think that talking about live scheduling is an interesting area and it might be interesting to talk about like ways that this could change in order for you to feel more comfortable coming in from the MVP. Okay. Wonder how often does this project release and I ask because if my current company we
are on a two-week Sprint cycle and we released once at the end of every Sprint so sometimes it can take maybe two friends for something to go from idea to production and given that July 4th is pretty close. I feel not as comfortable not having that initial release taking like a month to ship something when you're trying to get out if you really quickly would be very thoughtful so it doesn't in the initial problem, but I thought we usually run one or two weeks pregnant
and it depends on the project and what makes sense for the team. So in a situation, maybe it would make more sense to have shorter Sprint and Go with the one with Sprint. Okay, I'm sure y'all City. Have you ever worked on a project that used a continuous deployment approach idea to bring up here do continuous deployment on my current project for really similar reasons where the client is trying to ship a new set of features and we deploy something initially that
we wanted to build up really quickly. That's another thing that I think would work really well on this project. Okay, I think if we have these are the tighter iterations, I'd be more comfortable with a Tighter and VP do two things tend to the store go together in my mind. Yeah, I agree. I agree. I think that that approach makes a lot of sense, but I'm pausing brought up like these techniques kind of around delivery that are also important for MVPs one alternative that we might be able to do is in this something. We did it my current company
when we first launched was maybe going live with a beta version. So we really want to test and get feedback from our users is does self service work and then what are the things we need to learn from that holidays are just relaxing special case that's going to take time that we need to gather feedback. So if we were to maybe ship a version that doesn't have holidays in it, but the only serve as a at the beta to selected users and we made sure to communicate with them. Look this beta software
allows you to book anytime even on holidays. Maybe send out an email reminder a week before saying hey the app will allow you to book on July 4th. Just a reminder that we are closed that day that would allow us to then get back and get the Federation Loops much tighter while at the same time not having the pressure of shipping to people on July 4th and not having a holiday support think that's a great idea. I also like that because you know when you're putting out an MVP, like there might be some like user experience issues. There might be some small bugs
and I feel like having the Spade plus expectations for users of like is this is slowly going to get better and it's normal that there are few rough patches. I feel like with that. We really like nicely talked over won an MVP would look like and we can maybe start thinking about how we would Implement that I'm good. All right, so just to reiterate about where we landed we want to initially build out a flow that allows a user to go online book an appointment, and we're not going to worry about any sort of flexible scheduling and can say
the gym just has like nine to five hours and we're also won't worry about multiple locations. So given all of that how would you go about modeling these different objects and how they related to each other. I think it would have some kind of trainer object and then schedules table in the probably sitting between the two maybe like a slots model or something that could be sort of belong to both the trainer and a schedule. I guess we have to probably like freaking right though the head of time actually. Can I take that back
I can see where this is going and I actually did this on another project. It didn't turn out too. Well, this was that payroll application. I was building and we leaned very heavily into active record associations for all of her modeling and sort. Of course that was the concept of a pay. And everything Associated to a pay. Which meant that I had to pre generate them every couple every month. And then all of a sudden we had a the daylight savings boundary and things got weird. It's all the powers that are associated with the wrong pay.
Or maybe get your sore friend or not associated with pay. At all or even try to get associate to pay. That should exist but doesn't and then we just got an exception. So a lot of the problems with our payroll report other variation of missing like. Strike again, so my head and I'm thinking sort of you if we have a calendar, I probably don't want to model the white space on the calendar but rather the individual events on it. So what if instead of having that table that sits between the the trainers and the schedule What If instead that represented
maybe appointments so beautiful out there already been taken and then want to show what is available for other people to take we can just go to calculate that run time. If you will based off of what we know it's already been booked and what the current schedule is the hours that's associated with a number of appointment trainer is it also have any appointments? That's right appointment would be for particular trainer at a given time. Nicely cover is what our people look like. Cool, so if we start to layer and some of the features that we had talked about initially, let's imagine we filled
out the MVP the client loved it. And come back to us and says now would be a great time to make the system handle special events. So that could look like extended hours for promotion and they could look like being closed on holiday Lake July 4th. How would you how would you add that modeling into our current pollution? Yeah, I think this is I'm glad we just had to put this off earlier because it's kind of a gnarly parked. The previously we had the schedule table that just had a single Row in inch which
I do feel a little bit weird to me. I think now we could add maybe a start that and in that column to it. So now we have a lot of rows in this and a particular schedule would be just active during a particular. I think it might be 9:50 season lousy the first set up schedules ahead of time. So you can say we had like a winter schedule in a summer schedule the admin could go in to set this early in the beginning of the year and say, okay, these are hours during the winter and then starting the summer
hours. Is it going to be different and they don't have to like change the now to make him live now. Yeah, I feel like that really nicely covers a common use case for gyms that maybe wasn't like talk about and then it shall requirements where your scheduling things for your like large block the time. Could you talk through how an admin would go in and like look for July 4th, how is it going in and close the gym? Yes, I threw think of like a holiday being like a micro version is like this winter and summer schedule
thing. So I guess an admin would go to the admin panel. We already have a farmer schedule said that goes from the first day of summer June 21st to the end of Summer on September 21st. They have to end that schedule early on July 3rd. Create a new schedule. That's only for July 4th where the gym is closed and then start again another schedule July 5th through September 21st that I guess I have to copy over and have to be the same as the summer schedule that might be a little are protein fragments that have to wait like recreate this old schedule.
Maybe I could I'd like a cloning button on the other half. Like we know we want that has to be the same. Yeah, that's still kind of heavy though. I guess it's Yeah, it kind of feels like we're doing a lot of work to make or model or to support the way that we've modeled out the scheduling and our models maybe aren't like work before I liked what you said before were you said that, you know, we're handling these schedules for like different parts of the year. And then I think we use the term like a micro.
What unit of time when you talk about holidays? So it seems like there is maybe like some logical separation there that we're not accounting for saying that maybe like a schedule and a holiday or similar but not quite the same kind of thing to me. They feel different. hacking free game Okay. I'm going back in for the visualization mode and I think previously I was seeing like a calendar with this big event that covers the whole summer and then when I want to add an event in the middle, I just break it into two and put a new one in the middle. Maybe I should be thinking of it
instead having one big event that covers the summer and then kind of just over laying holiday on top of that closer to 12 were trying to go for Okay, what if I model it this way? I can have a table that represents holidays if its own separate tables and then keep the schedule is the way we've already described them. So then when we're looking up say what are the availabilities on July 4th, we first look at the holidays table and say are there any actively overrides are there any holidays today? If yes, then that is that day, I believe it's really just a
special case and then if we're on say July 3rd, then there are no holidays. Therefore we fall back to what is the current active? What is the current active holiday schedule rather that feels like a more elegant solution, especially if we think of like maybe the UI that would naturally fall out about of like having you know holidays be distinguished from like schedules that administrators might enter into the system and I think with that we only have one one feature left from our like initial prompt
which is being able to support multiple location. So if you were going to like modify our existing database table diagram Like I said a few things out of locations table there now multiple gems and I probably wanted Association to schedules because schedule for now per location imagine they don't all share the same schedule. Actually, I forgot to mention this earlier, but I think I would probably want her to validation on the schedule table to say that there can only be one active
schedule at a time. And then now I would want to have that build it more fine-tuned where it's one active schedule per location so has to be scope to a location and I would be something I would have to make sure I had some testing around because that seems like an easy place to introduce the bug that was very well tested. Maybe in association to the holidays as well. I don't know if we do different holidays at different gyms. That seems a little bit weird, but maybe that special promotions would be different. I don't
know if Target slightly different groups of people over the different gyms in so they would have different promotions. I think that makes sense. Yeah, I feel like that solution Kimberly elegant layout of like are more flexible scheduling Solutions, right? I think that's kind of his dad is just a table for me that we made the right choice in the in the previous question like architecture is now they're expandable. I think what that I have gone through all the questions that I had for you to have any questions for me.
What are the next steps for me after this so usually there are two more steps after the first being a part of you so you'll get a link to get a project still have an open ER on it. The project is based off of what I thought but internal And you're asked to leave any feedback any questions try and review at the way that you would just like a normal for okra and then after that we have a parent interview, so you'll come in we try and do them on Fridays. But has internal time where we work on investment project. So you'll pay with someone in the morning
and then have lunch with the team and in the afternoon you apart with someone else is that mean I might end up hearing on like a lot of our Friday projects or a lot of are open source projects are born out of things that we started on Friday things that you know, we wanted and we have some time and space to create them. So it's a very real possibility. I am curious as you mentioned earlier. There's a pull request review phase. I feel like I've not seen that out interviews before anything. I should like watch out for their liking out 88 hidden Boggs. I need to
find or something like that. I just like like a checklist of things to make sure the best interview where we want it to be discussion-based and we're just looking for how you might approach these kind of problems on the code of you were also looking to see what kind of things you look for. Like how you communicate your feedback code reviews are really important part of being a developer. So we're just curious about You know how like how you might go about performing a porpoise or for me? I
like the team collaboration and how that works that we think it's me. Ya. It's a really important thing. It's all about 2. Tiffany other questions, or could you maybe just for walk me through what like a week in the life of a average stop by developers? Like I can walk you through a week in the life of Rachel very exciting. So from Monday to Thursday, I work on client work. What that means for me to you right now, is that a pair in the morning with another without developer and then after lunch I'll continue
whatever we are paragon just by myself around Spirit. We take a coffee walk, which usually for me doesn't involve coffee. Just an excuse to go outside and get some fresh air. I find that when I take some time not looking at my computer everything kind of sort itself out. And so when I get back to it all my problems seem like they're fixed and then on Fridays, I've been working on my rock on stock Solutions. Thank you. I'm very excited about it were a lot of work into you know, like I was saying make it more collaborative make it closer to that work that you might actually be doing
and we're hoping that is useful to other people. I have to say it has been one more funny interviews I've done so I'm glad you're going to get a chance or share that with the wider world so I can put that we're all set. All right. Thanks for having me. All right. Now that Joe Olive Garden, it's probably a good time to fill out our interview rubric while the entry was still really fresh in my mind. I'm a big fan of a through brick. I find it helps me put different parts of the interview into perspective. So
let's get started. Okay, so all these questions are asking me to kind of identify what level I think Joe on with yet. So expert practitioner Apprentice. So for this first question was a candidate able to talk through different strategies for integrating onto new project. I think through all had a lot of really great techniques for maybe getting to know he didn't really talk through like enhancements that you might be trying to make like fixing any bugs in like the onboarding docs or fixing any test morning, but I also didn't promise him again for that after he finished talking about
how you get to know cuz base So I think for the question he's probably a practitioner. All right was the Canada able to the final project product? And were they able to justify and validate their decision? I really like how to draw answer the fucking this question. I like that. He not only talk through features that he would keep and why but he also talks about how the way that we deploy to reproduction affects what might fit into an MVP which is I think
really important or not something that all candidates mentioned. So I think he's definitely an expert here. So the next question is was Joelle able to model of complex objects in a domain. So this is a little interesting. I think he really quickly came to a good solution for our MVP. I really liked that he had two approaches and I can use his real world experience to kind of Define which way he would go and who they will also come to a good solution for the
scheduling component initially. The solution was a little clunky but I think when we talked it over he got this something that was really nice for this. I'm going to say that he's a practitioner again that feels Feels Alright Alright and for the last question was the Canada able to talk through the pros and cons of their technical solution. I think the general did really well here as well because he didn't want to ask him to talk to your phone. Admin would enter a holiday. He's really able to quickly identify what the disadvantages to his
pollution are even if you have like a little bit of difficulty coming up with a more elegant solution. So I think that you're all as an expert here as well as overall. Do all did really great on this interview and that probably we should try and hire him or at least bring them in for I'm going to give him a phone call. hydraulic So after our interview, I felt really good about how you did and I would love to have you come in for a code review. Okay, perfect. So I think with that.
We are also I hope that this has been helpful seeing how we do things here about butt and if you think that it's a better way to interview. You should try going through it yourself. You can apply by going to stop at. Com jobs and feel free to reach out to me or do well or I don't have a big social media, but your mother is on the screen. Thank you so much.
Buy this talk
Access to all the recordings of the event
Buy this video
With ConferenceCast.tv, you get access to our library of the world's best conference talks.