Getting the most out of a software engineering internship

By Elijah Coyle, Julia Flores, Trina Kenyon

You’ve done it: landed that software development internship you’ve been working so hard for. As a CS major, a good internship can be vital  to get real-world experience and help you land a job after graduation. Now that the day has arrived, and you’re all dressed up in your new business casual, you head to the office and wonder, “What am I actually supposed to do now?” Chances are, you have next to no experience working in code outside of class, so how will you survive in a professional software engineering environment?

If those fears sound familiar, you’re not alone. Internships are your chance to contribute to a business, yes, but it’s also a great opportunity for you to learn and grow, and if you go into it with the right attitude, you can achieve that and more. To help you settle your mind and perhaps, realign your expectations, here are a few principles to consider as you head into your shiny new internship. To you, from a fellow group of interns finishing our summer at Phase 2. 

Embrace your ignorance

As one of us interns eloquently put it, “You need to get good at being the dumbest person in the room.” As an intern, you are essentially a junior-junior-developer, the newest and least experienced person in the company. You have a lot to learn–and that’s a good thing. No one expects you to code circles around full-time engineers. Your internship is a chance for you to learn, and the first step to doing that is admitting that you need to. 

Foster your sense of curiosity. Direct it in useful ways–don’t spend days digging into obscure pieces of the codebase that aren’t relevant to what you’re working on–but don’t turn off your brain and expect to be spoon-fed everything you need to know. Ask lots of questions! Do lots of research! Become a sponge, and take joy in the process of absorbing new knowledge. 

Be willing to fail

In a similar vein, you must be willing to mess something up to do anything at all. When you first start trying to work in a complex pre-existing code base, you might feel afraid to break something without realizing it. We’ve all seen the jokes and memes of interns causing havoc by pushing bad code, and none of us want to be that guy. But if you sit petrified of making a mistake, and call a mentor to help you every time you need to make a change, you won’t accomplish nor will you learn much. 

Phase 2, like most software companies, has robust policies in place to make sure that bad code doesn’t get into their releases. Trust that process, take an extra ounce of courage, and try. The fastest way to learn how to write good code is to cobble together a bunch of bad code and let someone with more experience explain how to fix it. The slowest way is to write nothing at all. 

In fact, during our internship, one of us accidentally introduced a bug into the main branch of the project which she didn’t discover until working on a completely different story a week later. Fortunately, it was caught before the mistake went to production, thanks to the aforementioned process. Even so, she was deeply embarrassed, but the mistake gave her a lot of useful opportunities to grow: it let her take ownership over her code, practice finding a bad commit, dig deeper into the system and learn more about how it worked, and also gave her a chance to give her supervisors a little good-natured teasing for letting bad code get merged. As the saying goes, you have to break a few eggs to make an omelet.

Lean into teamwork

Wherever you intern, you will have teammates. Maybe you’ll have a team of fellow interns, or just be plugged into an existing team of full-time developers. Ideally, you’ll have both, but either way, the people around you will be incredible resources for your internship and possibly great connections throughout your career. 

Try to find an internship where you’ll be on a team with other interns–and then work with them. All of you are going through the same thing, and, unlike college courses, you do not have to do all your work by yourself! Collaborate with your cohort and share what you learn. If you can combine all your knowledge, you’ll dramatically increase your ability as a team to handle problems and make progress without needing direct oversight. 

For example, when our group was joining a new team here at Phase 2 halfway through our internship, we were able to spin up our development environment in record time. As we got ahead of each other or worked on different portions of the setup, we overcame obstacles that we could then quickly solve for one another. 

Direct oversight, though, can sometimes also be extremely useful. If you have an internship that allows you to join a team of full-time developers, ask if you can try pair programming with someone. Pair programming is a technique where two programmers work together on the same machine. Pairing with a full-time developer can act like a short-cut, giving you an in-depth look at a portion of the codebase and solving problems you might have to work at for hours in just a few minutes. As in all things in your internship, make sure to ask plenty of good questions as you go.

Take pride in your work

During your internship search, look for companies where you can work on real stuff. Here at Phase 2, we were able to work on two different customer’s code, creating new features, fixing bugs, and generating value for both clients and for Phase 2. Knowing that we were contributing useful work made a huge difference for us. If you feel that what you’re doing matters, it will be that much more motivating and rewarding. 

You may think that because you don’t have much experience, you won’t be able to really contribute. Fight this thought. Yes, you will need a lot more help and assistance than a seasoned developer, but that does not make you useless. Even discounting the work you do, which itself is valuable, your energy and enthusiasm as an intern can give your whole team a boost. We experienced this with one of our teams at Phase 2. As a group, we were able to build a new system feature, but we also helped spark the team’s energy by being curious, dedicated, and enthusiastic. 

You don’t need to be the greatest programmer in the world to do good work. If you do the best you can at whatever tasks you find to do, you can and should take pride in what you’ve done. 

Questions to ask before and during your internship

Throughout this article, we’ve focused more on principles than hard and fast advice. It’s important to have the right attitude and approach if you want to get the most out of your software internship. Some, though, might be frustrated at the lack of specific “to-dos”. If you are the kind of Type-A personality that needs specifics, this section is for you. We put together a short list of good questions to ask both before and after your start date. While it’s not exhaustive by any means, we hope it will help inspire you to “embrace your ignorance” and come up with your own good questions. 

During the interview process

When shopping for an internship, try not to just take the first one that comes your way. Think about the culture of the company, the kind of work they do, and the kind of work you will do when you make your decision.

  • “What will my usual tasks and responsibilities be?”
  • “What does a typical day in this internship look like?”
  • “How do past interns say their experience here helped them?”
  • “How will my work fit into the company’s mission as a whole?”

Before your first day

The best way to get over first-day jitters is to know what to expect. Your hiring manager or another mentor figure should be available for you to ask a few questions to help you know what to do.

  • “What time will I be expected to arrive at the office every day? When do I leave?”
  • “What is the office dress code?”
  • “If there is any work-from-home as part of this internship, what does that look like?”

During your internship

Before you start writing code, and even while you’re doing it, take time to learn about the development process at your company. There may be elements you never even considered that are vitally important to the company’s methods, and many companies do these things differently.

  • “What policies do you have that prevent bad code from making it into production?”
  • “What are some of the most common mistakes you see new hires make in your system?”
  • “What does your software development life cycle look like?”
  • “What kinds of testing or automated testing do you use in your system? What tests are required for me to include in any new code that I write?”

Conclusion

Done right, a good software internship can make a huge difference for the start of your career. It’s a great picture of what your life will look like in the future, and gives you a variety of tools and knowledge that you can carry with you wherever you go. But in the midst of that, take time to enjoy yourself. Get to know your coworkers and go to fun events your company might throw during your time there. Take pleasure in the process of learning and growing. 

You’ve got this. Good luck.