I get asked very frequently about my policy at Zid that we host exactly one intern/trainee at a time. The whole 6-month “batch” is one person. People at Zid and externally would say things like: why not have more? There are more people in the team who can coach. We need more capacity to work. Which are all valid thoughts, but they miss the context of what I am trying to achieve with these individuals.
I will discuss my perspective on the making of excellent engineers, which is a personal goal of mine that I have the virtue of being able to pursue as part of my job at Zid. One note before I get into it, the title might not be so accurate. I believe what I do would help push the person into the top 5% of engineers, but it is gonna be up to them to push themselves into the top 1%.
It mainly comes down to the fact that we are not a boot camp. Bootcamps admit people in relatively large batches, hoping that the majority will graduate with enough knowledge of the curriculum to secure a job. Output is consistent and predictable for both students and hiring companies. Every student more or less receives the same amount of attention and help, and they all go through the same material regardless of their background or competence.
We want to focus and personalize the experience for each individual’s needs and skills. Having a big class of interns means that a mentor’s attention would be divided among them. Each individual has different qualities and needs time in different areas. The mentor would either give generic feedback to everyone or put most time on a single individual, neglecting the rest.
One might ask what kind of attention I am referring to. The internship is not about getting a few small tasks assigned, then senior engineers give a few code review comments. That is just day-to-day work for anyone. I assign interns reading assignments in related areas where they need to read the chapter or paper, summarize it, and then object to it. This might sound like a school assignment, which I have to admit, it is. However, I choose topics that have direct applications and examples from our systems.
The point of this is that writing disciplines one’s thinking. When they have to articulate all the mess of ideas in their head, put them in writing, they have to be more thorough. The point of summarizing is to ensure that they charitably[1] understand what the author is trying to convey, and do not jump to conclusions based on pre-conceived notions[2]. Then the objection is to practice writing a well-articulated rationale, refining it, and defending it.
Reading, correcting, discussing, and objecting would all require time that cannot be divided reasonably across multiple people. Otherwise, feedback would be barely useful or would have minimal insight. Again, we are not a boot camp. We are not trying to be. We choose an individual and double down on our investment in them. Bootcamps try to graduate as many as possible who meet certain criteria.
So, what kind of individual am I looking for? I sum it up in two characteristics that influence everything else –Sharp and thorough. Sharp in the sense that they move fast. They get things without repetition and with minimal input. And thorough in that they go into details, they do not just take things at face value or only learn the big picture. Sharp and thorough people tend toalso be assholes. Some level of asshole-ness is acceptable, but there has to be a threshold[3]. We still want people to be confident and take pride in their work. I discussed how I test this in my post Thoughts on Technical Interviews.
The other thing we look for, as defined in our role competencies, is being able to “demonstrate above peer average knowledge.” Meaning that we want Someone who already knows more than the basics in their field. Someone who, for example, knows how to build a web app, design a database, and architect a system. We do not want to start from nothing; we want someone who is okay (based on our measure), and we make them excellent.
I think one critical point that allows us to hold the bar so high is the strict rule against planning based on intern headcount. Interns are an “extra” capacity, a long-term investment. Leads and PMs are explicitly told to plan based on the full-time team members. And more importantly, we do not brag about the number of batches and quotas that we filled with interns. We do not think that this is something we should be chasing. These two reasons, combined, allow us to take our time interviewing tens of candidates and say no without fearing that we would miss a target.
By product of this competitiveness is exclusivity. I do make sure that every candidate understands the acceptance rate of the role, and the expectation out of them if they get the offer. I noticed that this exclusivity ensures that interns take their role seriously and want to succeed at it.
To sum it up, we do not need to hire interns; we choose to invest in them. We do not have a set program; we create a learning path for every individual to fill their gaps and capitalize on their interests. And lastly, look for the people who are sharp, thorough, and have above-peer knowledge.
I have to say that smart kids will tend to do that very often. Assuming that they already know everything, and they already get it. Part of this practice is to discipline this behavior. And more importantly, it is to remind those smart kids that there is always more that they do not know. NO ONE knows everything. ↩︎
Seems like I need to expand on this after some feedback from colleagues and friends. It is difficult to precisely define the threshold. Some people might interpret openionated as asshole-ness, others might see directness and vocal as asshole-ness. The point is that some combination of these qualities is needed and is good. The challenge, for me, would be to manage these qualities to achieve the right balance. ↩︎