This guide was originally published as three part series in TechCrunch and then in For Entrepreneurs. It is reproduced here in its original, complete form.

Anyone hiring engineers in tech knows how much competition there is for talent; there just aren’t enough good engineers to go around.

As a result of the incredibly high demand for talent, the supply side has responded by launching coding bootcamps all over the country and, indeed, the world. Thousands of post-college adults are dropping their careers and spending months and many thousands of dollars in these bootcamps to become engineers, and earn on average 40% more than whatever their previous careers paid.

At Salsify we’ve created a program that we’re quite proud of to hire, train, and grow code bootcamp graduates, and we want to share it with other startups to help us all grow the next generation of programmers and entrepreneurs faster.

Members of the first class of Salsify bootcampers!

FIRST, THE BIG QUESTION: DO THE BOOTCAMPS WORK?

I’ve heard quite a lot of skepticism about the coding bootcamps, and frankly wouldn’t have considered hiring tech talent from them myself if the folks over at our fellow Boston-area company Cogo Labs hadn’t had success with it first.

To date we’ve hired 7 employees from Launch Academy and General Assembly and have been very happy with what they’ve been able to achieve since joining. In fact, they’ve meaningfully accelerated our development timelines in more than a dozen key initiatives.

Projects they’ve built (with guidance) include:

  • A review application enabling a multi-billion dollar distributor to review, approve, and reject content refreshes from their supplier base. It’s currently in production, and we’re rolling it out to several other customers.
  • A microservice that integrates with our core application to enable companies to share more information in real-time between accounts.
  • An application that inspects data in extremely complicated, macro-heavy spreadsheets and fills out tens of thousands of cells for customers.
  • A microservice that takes data from Salsify and posts it to Jet.com’s new marketplace API.
  • …many others.

These successes haven’t been without cost. We’ve invested a great deal of thought and work into designing a continuing education program with significant active mentorship to build on the (very basic) foundation from the bootcamps and help ensure their success from the first week on the job.

The remainder of this post details our experience working with code bootcamp graduates.

For fresh bootcamp graduates, we have advice on what kind of job to look for to launch your new career with the best possible start. For other employers, we’ll share the program we put together, along with the types of projects we have them work on, to help you make them successful.

FOR EMPLOYERS: DEVELOPING A FARM SYSTEM

We’ve seen some employers hire code bootcamp graduates and simply put them to work assembly-line style on web app development. They’ll build basic Rails app after Rails app, or work on a small, constrained part of a larger Rails app where they can’t do much damage, and are basically expected to work with the skills they bring to the job, which aren’t much. Many of these are small consultancies that basically build simple apps for small businesses; these jobs pay the bills but offer very limited professional growth as well as very limited skill development. This is a terrible shame.

Instead, we view our bootcamp graduate program as a farm system. Not all bootcampers will become full on engineers (see below for a list of career options we see for them), but by investing in them and - this is key - expecting more of them than basic web app development, we believe we can grow significant talent from within while having them accomplish increasingly complicated (and valuable) tasks over time.

WHAT THEY BRING TO THE TABLE

To understand how we’ve made bootcamp graduates productive, it’s important to understand how we view them.

We see code bootcamp graduates as:

  • Motivated. Remember, these are people that dropped everything - including whatever they studied in college - to pursue a programming career.
  • Hungry. They all want to prove themselves in this new career. As above, they’ve already jumped off the plane and done more in 3 months than any of them ever thought possible. They typically will dive into any task given them with abandon.
  • Coachable. This is in contrast to a recent graduate from MIT or Harvard, who often thinks she/he knows everything from reading some blog posts (“Ruby is stupid; you should use Node”… sigh) and can be somewhat difficult to coach into true engineering.
  • Diverse. Though recent trends at Standford, Harvard, and elsewhere show more and more women & minorities entering computer science, it is still a very much caucasian male-dominated field. We’ve found much more diversity in bootcamps, which leads to better outcomes for our projects, for the company as a whole, and for society at large. And we’re not alone; 36% of bootcamp attendees are women, vs. 14% in CS programs.
  • Raw. Extremely raw. Three months of bootcamp is basically zero experience in the grand scheme of things.

To address the last point, here are several lessons that will help you plan for and make the most of having bootcamp graduates on staff.

LESSON 0: HIRING

As far as I can tell, the bootcamps are all the same in at least one way for students: each gets out what she/he put in. And not every graduate is created equal. We interviewed many dozens over months to get the final 7 that we ended up hiring.

Your criteria are likely to be different from ours, but fundamentally we put strong communication, work ethic, curiosity, and analytical thinking ability as our top (and really only) criteria, believing that we were hiring more for raw talent and growth potential than their current skill set.

Related to that: we didn’t hold a super high bar for their actual coding skill, but did care if they could communicate and reason analytically about their code, and if they’re curious. A quick look at project repositories can give some insight into how in-depth a candidate went during a program, and how devoted they were to learning through curiosity—very important for us.

A corollary: do not expect much from whiteboard coding exercises during the interview. In fact we don’t even use whiteboard coding for our coding academy interview process and instead rely on abstract problem solving questions instead.

LESSON 1: EXPECT MORE

Bootcamp grads are eager to dive into basically any project, and the more you expect of them the more they’ll work and try to deliver. Our experience has been that they are absolutely not afraid of the keyboard and will sit down and start coding towards basically any goal, even without fully understanding the full picture (more on that in a minute).

They are eager to learn and prove themselves. Give them space to do so.

That said, we did ramp up projects over time, starting with very basic data transformation problems to help get their feet wet at the company and get some wins on the board before dramatically amping up to larger, more strategic projects. This “ramp” was 1 month for us, and very steep.

LESSON 2: TEACH HOW TO STRUCTURE A PROJECT

Generally speaking, fresh bootcamp graduates not only have no idea how to plan a project, they don’t even really know that they should! Which makes sense; they’ve been taught how to start and go, not how to take a step back and design.

So the first thing you should focus on with new grads is breaking down a problem. We do weekly iterations (most projects they’re working on currently are 1-4 weeks), and in each iteration every project has a deliverable milestone with real value to the company.

At the start of every iteration, we have them build block diagrams of the major components of the project. Each component has a description on what its responsibility is, and how it connects to the other components. If this sounds like basic object-oriented design, it is!

Next, we have them outline each component in code by creating the set of methods needed where the body of the methods are blank. This forces them to think through the project holistically at a level of detail that brings to light any areas they don’t understand early.

Together, drawing the box diagram and outlining the code also allow you to give feedback to them early on in the project and helps minimize the management time you might feel you need to spend on a day-to-day basis stalking their GitHub repos.

LESSON 3: TEACH HOW TO FOCUS ON RISKS & UNKNOWNS

When given a large project, everyone (even experienced developers!) will tend to bang out the parts of the project they know how to do and will, consciously or not, avoid the parts that are unclear and unknown.

We push our bootcampers to focus on the unknown early in order to de-risk projects, and we learned this the hard way. Frequently a project would appear to be on-time during an iteration and then slip, often by an entire iteration, because they would leave the scary parts for last, and uncover a task at the last minute that either requires rewriting of much of the project or much more work than anticipated.

If Lesson 2 is followed, it makes it easier to identify which tasks are the scary ones to get them help early.

LESSON 4: LEAVE SPACE TO FAIL

I’ll be honest, this one is really difficult for me, but is so very important. You know much, much more than the fresh bootcamp grads. Any task or project you assign them will take them so much longer than it would you. And when they get stuck on something seemingly trivial, it’s tempting to jump in and save the day.

Resist this temptation.

Although it’s hard to remember, most of us in tech got where we were by banging our heads against the wall on problems and gaining deeper clarity and appreciation for certain solutions, patterns, and challenges through that struggle. It’s important not to deny them the same frustration, as this will help them grow.

That said, we have a standing rule that if someone is stuck for more than a few hours to get help. There is no sense in wasting days in this pain.

LESSON 5: HIRE IN PACKS

We hired 7 almost all at once for a few reasons:

  • Most bootcamps teach pair programming. They are used to working in pairs.
  • They can lean on each other. If they are working on different projects, different individuals or pairs will pick up different skills, and the next time the skill is required by someone else on the team they can help each other, easing your coaching burden over time.
  • Hiring in a pack lets you build an education program that they all go through simultaneously (more on this below).
  • They’ll have at least one buddy going through the same growth and the same joy/pain. Camaraderie matters.
  • People are competitive, consciously or not. For the same reason you should never hire 1 salesperson at a time, you should never hire 1 bootcamp graduate at a time. This job is really hard; if one person is growing faster than the others, they will work to catch up.

So if you’re going to hire 1, I can’t recommend strongly enough to hire 2 instead. It’s more than twice as good. If you can’t afford to hire 2, then maybe you should wait.

LESSON 6: COACHING IS A FULL TIME JOB

This is generally a tough lesson for both new managers figuring out how to delegate and for startup founders who are used to doing everything. If you hire a batch of them, you have to have someone to manage the program full time, including doing daily coaching, code reviews, design sessions, planning sessions, 1-on-1s, communication outside of the group to gather requirements, etc.

Moreover, this person should be respected throughout the organization, as getting the program started and effective is going to be a bumpy road that will draw on company resources even beyond the coach (e.g. engineering to answer integrations questions around your core product, product managers to oversee the requirements of specific projects, etc.). Without a strong, respected leader, you risk the group being marginalized from the rest of the company.

Having a full time leader also enables you to scale the program rapidly. If you’re going to hire 2 and devote a senior technical leader to coaching them, why not hire 4? Or 8? There is a very large supply of these people out there, and if you’re a startup looking to own a market, product speed matters a lot (preaching to the choir I’m sure, but it doesn’t hurt to be reminded that there are many aspects to driving speed & scale).

Dan Spangenberger, Salsify Employee #2, was pulled out of core engineering to do this for us.

Dan Spangenberger, Salsify Employee #2, working with bootcamp grads.

LESSON 7: MODULARIZE YOUR PRODUCT

Bootcamp graduates cannot work on the same project as our core engineers. Our core product is a large, modular, highly complicated Rails application with a single-page, mostly Ember front-end. Our engineering team is gaining a well-deserved reputation in the community for producing some of the most valuable Rails projects (Goldiloader and delayed_job_worker_pool are two that have gained notoriety), largely because we’re pushing Rails into places that it wasn’t really designed to go.

So instead of working on the core product, we’ve architected Salsify to be extensible in a number of ways via microservices. Our bootcamp graduates can build standalone applications (Sinatra, Rails, etc.) that run outside of Salsify’s core and interact with it by known APIs, message buses, webhooks, and other means. Microservices appear to end users as part of the core product offering, but are in fact isolated applications.

This approach has the two advantages of insulating the engineering team from the bootcampers and also pushing the product to become a more modular platform that can be extended much faster than any one team could do on their own.

I would be very, very hesitant to bring in bootcampers if the only way to make them productive were to work on our core product and infrastructure right off the bat.

FINAL LESSON: CELEBRATE WINS, HAVE FUN

Rovaira brandishing the coveted Culture Carrot.

I’ve been very impressed by the work ethic and hours the bootcamp graduates have put in. They really are eager to grow and to have successes, and really, really want this career transition to work.

So celebrate the work, their growth, and successes big and small whenever you can. They deserve it, and all people like to know that what they sweat and toil over matters. This is another benefit of having short, weekly iterations with defined deliverables. There’s always a milestone to celebrate.

We have the whole team present their progress every week to anyone in the company who is interested, which always includes product management and engineering leadership, as well as many members in the sales and customer success teams who can often use their projects in the field immediately.

Beyond having weekly iteration presentations, don’t underestimate how important it is to have others in the company swing by, ask what they’re up to, ask for demos, and generally be interested in the whole process.

BONUS LESSON: CONTINUING EDUCATION

Because we view this program as a farm system for engineers and other members of our team (see “What’s Next” below), we put together what is essentially a practical computer science program for graduates to build upon the very basic education they received from the bootcamps.

We have office hours during regular business hours in which members of the team are available to go over problems sets and answer questions related to the work, but generally expect the courses to be a nights-and-weekends kind of investment, which they are all happy to make.

Here’s our practical CS degree program:

  1. Stanford’s Introduction to Mathematical Thinking
  2. Stanford’s Data Structures and Algorithms Part I
  3. Stanford’s Data Structures and Algorithms Part II
  4. Design Patterns (we’re teaching this one ourselves; couldn’t find a great online course for it)
  5. The Hardware/Software Interface
  6. Introduction to Databases

We believe that this can be completed in roughly 1 to 1.5 years, and that it’s sufficient for most engineering jobs out there. Design Patterns in particular is rarely taught to undergraduates but is so important to being effective in the real world.

At the risk of drawing the fury of the CS mob out there for omitting one subject or another, we felt that many of the “core” CS courses really aren’t that critical for becoming very productive engineers, especially at the beginning. I’ve never had to write a compiler or operating system in my career (though Dan has), and the last time I thought about finite automata was 2001 when I was studying them myself.

That said, we do have a set of other courses that we might push them into once the first year is complete, including Programming Languages, Machine Learning (increasingly important these days) and a few others.

FOR CODE BOOTCAMP GRADUATES

Excited bootcamp graduates at Salsify!

Welcome to an exciting and fulfilling career! As you know by now, programming is a highly creative art in which you get to build things that change the world every single day. The field is constantly evolving and changing, with more things to learn and discover every year than you could learn in a lifetime. I wouldn’t trade a career in tech for anything.

As you embark on this new career post-bootcamp, I do have some small pieces of advice for you to help ensure your success.

LESSON 0: WHERE TO WORK

Having interviewed many dozens of bootcamp graduates (including many that are a year post-bootcamp and dissatisfied with their current positions), I think some have unrealistic expectations (in part set by the bootcamps themselves) about what jobs they are qualified to do after graduating, and where they might want to work.

So what should you look for in a job? I don’t have all the answers, but here are some things I think are important to look for if you can find them.

  • Mentorship & Support. You’ve just invested months and thousands of dollars to change careers, but you’re merely at the beginning of your growth, not the end (compare yourself to an MIT grad who has taken > 20 courses over 4 years). As such, make sure you join an organization that is serious about investing in you. Make sure that there will be people dedicated to coaching and working with you. Practically speaking, this means that a company has to be a certain size to be able to make this investment, likely at least 50 people and probably much more than that. Generally speaking my advice to people right out of school is to find a hot, growing startup of roughly 100-700 people and get in the door doing whatever they’ll let you do, which is likely a lot because companies like that have too much to do and not enough people to do it all! Critically, companies like that have enough resources to invest in you, and enough valuable projects to work on. That said, a small boutique consultancy with < 50 employees can also provide strong mentorship, but make sure to bring up the subject of growth and mentorship with any such company.
  • Not an Early Startup. This is the flipside of the “Mentorship & Support” criterium above. I know I know, startups are sexy and you want to be in early (I’ve been frankly surprised by how many people are impatient to be in the first few people at a startup straight out of a bootcamp). I’ve seen 5-10 person startups hire code bootcamp grads and I can’t imagine how they have the mentorship & management bandwidth to (1) start a company while (2) investing in you. I can’t imagine hiring a bootcamper when there were only 10 of us. Be patient. You can always do a small startup later. Contrary to popular opinion, tons of successful startups are founded by people older than 22 (our own Salsify, Hubspot, Workday, Amazon, Twitter, Pixar, LinkedIn, SpaceX, Zynga, etc. etc. etc.). There is time for that later. For now, focus on honing your craft.
  • Strong Communication. This is strong advice not just for you, but for anyone looking for a job. Working with people who are clear, transparent, and straightforward communicators will make your life significantly easier. I include this here only because clear communication is doubly important when you yourself know (relatively) little about your craft or the space you’re in and are going to be learning a tremendous amount in very short order. Don’t be afraid to ask lots of questions to make sure you understand the product you’ll be working on, the business you’ll be a part of, and the expectations they’ll have for you. I hold candidates who are curious and ask good questions about a company in higher regard than those that sit back and wait to be quizzed in an interview.
  • Camaraderie. It sucks to struggle through a challenge on your own; much better with comrades. This is a big reason why companies with more than 1 founder are more likely to succeed. In your case, you’re going to be much better off joining a company that has other bootcamp graduates to share the journey with. Moreover, having more than 1 bootcamper around is a signal that the company has appropriate expectations on what to expect from you.
  • Make Sure You’ll be Coding. Many bootcampers get jobs as pre-sales engineers at SaaS companies and basically stop coding day-to-day (pre-sales for SaaS businesses often means that you’re the technical Q&A person brought on sales calls). This is a great career that is lucrative, but if your goal is to code then these are not the roles for you. Make sure that in whatever job you take you’ll be coding every day. Per Gladwell: get in your 10,000 hours.
  • If Possible, Not Just Web Apps. You’ve been taught how to build a basic web app, which is great. And there are businesses that will hire you to do just that, over and over, basically building basic Rails app after Rails app until you’re seeing “rails g yet_another_rails_project” in your sleep. Rails is awesome, but you’re much better off participating in a larger, more complicated project over a period of months or years than you are churning out a basic app every month and moving on to a new project. You need to develop depth of knowledge and understanding of complexity.

What doesn’t really matter?

  • Tech Stack. Having just come out of a bootcamp and having received whatever advice from your teachers, I’m sure you feel that Rails vs. Node or something is super awesome and why would you use anything else and Java is for losers and all that. The reality is that the specific technology you’re going to be working with doesn’t really matter that much (Facebook is built on PHP!), as long as the problem you’re solving is complicated enough and interesting. Whatever tech you start in will likely not be what you’ll be using 10 years from now. Even at Salsify we started with Backbone + Marionette on the front end and have migrated to Ember in just a couple years.
  • Specific Industry. I’ve talked to bootcampers who are super happy at places as different as Athena Health and Salsify. Changing specific markets you’re working in is very easy in tech, so if you start in ecommerce, and want to change to finance after a few years, and then want to save the world with global ed tech, that’s very easy to do. What you want first and foremost is a strong mentorship program to be able to grow, regardless of the problem space.

LESSON 1: BE ORGANIZED

As per lessons 2 and 3 for employers above, one skill that is critical throughout your career is planning a project, estimating how long a project will take, identifying the risks of a project early enough to mitigate them, etc. Setting expectations for yourself and others in the organization on what you can accomplish on specific timelines and exceeding those expectations is the path to growth.

Know that planning and estimate are skills you in all likelihood do not have and seek to develop them. Here’s one approach:

  • First, consider where the difficulties in a project may lie—what features of a product or framework have I not used before, where may the client not fully understand their data or systems, what information can I only gain from experimentation?
  • Second: write all the unknowns down and consider what the worst case for each is—will I have to switch libraries to implement this feature efficiently? Will I have to go back to client for more information? How may the information I gain affect my choices later?
  • Third, construct an estimate and a plan that takes into account taking those wrong turns and asking and understanding the unknowns.
  • Fourth, execute with tenacity.
  • Fifth (and leading into lesson two), reflect.

LESSON 2: REFLECT

At the end of every project, or even every iteration, I encourage my employees to write down what they did well and what they would do differently next time. Many people (myself included) skip this step unless forced to by process because there is always the next thing, so create a process that forces this habit.

As a team at Salsify we also use retrospective meetings after every major project to reflect on what went well and what didn’t go well and we do so with the engineers and the associated stakeholders in the room—everyone has an equal say.

Taking a second to think through the previous project and identify areas where you can improve, and even asking others for advice on how they might have approached the problem, will dramatically improve your rate of growth. When asked we often say we learned from our mistakes but that doesn’t mean we can’t learn from others too.

LESSON 3: ASK FOR HELP

In your bootcamp you should have developed a taste for StackOverflow, but don’t be shy about asking for help from your co-workers, your boss, others in the company, your friends, and even your former bootcamp teachers. Do not be shy. Ask until you’re told not to.

However, don’t ask the same question twice. If you ask questions and ask for help often, but are seen to be improving with every question, people will continue to invest in you, and you’ll continue to grow.

BONUS LESSON: KEEP LEARNING

Look at the computer science program we designed above. Just about all of the courses are available online, and you’ll be able to take them with or without corporate sponsorship.

Remember: you’re playing the long game. This isn’t about the first job out of bootcamp, this is about the path to being a full on engineer to allow you to work for whomever you want in whatever industry you want for the rest of your career.

Do not stop learning. You’ve come this far. You’ve taken a great risk and invested much in yourself to get a start. Keep it up; it’s worth it.

WHAT’S NEXT FOR BOOTCAMP GRADUATES AT SALSIFY

After spending a year or two with Salsify, following the coursework we’ve assigned and taking on more and more ambitious projects, we expect our young graduates to move in a number of different directions, largely based on personality and what types of programming each is more drawn to.

  • Engineering. This is the obvious next step, but is not the only one. We do expect some of our bootcamp graduates to eventually move into engineering as junior engineers, but it’s not the only, or even the best choice for many graduates. Engineering is a lot of design, communication, writing tests, and support, and some people that love programming don’t necessarily love the other activities.
  • Pre-Sales Engineers. Demo-building, adrenaline-filled coding. Personally, this is my favorite kind of development. There is usually a specific goal in a tight timeline and you have to hack something together for a prospective customer. The projects are varied and often interesting, and you have to pick up new tech all the time to make them work. You also get to present the result to the prospect and hear feedback first-hand. Based on the feedback (and success of the sales cycle) you get to write up requirements for a more complete product and hand off to professional services or engineering. This is a great, lucrative career for outgoing folks that have a little adrenaline jockey in them.
  • Professional Services Engineering. These are the folks that do the real heavy lifting at specific customers. The projects are similar in breadth to what pre-sales engineers do, but professional services will go into much more depth with any project to really make them work. Need a deep integration built with SAP that updates inventory levels in Salsify in real-time? Need a custom, two-way integration with SharePoint that keeps it in sync with Salsify? This team is there for you. Folks that love working with customers and playing with different technologies all the time find this a very fulfilling career.
  • Product Management. Strong product managers need a technical background to effectively work with strong engineering groups (Google, for example, requires that a product manager has a degree in computer science). Really great PMs are often coding as well, building out demos or extensions to the core product. Folks that are drawn to product strategy and who love working cross-functionally with the rest of the organization can thrive in this role.

FINAL THOUGHTS

I hope you’ve found this guide useful. There are so many smart, enthusiastic, coachable people graduating from code bootcamps these days that if you can find a way to utilize them productively in your company you’ll have a competitive advantage vs. simply having to compete with Google, Facebook, Apple, and others for the scarce resources that are computer science majors. And conversely, if you yourself are graduating from a bootcamp and can find a great mentorship situation, your new career will be off to a very strong start.

Finally, beyond helping Salsify and other startups grow more effectively, I also have a bit of a mission in writing this piece. I strongly believe that the more people we can create who can effectively program and master technology, the better off the world will be in the long run. All industries from healthcare to energy to transportation to manufacturing are in various stages of being turned upside down by tech. Many people used to the old way of doing things are going to lose their jobs and have to find another way to get by. The more people we create that can build and rebuild, invent and reinvent, the better off everyone will be.