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.
Upserts in Redshift
Redshift doesn't support upserts (updates + inserts) but using a few tricks we can implement it anyway.Wed Aug 28 2019—by Erik Bernhardsson1 min read
Modeling conversion rates and saving millions of dollars using Kaplan-Meier and gamma distributions
At Better, we have spent a lot of effort modeling conversion rates using Kaplan-Meier and gamma distributions. We recently released convoys, a Python package to fit these models.Mon Jul 29 2019—by Erik Bernhardsson8 min read
I gave the business what they asked for and they never used it
An addition to the long list of unused ML projectsMon Jun 29 2020—by Kenny Ning3 min read
- project management