Adarsh Pandit

Software Developer

On Growing Great Developers

By Adarsh Pandit in writing

You Can Either Steal Great Developers or Farm Them

To grow software development teams, you can either steal excellent developers or you can develop them internally.

Everyone tries to steal but few invest in farming new developers. Those who do have lower salary and recruiting costs, better learning cultures, and improved diversity.

Here’s why you would set up an Apprenticeship program and how to do so.

If you want help setting up a program like this, email me!

Apprenticeship photo courtesy of WOCinTech (wocintechchat.com)

Why Steal

  • It’s straightforward. You have a need for help, they have skills you probably need.
  • You can buy your way out of the problem.
  • It is how everyone has hired for as long as anyone can remember.
  • Short-term impact. Expert developers can get ramped up quickly and help you ship much faster.

Why Farm

  • Cost - Creating a developer growth pipeline is much cheaper in the long-term. Apprentices are cheaper than experienced developers and will take a salary hit for the learning opportunity.
  • Loyalty - Apprentices are extremely loyal and less likely to turn over. You took a chance on them and they will always remember.
  • Diversity - The experienced developer pool is very homogeneous. The junior pool is not. If you can turn juniors into seniors, diversity will improve.
  • Vibe - Apprentices add a lot to company culture. Senior devs love to teach and coach, so give them a chance to do so. Also, Apprentices have an energy and optimism the old folks may have lost over the years.

Personal Backstory

Back in 2012, as I tried to break into the software industry as a developer, I got a break. That break was an apprenticeship at a local development consulting firm. I’m still not clear how I got it, but it was amazing.

I made $100/day and worked 8 hours shadowing a developer consultant at a client. In the evenings, I would stay up late Googling terms I didn’t understand during the day and practicing new techniques on toy apps. It’s made all the difference to my career and I’m thankful every day for the shot.

After getting hired as a full-timer (and later, serving as manager), I had a chance to interview candidates and see which ones succeeded.

This is what I’ve learned about how to successfully run an apprenticeship program.

What is a Apprentice?

  • A junior developer with some experience. You will pay this person and train them for a few months with the goal of hiring them as full-time employees.
  • They should be able to write and deploy working software, however simple the app is or rough the code is.
  • Boot camp grads are usually a good fit. As of this writing, I recommend Turing School or DevBootCamp.
  • Everyone from fresh college grads to mid-career switchers are great candidates.

How do I Interview Them?

Use the same interview process as your full-timers

Give them the same questions/challenges as your full-timers but evaluate their responses with this lens:

“If I coach this person for 3 months, would their answer meet our expectations for a full-time junior developer?”

This involves a bit of imagination of what someone’s learning vs. time slope is before you get to work with them.

What the Heck is a Learning vs. Time Slope?

Through experience, I have discovered that each person has an internal rate of learning. That is, people can accumulate and apply new concepts at a consistent rate. Imagine it looks like this:

Skill_vs_time

For any given candidate their slope will remain constant over time, given ongoing support. (AKA “Pandit’s Postulate”)

You can use this imaginary non-quantifiable slope to both judge if they are good apprenticeship candidates, and later, if they would be good full-time hires.

The trick here is to use an interview to figure out what the candidate’s slope is. Good ol’ y = mx + b.

How do you do that? Well, you get two data points, somehow, and solve for m.

You can look at their public code samples noting the dates, and watch progression. You can also see if their toy applications increase in complexity over time.

But these are guesses. You can also run an experiment to get the data.

A Hiring Case Study

Once upon a time, a designer applied to work with our team. She was very skilled as a visual designer, working mostly in print/media at ad agencies. She was also professional, proactive, and the team really liked her.

The role I was hiring for required front-end skills, which she did not have. I gave her some homework saying something like “See if you can rebuild your portfolio site using these tools and deploy to GitHub Pages or Heroku.” I gave this homework to lots of non-coding applicants.

She was the only one to ever respond, and just four weeks later. Now I had two data points: (0,0) and (4 weeks, learn enough front-end to make a portfolio site).

Solving for a non-numerical m value, I guessed she would be ready for full-time work in 3 months. Turns out, it was 4 months, but her slope kept constant (or improved!). So as a result, I got a top-notch teammate and culture for a pretty small investment.

Tactics for Starting Your Apprenticeship Program

  • Put up a separate landing page which feeds into your full-time hiring pipeline. Run ads against it or blog/tweet about it.
  • Select for humility and confidence. You want candidates are willing to take a step back to learn, regardless of their past work history or accomplishments.
  • Only take candidates excited about the apprenticeship opportunity. Focus on people who want to learn/grow. Otherwise you’re selling something to a reluctant buyer.
  • Respond quickly to applicants! You should do this for other candidates also. Just sayin’.
  • Develop and document how to screen and mentor apprentices.
  • Turn down almost all of your candidates at first, to get a feel for who is out there.
  • Be very clear about it being an apprenticeship. Apprentices may not get a job at the end, and they’ll have to work for it. Be clear about that.
  • Set a decision point at the end of two months when you make full-time offers. This gives the candidate time to look for another job.
  • Don’t have too many apprentices at once. Maybe a ratio of 1:10 or 1:20.
  • Also, before you even start the program, you should have a few mentors who are very excited about the program, otherwise you’re forcing something on the team which they may resent.

Other Notes

  • Have retrospectives with everyone (Candidates, Apprentices, Mentors, Everyone Else) as you go.
  • Frequently iterate based on the feedback. Your success metric should be “number of great full-time hires made out of the program.”
  • Make sure candidates get the same experience they’d get on the job. This helps you evaluate the candidate and helps them evaluate you as an employer.
  • Try to have more than one participant at a time. This camraderie is helpful support for a pretty stressful job experience.
  • Allow candidate to set up their own success criteria and use it to keep them accountable and measure how they’re doing.
  • Any learning the candidate does should be shared back with the mentor, maybe in a weekly check-in.
  • Encourage candidates to network, go to meet ups, etc. Community is part of the job.

Shameless Plug

Do you want help setting up a program like this? Email me!

Acknowledgements and Further Resources

692dad2af6224bf856e94a96049292c4
Written by Adarsh Pandit

Read more posts by Adarsh, and follow Adarsh on Twitter.