There are some companies that have special co-op and internship projects that are separate from their normal stream of product development. Often, the work of co-ops and interns never sees the light of day, or at least not while they're at the company.
We fundamentally do not believe in this approach. We believe that the best way to learn is by doing, and therefore, the best way to learn how to be a software engineer is to do what a software engineer does.
A few of our recent interns pulling their weight at our summer product party.
Because of this philosophy, we look at interns largely the same way we look at any other full time software engineers. We put interns on the same types of projects as other full time engineers. We expect them to develop the same sorts of features and ship into production, just like other full time engineers. They ship production code within their first few days of being here. During their internship, they develop real features that are delivered to real customers and are often even demoed in front of the entire company at our monthly Science Fair. Those on external tools often get to sit in on calls where they can watch customers using our software and see their struggles and successes, then make those tools better.
For many co-ops and interns, this is a combination of exciting and daunting. On one hand, their connection to creating value is palpable: the code they create powers the real features that real customers use. On the other hand, the learning curve can be steep. We often expect interns to come up to speed quickly on technologies they've never used before, like React, Java, Kafka, and others. We don't give them micro-sized tasks and tell them how to solve every problem. Instead, we ask them to think through challenging problems and come up with their own solutions to them.
Of course, there is a safety net for our interns. We don't throw them in the deep end and expect them to swim all by themselves. Each intern has a tech lead, a product manager, a product designer, a handful of other engineers on the team, and in some cases a separate mentor all there to help them learn, grow, and succeed.
And yes, the idea of shipping real code to real customers can be scary. I'm sure most interns at some point wonder to themselves, "What happens if I screw up and cause a bug or a, even worse, take down part of the product?" While it's an intern's job to diligently learn and try to write high quality code, ultimately, it is their tech lead's responsibility, not their own, to ensure that the code that goes into production is good. It's the tech lead and team's responsibility to do code reviews and make sure that things go fine. We don't want put the weight of all of our customers on our interns' shoulders. We don't want our interns to be afraid of failure. We want to give them the opportunity and the tools to stretch themselves to do things they've never done before knowing that they have a support network around them to help.
And to be completely transparent, this approach isn't for everyone. There are some people who want way more hand holding and guidance than we give here. They want to be assigned tasks and told what to do. We've also had a few interns who have come in, started doing the job of a software engineer, and then realized that it's just not the right path for them. And that's okay. It isn't in anyone's interests to make them do a job they just don't want to do, so in that instance, we try to find the solution that works for everyone. We feel that helping those individuals figure out what they do and don't want to do with their lives is a success in and of itself.
Our interns are here for two big reasons. First and foremost, they're here to learn how to be better software engineers and how to work in a professional setting. And through that, they'll accomplish their second goal - to ship code and delight customers.
Goal #1: Learning by doing
For every co-op and intern, the primary, overarching goal is to learn. To learn new technologies. New skills. How to think about complex problems. How to translate customer features into code. How to write high quality, readable, maintainable, scalable, reliable code. How to diagnose and solve problems. How businesses operate. What it's like to work in a company setting and how it differs from school. Whether all of these things are what they love doing.
At school, a lot of a student's learning is done through reading or lectures. At HubSpot, the vast majority of their learning is accomplished by doing. They get their hands dirty and work on real problems and writing real code.
Some people join HubSpot already having experience with the technologies they'll be using here. For those folks, the goal should be how to master those technologies and become better, more proficient engineers. Other people join HubSpot without experience in the specific stack we use here. That's okay. We don't expect people to be experts on day one. In this case, the primary goal is to gain proficiency in those technologies and be able to apply them to their role.
If, at the end of their co-op or internship here, they feel like they've improved their skills as an engineer, become proficient at new technologies, and gained a better understanding of what it is like to be a full time software engineer - that's the mark of a successful internship.
With this in mind, we want our interns' daily goal to be quest for knowledge through their own self-motivation and practice. What can I learn today? How do I take advantage of all of these resources around me to become a better engineer? Those are the questions we hope interns ask themselves during their time here.
Goal #2: Shipping good software that helps customers
There are few things as gratifying as being able to say, "I built that!" Ultimately, as makers, that's why we do what we do, right? We love to build stuff.
With that in mind, the second most important goal for interns at HubSpot is building real software that is used by real customers. At the end of a co-op or internship, it's incredibly rewarding for interns to be able to point to the things they accomplished. This also helps them whenever they go for their next co-op, internship, or full time job. Being able to show the real software that they built and shipped into production is a great addition to their resume, and the lessons that they learn about what it's like to build software for real people is invaluable experience for whatever comes after their internship here.
Ancillary Goal: Making friends and having a good time
Let's face it - we spend more time at work and with our coworkers than almost any other single place. So, making sure that our employees are happy coming into work each day is important, and this also includes interns. As part of this, we try to make sure that their time at HubSpot is engaging and productive. We sponsor events to help co-ops and interns make friends and have fun at, and away, from work.
But, overall this is an ancillary goal - not a primary goal. As our COO JD Sherman wrote on our internal wiki:
Is our goal to make HubSpot a fun place to work? Nope - although in my career I’ve never had more fun, and I've never laughed so much or worked with people I loved nearly as much. Are we trying to make HubSpot an easy place to work? Nope. HubSpot isn’t an easy place to work, and it never will be, because we’re trying to accomplish so much. Folks who are on board with that mission tend to love it. The reason that we invest in culture - and the reason we think it’s our secret weapon - is because we want to make HubSpot a place where people can do their best work!
Our focus is on creating an environment where interns can do their best work and hopefully have some fun along the way.
What about getting a job?
None of goals above is “get a job at HubSpot”, although an internship is somewhat of a test run of what it’s like to work as a software engineer at HubSpot. HubSpot's co-op and internship program is a huge driver of our growth as a team. There's a huge number of people who succeeded here as interns and now succeed here as full-time employees. In fact, many of our current leaders on the team started out as interns. But landing a full-time job shouldn't be the be-all, end-all for an intern or co-op. If an intern excels at learning and shipping and enjoys doing it, that conversation will likely arise - but even if it doesn’t, that's totally okay. It doesn’t mean the internship wasn't worthwhile. We have had plenty of co-ops and interns who did a great job and turned our offers down, but that didn't make us think that their time here was any less valuable. Similarly, we've had co-ops who did a good job and learned and grew as software engineers who we didn't extend offers to, and hopefully they felt like they they had a successful co-op despite the lack of an offer. The key here is that both the co-op/intern and HubSpot should be focused first and foremost on the two most important goals of the internship and letting the rest happen naturally. Neither side should get so obsessed about the offer that we lose sight of those goals.
We truly can’t imagine our team without the dozens of interns that join us every year. When we treat them like real employees, with real projects, real goals, and real responsibility, it lets us focus on what's important - building software that helps our customers grow their businesses.
If you're a current student and this sounds like the internship for you, learn more about the internship and co-op opportunities we have available. We'd love to hear from you.