Code is central to Stripe: we build APIs, software tools, and infrastructure that are in turn used by other software engineering-driven businesses. And of course code is also central—by definition—at other software companies.

It’s easy for familiarity with code to become a barrier between different groups within a technology company: lots of companies have an upper tier of code-wrangling wizards that are supported by the rest of the company, sometimes known as the non-engineers. From the beginning, we’ve tried hard to avoid this at Stripe. In seating, we mix engineering teams with non-engineering teams. When we hire, we seek out engineers who are excited about problems beyond code itself. When we communicate internally, we make sure our engineering work is open and comprehensible to all Stripes, and that each improvement to our platform and even internal infrastructure is shared widely.

Last year, we decided to take another step and to start a coding class for any interested employees. The goal of this class wasn’t to help people become full-time engineers. It was instead to help people get deeper insight into how modern software development works so that they could better understand how problems get solved at technology companies. We hoped it could also provide a foundation that would make it easier for participants to continue to self-teach if they found it enjoyable—getting started is often the hardest part.

Based on the success of the class, we realized that the experience might be interesting for people at other companies to read about and perhaps replicate. So here’s a blog post about how we did it.

The experiment

We started our first experiment in August last year by running an immersive 50-hour 10 week coding class pilot with 24 Stripes. (In addition to helping to organize the program, I was also a participant in it.)

We decided to hire a full-time instructor to build, teach, evaluate and scale the class. We realized that having a full-time instructor would be important: the nuances of a particular company’s development stack and putting together relevant educational materials is a quite time-consuming undertaking. Jen, our instructor, spent several weeks integrating into Stripe before writing any of the content or asking about potential applications.

The class took place for 2.5 hours twice per week. In it, we covered the basics of modern programming, with a focus on web development: HTTP, Ruby, Linux, Git, SQL, HTML, CSS, JavaScript. These topics were taught through a combination of lectures, group activities, and individual work in order to establish familiarity with the concepts. This level of understanding enabled each participant to build a basic web store with a Stripe integration at the end of the course.

Like most of the class, I’d never so much as seen a line of code before (my day job was working on recruiting). But, pretty soon, I was using the Stripe Ruby library to implement various features into my newly-created web store. More broadly, and probably most importantly, I came to better appreciate the technical underpinnings behind many cultural norms both at Stripe and across the industry. For example, “==” is used at Stripe to mean you’re in agreement—but I learned that it’s used to test for equality between objects as well.

The class also ended up being a fun way to get to know other people within the company. Our TAs were volunteer Stripe engineers and, class by class, I ended up talking to and often working with people who I rarely interacted with in other contexts.

Results

People loved the class: on average, Stripes strongly agreed that we should continue to offer the class internally (rather than provide a stipend for external courses) and agreed that the course made them more effective in their role. Participants also reported​ ​improvement in two particular areas: ​(​1) ability to autonomously and confidently work with technical users, candidates, and Stripes and ​(​2) fluency with technical tools like​ the Stripe API, and our analytics tools. (One participant shared “I’m much more willing to jump into technical conversations or questions given that I actually understand some of the underlying context.”)

So we decided to implement it at scale. Based on the feedback and our general observations, we broke the course into three month-long modules, and launched the first iteration on April 10th:

Intro to Engineering (4 hours/week): Learn to think about code the way Stripe engineers do. We’ll read and debug Ruby, and use tools like GitHub and Terminal.

(4 hours/week): Learn to think about code the way Stripe engineers do. We’ll read and debug Ruby, and use tools like GitHub and Terminal. The Stack (1 hour/week): Tackle the combination of technologies that form a web app, such as HTML and CSS.

(1 hour/week): Tackle the combination of technologies that form a web app, such as HTML and CSS. Stripe Projects (4 hours/week): Build a simple integration using Stripe’s API and design a final group project of your choice.

This year, we plan on teaching at least 100 Stripes (about 20% of people not currently working in engineering) to code.

Conclusion

At Stripe, we think we’re still in the early days of witnessing the internet’s global impact. More of what takes place in the world is going to in some way feature software as a coordinating or enabling force. I don’t know what the world looks like twenty years out, but it seems clear to me that some of today’s most interesting and important technologies are better understood with a foundational understanding of how programming works.

If you’re thinking about rolling this out at your company, or have more questions about our design or process, I’d love to chat.