The End of an Internship

August 24th, 2011 by Benjamin Pollack

One thing that really made a huge difference to me when I was an intern is that I knew that what I was working on was actually going to ship to actual customers.  Not at some distant point in the future. Now.  Copilot started going live piecemeal about eight weeks after we started, which meant that we actually got to see customers react to what we’d made while we were still in our internship. I’ve mentioned before that this is one of the reasons that I got completely addicted to Fog Creek. But for the past two summers, we haven’t really done that with our interns. Yes, they wrote major code, and yes, it shipped to customers…but only months after the interns had already gone home.

Interns party at the beach on their last day

This year, on the Kiln team, we changed that: three times this summer—as part of Kiln 2.5.119 and Kiln 2.5.166 for Kiln On Demand, and in Kiln 2.5.177 for customers with on-site Kiln installations—we released intern code. Every last intern on the Kiln team has gotten to see their code actually running in the production Kiln environment before they’ve gone home. Some interns even shipped new code with all three releases, getting feedback from real, live, breathing customers each time.

But these are interns, I hear you say. So what? We’re talking dinky features here, right?

You tell me. They made Kiln show you images in diffs and when browsing repositories. They got Kiln running the newest version of Mercurial from the top of the stack to the bottom, including landing piles of patches in TortoiseHg and a few in Mercurial itself. They enhanced Kiln’s code search to allow filtering on files by globs and regexes, allowed greater flexibility in subscribing to Kiln’s activity feed, and dramatically improved Kiln’s ability to work with continuous integration systems. Not content with that, they added lots of UI refinement in changeset/bug integration, and gave back to the Mercurial community by taking our proprietary kbfiles extension, which makes it trivial to work with large files in a DVCS, and turning it into the generic largefiles extension for Mercurial that will hopefully be included in an upcoming Mercurial release.

These are huge changes. Changes that make a daily impact in our customers’ lives.

This is one of the things that I absolutely love about Fog Creek’s internship program. We treat interns like full-fledged employees, and our interns continually reward us by producing amazing things.

This obviously works well for us here at Fog Creek, but I also think it works out really well for our interns. One of our interns, Andrew Pritchard, noted:

Working at Fog Creek has already expanded my horizons more than any of my previous experiences—and not only because I am working for the first time on code destined to land in paying customers’ eager hands!… As it turns out, complete immersion, combined with the intrinsic and extrinsic motivation (thanks Joel!) that come with a paying job, can make learning an entirely new set of technologies surprisingly easy. And complete immersion is exactly what it has been—from the very first day, I was adding ASP.NET MVC actions from scratch, writing jQuery selectors, refactoring CSS into idiomatic Less, and creating markup for stylized buttons for the oft-requested case-changeset dissociation feature, which made it into the first Hosted release of the summer.

When I finished working on Copilot for my summer, I had learned a lot about writing real software. Not stuff for class; stuff to ship. And it has served me amazingly well, not just at Fog Creek, but on every semester of school I’ve had since then, and on every hobby project I’ve taken on.

I’m sad to see this summer’s internship come to a close, but I’m very happy at what we were able to get done this summer—and I think all of our Kiln users will be, too.

And don’t forget: if you’re a student, and you want to be part of an internship or co-op like this, apply for our next cycle. I’d love to have you on my team.