One of the primary ways we grow our team is through apprenticeship and the benefits we gain from this are huge. Apprentices have an infectious desire to learn, and an excitement for every new technology and skill they acquire. More experienced folks get an opportunity to teach, and in turn, learn new things themselves. In short, apprenticeship and mentoring are in our DNA.
The apprenticeship program application will be open from March 1, 2018-March 8, 2018. Apply Here.
Hiring apprentices is in some ways very similar to how we hire non-apprentice developers. The key difference, of course, is that in almost all cases an apprentice candidate doesn’t have the same work experience to evaluate.
We ask all apprentice candidates to fill out the same application. It’s a fairly short online form, but it asks some important open-ended questions. This is the only way to get into the pipeline. Because we believe ideas and written communication are important, we look closely at each answer.
Apprentice candidates typically do not have a large body of work in software development. In order to fairly and accurately evaluate a candidate’s code, there is a small code challenge that we ask candidates to complete. This challenge is meant to be completed in a few days and has a similar structure to the consulting work we do, with various business rules and client requirements to fulfill. We are primarily interested in how you think about problem solving and trade-offs.
Code Challenge Review
We have 1 or 2 developers get on a google hangout with you to discuss your approach to the code challenge. We may ask questions about various decisions made and the thinking behind them. We are looking for thoughtful answers and a willingness to reassess your choices. At this stage we try to narrow the field to just 3-5 candidates who will move on to the next step.
For those remaining in the process, we schedule 1 full day of pair programming and interviewing in our office. This gives us a great chance to see how a potential apprentice thinks, how well they work with others, their maturity level, and if they will communicate well in front of customers. We try to rotate the candidate so they have an opportunity to pair program with several members of the team as well as meet members of the design, marketing, and sales teams.
Just like hiring full-time folks, we get everyone who has evaluated a candidate in a room and discuss our experience with the person. We do a round of anonymous voting and then make a decision.
What We Look For
Ultimately what we’re looking for in an apprentice boils down to five things:
- A passion for learning and awareness of the ways you learn best
- Thirst to solve problems and help humans
- Focus on collaboration and team work
- Excellent communication skills
- Alignment with DevMynd’s values
Candidates who demonstrate these things will float to the top of the list. Past work experience (in or out of programming) is helpful, but not a pre-requisite.
There are many apprenticeship programs out there at companies like ours. In some ways we’re very similar to many of them, in other ways, we’re unique.
Apprentices are assigned a mentor who will be with them for the duration of their apprenticeship. This may be a senior developer or more junior depending on what fits best with the apprentice’s needs and learning style. Apprentice mentors are responsible for providing feedback and guidance to an apprentice throughout the process. Their primary charge is to help an apprentice design the ideal learning environment and make the most of their time.
The mentor does not exclusively or necessarily work alongside the apprentice on a project. The mentor role is more that of a guide, coach, and friend. The mentor will help coordinate with other project leads to determine how to help fill knowledge gaps. As an apprentice, you should expect to spend one to two hours a week with your mentor.
Mentorship is incredibly important to our team and the entire development team often volunteers to mentor an apprentice. Each person brings a unique perspective and we try to match based on what we think will be most effective. Because mentorship works so well and is so sought after, in 2017 DevMynd expanded our mentorship program to the whole company!
One of the goals of the program is to get apprentices to work on real-world client projects as soon as possible. It starts out with apprentices shadowing development teams. Apprentices sit with more experienced folks and just look over their shoulder. As an apprentice gains knowledge they begin to engage in more pair programming. Eventually, an apprentice begin taking the driver’s seat on small development tasks. We find this to be far superior to theoretical learning. Fundamentals learned through practical client work tend to be much more solidly ingrained. The net effect is that apprentices move more quickly to being “production ready” members of the team.
Depending on the needs and preferences of the apprentices and projects, we often take two approaches to dividing an apprentice’s time on client work.
- Switch projects every 2-3 weeks. This allows an apprentice to see many technologies, techniques, clients, and viewpoints. It can help give them perspective on the variety of ways software, teams, and clients work. However, for some people, it doesn’t feel like enough time to fully understand a technology or technique. This is more focused on breadth than depth.
- Stay on a single project for 2-3 months with designated personal time to learn and digest. This personal time may be worked out with your project lead. It may be a few hours at the beginning or end of each day or a certain day of the week for personal work. This allows an apprentice to dig deeper into technologies, process, problems, and people dynamics. However, for some people, it may not feel like enough variety of learning across technologies and projects. This is more focused on depth than breadth.
Please note: we do not charge clients for the work of an apprentice.
Client Interaction & Team Participation
Working on client projects is essential to an apprentice’s technical learning, but ultimately communication, interpersonal, intrapersonal, and general consulting skills are what sets a developer apart.
To that end, we don’t hide apprentices in a dark corner. We involve them almost immediately in client meetings – even occasionally bringing them on sales calls. It’s critical that an apprentice learns how to ask probing questions of a client, how to set reasonable expectations, how we think about estimation, and other nuances of building software at DevMynd. When apprentices get to observe the client interactions of more seasoned team members it inevitably imparts the value of customer satisfaction and delivery focus.
Within a team, apprentices are integrated like any other member. They are a part of stand up, choosing pairs, and coding each day and retros, design reviews, story writing, and estimation each week.
Perhaps the most essential component of any apprenticeship (and any job really) is feedback. It’s critical to know how you’re doing, what’s working, and where there is room for improvement. We iterate on a rubric of skills for apprentices and their mentor will review it with them weekly. Mentors and apprentices can then choose which outside activities make sense to work on and when. Additionally, feedback is always a two-way street. Not only is it important for an apprentice to receive feedback, but important for an apprentice to provide feedback on how they perceive the progress of their learning. People learn in different ways, and through different mechanisms; it is important for an apprentice to help shape their experience through feedback so that they may proceed in the optimal environment for learning. Weekly mentor meetings, retros, and 1 on 1s with project leads and the Director of Engineering provide opportunities to give and receive feedback.
The ultimate goal of the apprenticeship program for DevMynd is to invest in our growth as a company and in growing great individual developers. Our apprenticeship program is geared towards imparting our values, process and skills to new developers and designers who wish to join the DevMynd team. After 3-6 months, the team will discuss whether or not the apprentice is ready to graduate using the rubric and feedback the apprentice has also been reviewing. If the team feels an apprentice is ready to stand on their own as a consultant, handle technical issues, and deal with clients then we promote the individual to a full-time consultant position.
As a company focused on delivering very high quality services to our customers it is critical that the level of skill on our team stays balanced. If we have too many junior members of the team (or too many senior folks for that matter) we won’t match the level of expertise our customers require. To this end, we are cautious with how many apprentices we accept at any one time, always keeping the ratio of experienced to less-experienced team members in mind.
Unfortunately, this means that sometimes we have to pass on amazing candidates. But, the risk of getting out of balance is too great for both DevMynd and our potential apprentices. Keeping the apprenticeship program small allows us to give more attention to each person who goes through the program.
The apprenticeship program application will be open from March 1, 2018-March 8, 2018. Apply Here.
The schedule for Spring 2018 apprenticeship application review will be roughly as follows:
- March 8, 2018: Application closes
- March 16, 2018: Code challenges sent
- March 22, 2018: Code challenges due
- March 23, 2018: Code challenge reviews scheduled
- March 29, 2018: In-person interview notifications
- April 2-6, 2018: In-person interviews
- April 10, 2018: Final notification sent
Hear from own apprentices!
- Survival Guide for Learning Software Development (When You Don’t Feel Like a Developer) by Erin Hochstatter
- Punching Fear in the Face: How Apprentices Should View Programming by Shamyle Ghazali
- Jump Right In by Matt DuBois
What experienced developers have to say