As we continue taking on tougher challenges with bigger clients, we wanted to find effective ways to grow our engineering organization from the ground up.
Apprenticeship programs were a hot topic, but it was hard to find stories of sustainable success. How do you begin to implement an apprenticeship program? How do you decide if you should? What do you need to know? What should you commit to accurately measure its success and impact?
We had a lot of questions.
So in December 2015, we kicked off our modern apprenticeship program (MAP)—an intensive 3-month program—with 3 amazing engineers (Armando, Bridget, and Sam) in our cohort. It was a part of a large initiative called “Clique University” that has since become our hub to share any and everything we learn.
The goal: experiment with the best ways to train new engineers on our unique process to developing enterprise websites and applications.
We learned that a successful apprentice program impacts more than just the engineering department, so we wanted to share the challenges and lessons from all the people involved.
In this article we’ll cover:
- How we structured our program—from recruitment to hiring
- First-hand reflections from our apprentices’ point-of-views
- Benefits, risks, and challenges of starting an apprenticeship program
- 4 things we learned from our apprenticeship program
How we structured our program
Our program included four phases: recruitment, onboarding, the program itself, and hiring. Our goal was to get a clear answer to the question, ‘can we train this person to be a great full-time hire three months from now’?
We knew that a program this challenging would require a talented bunch with the right mix of technical confidence and humility to learn and grow in a professional environment.
And so we started our search.
Finding that unique combo required interviewing more than 30 candidates from all over Chicago with both traditional and self-taught backgrounds.
After we selected our candidates, in their first week, they worked on everything—from PHP to prioritization. They were given primers on Apache and quickly moved to MySQL. But being a contributor isn’t all about technical skills. They learned about our processes from our UX Architect, worked with Clique’s founders and team leads on prioritization, and reflected on the interpersonal skills necessary to be effective in this environment with the Head of Education.
Each apprentice was paired with a mentor for the full 10 weeks of the program. Our engineers led sessions to introduce the apprentices to the technology. Each week, they were assigned week-long projects to explore, learn, and get feedback on their progress. Throughout the duration of the program, they were also assigned single day challenges to grow specific skills. As they progressed over time, they were given more autonomy.
Finally, based on our assessments, project evaluations, and mentor feedback, we made the decision as to whether to extend offers.
We brought three apprentices into our program, and ultimately hired one of them.
First-hand reflections from our apprentices’ point-of-views
After the first week of our program, we asked our apprentices to reflect on their first week as they got acquainted with our process of developing websites and applications. Learning about their experience first hand helped us see into their worlds—what was challenging, what was helpful, and what they wanted to learn more about. Their reflections helped us refine and improve the program along the way.
“The first and last week of an experience are always the most interesting to me. They both harbor a unique collection of feelings that the other weeks can’t replicate. You almost touch on the full emotional spectrum, and that’s okay. This is how you become great at what you do: you don’t avoid emotions, you welcome them. Being born (into the programming world) a rails developer and now having to learn a new set of languages and frameworks can be daunting. But wasn’t learning to program in first place daunting? How about Geometry? Walking? Speaking? We have been learning our whole lives, and this is no different.
I appreciate the opportunity that Clique has provided me and I must repay them with bringing the drive to create with me everyday. I was fortunate to be selected to participate in this program and bringing anything but top tier curiosity would be a mistake. Knowing what you don’t know is the first step in a long fulfilling journey.”
“Along with all types of nervousness that goes with jumping into something completely new, I was the most anxious for the technical components of coming to Clique. I was curious about whether my skills in Ruby were as transferable as I had been told by more experienced developers. I had done the prep work on Team Treehouse about PHP and felt good about the syntax. Even with this boost of confidence, I was ready to see how it would really go once I had to tackle more complex problems. After setting up our environment, we jumped right into creating a CRUD app. The goal was to add, edit, and delete users. This was something I had done many times before in Rails and Sinatra. Now it was going to all be in PHP. Even with the concept being familiar, what threw me the most was that we weren’t using any framework! Even with the unfamiliarity of building a CRUD app without a framework, I was able to connect to the database, run commands to interact with the database and display all my content on a web page using PHP.”
Throughout creating this small app, there were definite feelings of confusion. It’s easy to get intimidated when everything looks and feels unfamiliar. In instances of self-doubt, I kept telling myself: “You know how to build this, you’ve done it before. You are building the same application just with totally different pieces.” This project reinforced for me to rely on what I know and to use this base knowledge to always explore what is new. Throughout Week 1, I have definitely experienced how my skills as a Ruby developer are applicable to building in PHP.”
My main concern going into week one was my technical level with PHP. I was told the same concepts from Ruby apply to PHP but I was still concerned as it was a new programming language to me. Above all else I did not want to fall behind in week one and have to continuously play catch up. One of our first projects that required PHP was to build a calculator. I was concerned at first because of all the logic that goes into programming a calculator, but quickly realized this is a great way to become more familiar with the PHP syntax.
The calculator ended up being a tough challenge but one I learned a lot from. I have a good grasp of switch statements in PHP and am becoming more familiar with classes and methods. As an added bonus I increased my jQuery knowledge, as it was required to make the buttons on my calculator respond to a mouse click. Overall week 1 really helped solidify basic PHP concepts that I know will be crucial to the weeks ahead.
Benefits, risks, and challenges of starting an apprenticeship program
The program wasn’t just beneficial for the apprentices, but the mentors as well. We couldn’t predict the effect the program would have on our own processes, understanding, and development.
Mid-level engineers got to spend more time learning and growing
It prompted our junior engineers to reevaluate their own processes. When you’ve been engineering for some time, it can be a challenge to articulate and teach someone how to turn a design into code. This program allowed them to reexamine their workflow and relearn the basic skill of teaching.
Junior engineers stepped up into new leadership roles
It gave them a taste of managerial experience. As engineers, there’s often a lot of screen time, but not as much face time. Teaching and interacting with apprentices helped bridge the gap to becoming a senior engineer that requires not only coding but leading a team, too.
New ways to grow our engineering team (besides traditional hiring and recruiting)
The Apprenticeship program helped hire from a more diverse talent pool coming from non-CS programs, and still find quality candidates. In addition, it increased clarity around our hiring needs. By testing out applicants through our program, we were able to illuminate what gaps we needed to fill and where we could use more experience on our team.
Time commitment from our engineering team.
For our team, there was still real work being done. Mentoring apprentices did eat into that time. For mentors, that meant about 2-3 hours per apprentice per week. And for the person organizing those activities, up to 10 hours per week. An apprenticeship program is definitely an investment.
Cost of paying apprentices
There is, of course, the monetary cost if you decide to pay your apprentices. If you don’t pay them, it can be harder to fill positions, and of course, sometimes the pool of applicants may not be as strong. Paid roles however tend to receive more applicants. However, there are no guarantees your hire will work out.
Quality of work
Solving real problems with stakes and constraints is the best way to learn. But that can come with real consequences, too. Mistakes made by apprentices can result in difficult conversations with clients should they put project timelines at risk.
4 important things we learned from our apprenticeship program
Apprentice programs are definitely en-vogue as more and young engineers are graduating looking for their first job. An apprenticeship is an amazing learning opportunity to speed your learning, build a mentor network and add real projects to your portfolio.
We selected three high potential candidates to invest three months learning and growing with us. Along the way, we picked up some wisdom about how to create a successful program for your apprentices as you grow your engineering program.
Support the mentors
Mentoring apprentices isn’t intuitive (“Should I answer the question for them or point them to resources where they can figure it out? How often should I check in?”) It’s beneficial to have mentors to learn from, too. We learned from seasoned engineers how best to support our apprentices. Many people shared advice to help us build mentoring process, including (but not limited to) Joe Mastey, Jill Lynch, Blake Wesley Thomas, Amelia Pitluga, Tom Benneche, Startup Institute, and DBC.
Set appropriate expectations
Setting appropriate expectations is hard, but it’s your responsibility. Apprentices will not know exactly what it takes to be a great engineer at your company, and, in our case, we didn’t know either. We had to learn along the way, and it was hard work. Devote time with stakeholders to clarify exactly what someone needs to demonstrate to be hirable.
Give frequent feedback
Being an apprentice can feel like driving through rural Indiana with a knowledgeable co-pilot but is too busy to do anything more than keep you from running off the road. If you do not build short feedback loops for apprentices into the program, they will waste time on roads that aren’t helping them learn the specific skills you outlined in #2. We found that 1-on-1 check-ins at the end of each week’s project gave us an opportunity to give and receive feedback and reinforce expectations.
Be as transparent as possible
If you’re not likely to hire all the apprentices, communicate that. The more ambiguity you can remove around what happens at the end of the program, the more they’ll be able to focus on the tasks in front of them. People approach this problem differently depending on the structure of their program but the best programs have clear outcomes and are supportive of those who don’t join the team. In our first program we made it a priority to write recommendations and help with job searches for the apprentices we didn’t hire.
About the Apprentices
After years of soul searching, Armando found his calling through a development bootcamp which has lead to him becoming a software developer. The unique process of thinking critically and creating was very alluring to him; few careers offer such a fulfilling experience. Armando’s goal with software development was the same as any other venture he undertook: to become very good at what he does.
Sam is originally from Chicago, graduated from the University of Wisconsin with a degree in Economics and started his career in banking. But it turned out banking was not for him, and he signed up for Anyone Can Learn to Code to change careers. As an apprentice, he worked to become a contributor on the engineering team. Outside of work he loved to play basketball and run along Lake Michigan.