He took the stand in favor of apprenticeship programs at tech companies, arguing that apprenticeship grows (and attracts) awesome people. That said, he offered some guidelines.
Ingredients of a Good Apprenticeship Program:
- Someone who is eager to work with apprentices. That person needs to be part of a team that is open and willing to incorporate someone who is going to have a short-term (1 week to 1 month) negative hit on the team’s velocity. The company’s owner also needs to be open to investing to such an apprentice.
- A sustainable ratio of apprentices to senior developers. (A personal addendum from me: A full-time programming teacher, in a class, cannot exceed a ratio of 1 teacher to 4 students. After that, the help queue grows faster than teachers can knock them off. So, if you want someone to spend a quarter of their time mentoring, that jumps to 4 teachers per 4 juniors—or a 1:1 ratio).
- Culture over curriculum: rather than focusing on what to teach them, the company must prioritize how apprentices are taught and incorporated.
- In the trenches: the chance, for the apprentice, to work with the company’s production code and learn a real production workflow.
- Pet Projects: a personally-driven project that the apprentice can work on, make mistakes on, and make decisions on. A place to test crazy new technologies and become a knowledge asset to the company.
- Milestones: to track progress and motivate apprentices.
- Feedback Loops: The chance for the apprentices to get feedback, from small loops (pair programming) to larger ones (milestone meetings, retrospective meetings, and pet project code reviews)…and, for the company, to decide whether the person is working out well to continue apprenticing or to get hired—or if not, to be asked to leave. This rigor makes apprenticeship easier on companies, avoiding awkward situations where things drag on for far too long.