When I joined Better last November, the engineering team (of sixty people at the time) didn't have a formal internship program in place. Through a contact who is an intern program manager at Hunter College, I found out that we could get "free" interns through NYC Tech Talent Pipeline. After enlisting the help of my fellow engineers and several engineer managers, our team interviewed five candidates from the TTP bootcamp. We finally made an offer to Xing, who was a standout among his peers.
I approached hiring interns the same way I would hiring other engineer roles. We wanted someone who is smart and driven, someone who will fit into our culture. I utilized the same tests we use to interview engineers - a code reading and pair programming exercise in the candidate's language of choice. At the basic level, programming required understanding the code on the page and how the code base structured. We also wanted to observe how the candidates write code and leverage hints from the interviewer. Xing Tao Shi did very well on the code reading and satisfactorily on pair programming. We decided to make him an offer because he was ahead of the other four candidates.
Sourcing and hiring an intern was only about ten percent of the journey. Onboarding and training an entry-level engineer constituted the most critical part. Learning from my previous experience managing and mentoring interns, I set down some ground rules for the kinds of tasks we'd be assigning to our intern. The first expectation to set for my team was that we would be spending a lot of time teaching our intern. We shouldn't expect interns to create a lot of business value or work on time-sensitive projects even though they would be pushing code to production.
I see training interns as an investment not only in the the company's future candidate pool but also in the future generation of software engineers. Mentors provide interns with knowledge and practices that are not covered by their school curriculum. When Xing came to us, it was obvious that he had a lot to learn, from the company's business model to how we utilize JIRA to manage workflow. There are practices we take for granted during software development that aren't obvious to an intern, e.g. filtering files by name or grepping for exact variable/function names in the project. Working with git also proves to be a challenge for new folks even if they are somewhat familiar with it. Since the entire engineering team works on a monorepo, we rely heavily on the feature branch flow to collaborate.
During the 2020 spring semester, Xing works at Better fifteen hours a week spread over two days. He had a lot to learn but I was pleased to see the progress he made over. Being diligent was, out of the question, key to becoming a successful intern. However, there was more to it. I value the curiosity and thoughtfulness that Xing demonstrated. He asked good questions, the kinds of questions he couldn't easily find answers to through Google or StackOverflow. He asked about things that seemed a little arbitrary or didn't quite make sense. To me this showed a lot of promise. Even though programming dealt primarily with "logic", there are a lot of conventions built into languages, frameworks as well as business logic. I appreciated the fact that Xing could recognize these and ask follow up questions.
Read more about Xing's experience at Better.
Wizard — our ML tool for interpretable, causal conversion predictionsBuilding an end-to-end ML system to automatically flag drivers of conversionFri Dec 27 2019—by Kenny Ning6 min read
Engineering a Diverse Team: Taffy Chen and Jimmy FarilloSoftware engineers Taffy Chen and Jimmy Farillo launch a new blog series to showcase different perspectives on the Better engineering team, and the ways they’re working to make it even more diverse and inclusive.Fri May 14 2021—by Taffy Chen and Jimmy Farillo2 min read
Using ImageMagick for PDF redactionAutomating document redaction with a classic command line toolThu Aug 06 2020—by Robert Brownstein3 min read