Start your own apprenticeship program
This is mostly a write-up for my talk for Ruby Conf Thailand 2019. The slides are available at: https://speakerdeck.com/aemeredith/start-your-own-apprenticeship-program.
Everyone wants to hire senior developers
Demand to increase head count in many tech companies is rising, even with the difficulty of hiring for top talent. To counteract this, some big companies have removed the required college degree barrier to entry.
Take tech giants Apple, Google and IBM, for example. These companies no longer require a four-year college degree for many of their positions, including those in some technical roles. Loosening up this age-old requirement opens the doors for thousands of potential hires.
With online training and all the various bootcamps around, our industry has a surplus of bright junior developers, but a lack of open junior positions.
Your people are your most valuable resource. You can only innovate if you have the right talent with the right skills. Current traditional hiring practices are not meeting demands. Companies need new solutions. Implementing an apprenticeship or up-skilling program are such solutions.
In 2017-2018, I ran a six month apprenticeship program for Hooroo, now Qantas Hotels, in Melbourne, Australia. It was considered a great success and we are currently examining options to run it again.
According to Britannica, an apprenticeship is…
training in an art, trade, or craft under a legal agreement that defines the duration and conditions of the relationship between master and apprentice.
An apprenticeship program allows employers to evaluate talent and provide apprentices with a structured learning period. The nature of an apprenticeship is to allow the apprentice to learn a great deal about a company and the industry in a short amount of time under guided mentorship.
Apprentice ☞ Journeyman ☞ Master
Apprenticeships have been around for a long long time. They were in a way of a contractual agreement between the master and apprentice, and lasted between two to seven years, depending on the particular trade after which the apprentice became a journey man.
The term derived from the French word for day i.e. "journee", and basically meant that the journeyman would be paid by the day for their work. After a period of extensive experience the journeyman could submit a piece of their best work to the appropriate guild for assessment and approval. If this ‘master piece’ was accepted they could become a master craftsman and could set up their own workshop and train apprentices.
How is it different to an internship?
By definition an intern is a student or trainee who works, sometimes without pay, in order to gain work experience or satisfy requirements for a qualification.
So generally speaking, interns are usually students, on a short term engagement, focusing on one specific project, with implication that they will be doing the "dirty work."
On the other hand, an apprentice is a person who is learning a trade from a skilled employer, having agreed to work for a fixed period at [relatively] low wages.
So we could say that an apprenticeship is:
- on the job training, which
- focuses on sustainable growth;
- a longer term engagement,
- with real application, and
- dedicated mentoring;
- involves classroom instruction which relates to occupation,
- allowing the apprentices to hone their craft;
- it also involves some kind of talent evaluation;
- and completion of apprenticeship usually results in a full-time role.
Why should you start one?
Hiring juniors makes for better team workflows
- Improves diversity: opens the candidate pool and helps foster and support diversity initiatives. Increases diversity of background and skill of potential candidates.
- Improved performance and increased productivity, because diverse teams are proven to perform better.
- Writing simpler explanations contributes to our own better understanding of the codebase.
- Things get documented better.
- Communication becomes explicit.
Hiring juniors supports team development
- Improves retention of existing team members.
- Ensures employees are trained to best practices and company processes.
- Provides employers with a competitive edge, through a well-trained and flexible workforce.
- Addresses the skills gap between seniors and juniors.
- Supports the scale of fast growth companies.
- Saves time and money on recruiting and on-boarding talent.
What do you need?
At a minimum, an apprentice, a mentor, and a company that’s willing to make the investment.
You will need senior leadership support, a company leader who wants to build a talent pipeline to grow the company. It's important to understand that it's going to take time and money to ensure your program’s success.
You will also need a team that is willing to mentor and work directly with the apprentice. Apprentices succeed when the team is dedicated and committed to working with a beginner.
Either a person to drive the program, and/or a mentor and apprentice, that are invested in the success of the program.
How do you start a program?
Step 1: first you need to understand your company's needs.
Some key factors to consider:
- Program length (3/6/12 months)
- Number of apprentices
- Who's in charge of what
- What should the apprentices know before they start
- What should they learn in the program
- How they will learn it
Then you should also develop a plan:
- Define realistic expectations
- Set timeline
- Plan how to source and hire apprentices
- Develop processes and logistics
- Set a budget
Step 2: source candidates
- How will you recruit and screen candidates? And ensure all requirements are met?
- Define what you are looking for in an apprentice
- Decide pay grades
- Decide what channels to promote your program in
- Define the hiring process
- Adjust the hiring process for beginner level
- Set dates in calendar
- Select a hiring committee
- Make the hiring a team decision
I will write about the hiring process we employed in a follow-up post.
Step 3: develop a program
Some questions you should ask:
- What kind of training will be delivered?
- What to include in the curriculum?
- What competencies should the apprentices exit with?
- Who will be the program coordinator?
- How will you measure and evaluate apprentice outcomes?
Step 4: how to guide
- Set realistic expectations.
- Prepare the team and mentors, for example I did a session with the team on how to pair with a junior. Same session was given to the apprentices. It gave everyone the same foundation and a common shared language.
- Consider how to on-board the apprentices. I started with introducing many of the engineering workflows around actual coding, for example: how to approach learning, how to pair program, how to do code reviews and give feedback, how to approach debugging in Ruby, how to run retrospectives...
- Consider how to deliver the program and training.
Step 5: define success
You will need to define what success looks like for you, so that you will know you are on the right path.
You should also consider how to assess the apprentices' progress. Some ideas can be:
- Breakable toy project.
- Assessment as a project with set requirements for scoring.
- Individual assessment based on personal confidence levels.
- End of program quiz.
Quite a few companies have some kind of program to support new people, whether it is REA's graduate program, MYOB's DevelopHer, ANZ re-skilling accelerator, or ZenDesk's internship program. I would like to mention a couple in particular, Envato and Culture Amp.
Envato got a legal exception to be able to advertise for women only. For their apprenticeship program they hire two women developers, who then have a dedicated mentor to work with.
Our approach has emphasised an immersive experience, giving our apprentices real tasks as part of our engineering teams while paired with a programming mentor. It means they’re involved in everything from planning sessions, standups and retrospectives, and subsequently 'pair' programming with their allocated mentors.
As part of the program, the apprentices do team rotations, and completion of the program is dependent on whether both the apprentices and their instructor deem them ready.
Culture Amp's Junior Engineering Program has run twice over the last three years. Each program cohort included ten junior developers. Each developer apprentice was hired for a specific team. Initially, they split the work week up to spend two days with the program, and three days working in their team. They soon realised that this didn't work so well because of too much context switching. Therefore, the program changed to one training week every three weeks.
Culture Amp's assessment of choice was a Rails project with set requirements that amounted to 100 points score.
My apprenticeship program: the Engineering Academy at Qantas Hotels
The program ran for six months, and was a paid apprenticeship. It was a blend of structured learning and on-the-job work. We alternated academy weeks with product work, and found that full weeks with the team gave the apprentice developers enough time to take ownership of story cards as well as a break from the intense learning periods.
Most academy days also consisted of theory sessions, code-alongs, and self-work periods. You can find the full curriculum outline at https://trello.com/b/oRii8I9h/apprenticeship-programme
The program included:
- Set curriculum.
- Pair programming.
- During academy weeks, we started each day with a coding exercise from Exercism. We limited this to one hour a day, or our mornings would be gone without notice.
- We followed the Gradual Release of Responsibility model. We used mob programming initially, continued with pairing (two groups of two) and within two months had moved to doing the exercises individually. Each day we compared the solutions and discussed suggestions for improvement.
- Student lightning talks on small topics, which they then also gave at local meetups.
- Technical book club: we read three books during our six months, and alternated who ran the session every week.
- Breakable toy: the developer apprentices did a personal project (following Apprenticeship Patterns guidance), where they practised what they learnt, and was used for final evaluation and assessment of their knowledge and understanding
- Fortnightly 1:1 with me and with the engineering manager on alternative weeks.
- Fortnightly retros on how the apprenticeship program was going, and how we could improve it along the way, for example less homework, and more time to practice in class.
- Each developer apprentice was matched with a mentor buddy, someone they could chat to about their progress and ask any pressing questions.
- Team sessions: getting more buy in from the team by running some of the more in-depth sessions, for example getting the dev ops people to teach about AWS.
- Team rotations for the practical work part, so that the developer apprentices could experience how different teams work. This also helped with knowledge transfer and shallow silos for all the engineering teams. The team got to know the apprentices, and they became a part of the company.
- Placements: at the end of the program, placement based on organisational needs and apprentice wishes.
As a result, all four apprentices have selected teams, and have been productive members of these teams for the past two years.
Building a developer apprenticeship in your organisation creates a continuous learning environment. It helps all your engineers understand the technology stack, culture, and shared vocabulary. It helps with team engagement and retention. It means investing in the team. You will benefit from introducing fresh perspectives and ideas. You will recruit great candidates that you will help shape your company's future engineers. So why not start an apprenticeship program today?
If you're interested in hiring for, developing, and/or running an apprenticeship program in your company, let's chat!