Last summer we had a problem. Growing fast and building out a complex adtech product that handles more than one million requests per second, we needed to hire more engineers than ever before. However, since our core programming language -- Scala -- was still up-and-coming relative to incumbent languages, there wasn’t a deep market for developers with that background.
Not only did we have to onboard more than two dozen developers, but we also had to figure out a way to train them all in Scala. Assigning individual mentors to help these software engineers and data scientists translate their experience with C++ and Java into working in Scala was far from efficient. Training them fast, as a group, was our best option. So, we set up an internal bootcamp with a goal of giving our incoming class a jumpstart on their Scala skills.
Welcome to Scala School
Your company may face a similar challenge, especially if you’re running engineering at a start-up. Why? Developers have limited time to learn multiple programming languages, yet there are hundreds of such languages to choose from. Apple has Swift. Facebook has Hack. Google has Dart and Go, and could introduce more any day. With such a bounty of languages it’s all but guaranteed the developers you hire won’t have the precise skills your company needs on day one; if they do, it’s likely that your hiring funnel is far too constrained. We’ve seen first-hand that, with the right set-up and know-how, bringing the bootcamp experience in-house can alleviate these problems and open new doors for your engineers.
Starting your own Scala School
Since last summer, we’ve conducted three bootcamps for dozens of engineers. Four core lessons we learned may help you in the design of your bootcamp:
- Determine a realistic curriculum. Our first curriculum included six two-hour sessions covering a wide range of Scala-related topics, such as object-oriented programming, functional programming, type-level programming, and concurrency. In doing so, we introduced developers to Scala’s capabilities and traps, while also providing tools for them to continue learning independently. After the first week of three classes, we learned the pace was too fast for students to absorb the new programming concepts while also ramping up on Tapad’s business and systems. Internal "professors" like me had just as many deadlines. To balance the workload and still maintain the curriculum, we scheduled more classes over a longer period and assigned two senior engineers to attend: a leader and a contributor. Some would lecture while others would lead exercises and be available for questions.
- Work with your developers’ busy schedules. Unlike privately-run bootcamps, Scala School runs concurrently with the developers’ regular schedule; it does not take up 100% of their time. This provides time for them to put into practice information learned in the classroom. Adding online resources also gives developers freedom to go deeper and learn more in their own time.
- Recognize teaching is its own skill. I've been teaching programming for four years, most recently several courses in the computer science master’s program at New York University. Developing a curriculum and delivering information in such a way that students will learn isn't foreign to me, but it may be to some of you. Reach out to peers who have set up bootcamps. Look at other courses and study the design and resources made available. (For a practical example, here's a link to the Information Technology Projects course I help teach at NYU.)
- Use exercises and practical code samples as often as possible. Just as writers learn by writing prose, developers learn by writing code. If you do nothing else in setting up your bootcamp, write out the challenges you've faced in developing software, pull some sample code, and then turn the problem you solved into an exercise for your students. Not only will it help them better understand abstract concepts, they'll also have something to look back on when they're faced with similar problems outside the classroom. We also recommend building a library of training materials that students could use at any time to brush up.
And the report card says ...
A well-designed bootcamp can also become a fringe benefit for the participating developers. At Tapad, every engineer who’s joined us can add Scala -- and the functional coding skills that come with learning it -- to their resume without having to pay hundreds or thousands of dollars for similar training. We’re attracting better talent (and delivering better software) as a result. In the words of one of our participations, the program “provided a solid foundation that afforded me the skills needed to grow quickly and make a productive impact on our team.”There’s no reason your company can’t do the same.
Toby Matejovsky is Senior Director of Engineering at Tapad, where he has helped scale the ad-tech company to its current state. His other experience includes four years of teaching software development courses in professional settings, including NYU's Courant Institute of Mathematical Sciences.Connect with Toby on LinkedIn or follow him on Twitter, where he posts as@tobym.