How to make the most of your engineering internship

Are you about to start an engineering internship and are wondering how you can optimize your time there? Or maybe you’re starting your first full-time job and want to get started on the right foot. Throughout my internship at Shift and other past internship, I have learned many invaluable lessons that helped me grow as an engineer and perform well at my internships. Here are some of the lessons and tips that I find most important to optimize your internship!

Be customer focused

Whether you’re building a new consumer-facing feature or internal tool, you should always be thinking about your users and customers.

Who are the users of your project? Are they engineers, data scientists, or car buyers? Are they technical? What is going to bring the best user experience to them? Understanding your users will help drive the direction and vision of your finished product.

Why are they using it? Are they using the product to buy/sell a car, for entertainment, or something else entirely? This is a question to address early because if you can’t think of any reason why they would use what you’re building, you should hold off on writing code. Instead, talk to your manager, designers, and even customers to get a better understanding of why people would want your feature. This step will also help you understand the leverage and impact of your project!

How are they going to use it? Is it going to be a cron job that executes daily? A feature in a web application like my favorite internship project, an appraisal flow to help a customer sell their car! No matter what you are building, thinking about how people will use it drives the design and implementation of your project to provide the best user experience possible.

Constantly asking these three questions will optimize how you choose to approach, design and build your feature.

Take ownership of your work

What does it mean to take ownership? Ownership means you assume full responsibility for your work, and it’s one of the most important skills to practice as an intern. Ownership includes things like having a vision for what the finished product will look like, estimating how long it will take to build, seeing the project through to completion, and caring about the results of your work. A huge amount of ownership and responsibility is being thorough in how you approach things so that you build good software that your teammates can understand and maintain.

Be Proactive

There may be times where your project is blocked (waiting for approval or review) or finished, and it’s time to think about taking on more responsibility. Having a proactive mindset means you go out and look for ways you can be helpful to your team. It will exponentially increase your learning, opportunities, and, hopefully, impress your manager as well.

Shift was especially good at offering a diverse set of learning opportunities. Having a proactive mindset meant I was able to learn React.js, GoLang, and PostgreSQL, having no previous experience with any of them, all with

Mac and the Shift engineering team getting ice cream
Mac and the Shift engineering team getting ice cream

in the span of a 12-week internship. I was able to make infrastructure changes, create Ops tools, and even add new features to the consumer web and iOS app. Being proactive at Shift has allowed me to touch every part of the stack, many parts of the code base, and different parts of the business as well. You’ll be surprised how many things companies will let you work on if you show interest and initiative.

Minimize Technical Debt

Your goal as a software engineer is to write code to solve the problem in front of you, but when engineers cut corners and aren’t thoughtful about the long-term ramifications of what they build, technical debt can accrue. Technical debt is the accumulation of work that builds up as incomplete, untested, or poorly designed code is added to the system. Eventually, you have so much that you have to halt forward progress to fix the issues that have been creeping into your codebase. Addressing technical debt early on will help with a lot of issues later in the development funnel. It is important to have a well-designed solution to your problem because it makes it easier to maintain at scale in the future. Here is a list of things that could help limit technical debt:

  • Create a design/planning document
  • Consider many possible solutions and weigh the trade-offs
  • Write high-quality, well-documented code
  • Refactor code when possible
  • Write tests
  • Log errors

Taking the time to think about edge cases during your development can prevent problems for your teammates in the future. Some common edge cases are invalid data, missing data, and a large amount data. For consumer-facing features, screen resize and rotation is also something to consider. Once you’ve thought of every possible edge case while building your feature, schedule a bug bash where you invite teammates to help find issues with what you’ve built before you launch it. These can help you find even more edge cases you didn’t know to think about.

Log Everything

Logging and erroring effectively will do wonders for your teammates if any issue should arise in the future. For example, let’s take a look at a situation where you are creating an URL and sending a GET request to that URL, and it returns a 404 Not Found error. An in-effective log would be “Page not found” because this doesn’t help with resolving the issue. A more effective error log would be something like “<Project-name> – Failed to GET <url>: 404 Not Found”. With the second log, your teammates are informed which part of the codebase the error came from, what the request was, and the error, which will make it much easier to debug and fix.

Focus on your Personal Growth

Internships aren’t just about adding a company name to your resume or getting a return offer. They should, as much as possible, be about learning to be a great engineer. Focusing on personal growth will help you get the most out of your internship and will show your manager that you want to learn and grow. Here are some tips that I think were helpful for my growth throughout my internships:

Set goals

It’s a lot easier to achieve a goal if you have one in mind, so take some time to work with your manager on setting internship goals as early as possible. Preferably, set goals that are achievable and measurable and try to break them down into smaller objectives.

Ask Your Manager for Feedback

Getting feedback from your manager every week or every other week is critical for personal growth and achieving your internship goals. Many of the lessons I am writing about in this post was gathered from asking for feedback. Setting up a regular cadence for feedback makes it less scary to hear and more manageable to start addressing the feedback on how you can improve.

Code Reviews

Throughout my internships, I have seen a lot of fellow interns feel extremely worried after getting a code review. This shouldn’t be the case. Code reviews (when done correctly) aren’t about making anyone feel bad. Code reviews should be seen as a resource for learning style and best practices. It is a great way to acquire more insight from senior engineers at the company and learn from their experience and expertise. If possible, try to be a reviewer for someone else’s code. This will allow you to see the process from a different perspective and learn from it as well. One thing that has worked super well for me was reading code reviews and/or code written by the senior engineers at the company. You’ll learn a lot about design trade-offs, best practices, and solutions to interesting problems!

Have Fun

Last but not least, HAVE FUN! After all, you only get to be an intern a few times. Go to all of the intern and company events and meet everyone. You’ll not only have fun at these events, but you’ll build a strong network. The interns you meet at your internships will end up at a wide variety of companies, the mid-level and senior engineers you work with will soon become industry leaders, and people who are already prominent in their field are generally very nice about meeting interns and answering questions. But don’t just stop at intern events, plan some activities to get to know your fellow interns on the weekends. Go out, plan activities and get-togethers, or plan a weekend trip somewhere. Throughout my internship, I was able to make some life-long friends across the world and start building a network that will be invaluable to me throughout my career.

Getting Started with Go: 3 Tips for Engineering Interns

When I received my first code review as a fresh new engineering intern, I was horrified. How could I have received 87 comments on a 50 line code change? After getting A’s in all my CS classes, how could I be so unprepared for programming in the real world? After taking a deeper look at the comments, I realized that my fundamentals were fine, I simply didn’t know any of the industry style guidelines or best practices. The code review comments were extremely helpful in teaching me the industry standards for programming in Go. To help any future engineering interns, this blog post is a list of the three Go styles and best practices I wish I had known before I started my internship.

Continue reading “Getting Started with Go: 3 Tips for Engineering Interns”

How I Used Machine Learning To Price Used Cars

Andrew Carman is a software engineer at Shift.

At the core of any market is pricing. If you get pricing wrong, your marketplace doesn’t work. Our success at Shift—as a marketplace that makes it easy for anyone to buy and sell used cars—hinges on accurately and competitively pricing cars. 

Dealerships traditionally have a team of experts that price trade-ins for customers and manage the prices of their vehicles. They haggle over those prices with buyers that come to their dealerships, and often take advantage of consumers who have less access to car price data.

Our goal is to make selling and buying a car a fun, fair, and accessible experience by using technology to disintermediate what car dealerships do poorly. So we build software instead of back-office sales teams to price our cars, which increases efficiency, levels the playing field for our customers, and lets us systematically improve the accuracy of our pricing over time.

Read on to see exactly how we did it, and pass this along to the folks who might be interested in our approach.

Continue reading “How I Used Machine Learning To Price Used Cars”

10 Tips For Becoming A Better Teammate

Kate Heddleston is an Engineering Manager at Shift.

When I was first learning to play water polo, a coach told me something I’ve never forgotten. He said, “Great players make everyone around them look like great players.” A great player can catch any pass, anticipating imperfect throws and getting into position. When they make a return pass, they throw the ball so that the other person can make the catch easily.

Here at Shift HQ, software engineering is a team sport. Like water polo, you can’t build incredible software systems alone. So when I first heard the concept of the 10x engineer, I was confused. How could someone be so talented that it overshadows the power of teamwork? In my experience, individual excellence is necessary, but not sufficient, for greatness. Focusing purely on individual achievement misses the larger picture that teams are required to build great software. So I decided to change the definition of a 10x engineer to this:

A 10x engineer isn’t someone who is 10x better than those around them, but someone who makes those around them 10x better.

Over the years I’ve combined my personal experience with research about building and growing effective teams and turned that into a list of 10 ways to be a better teammate, regardless of position or experience level. While many things on this list are general pieces of advice for how to be a good teammate, there is an emphasis on how to be a good teammate to people from diverse backgrounds. Read on, and pass this along to the people you work and collaborate with on the daily!

Continue reading “10 Tips For Becoming A Better Teammate”

SHIFT-ing Perspectives: What I Learned From My First Startup Internship

By: Emily Nguyen

Should I intern at a startup or a large company? With so many companies to choose from, picking a place to intern at is a difficult decision. It may be tempting to choose a large tech company, because of its well-known brand and perks. I used to be hesitant about startups too. In the past, I’ve interned at some of the big tech giants…and it was a great experience. However, for my next internship, I wanted the opportunity to work at a small startup where I would be able to build software from scratch, learn how a company operates early on, and make a significant impact.

I ended up interning at Shift, with their Buyer Experience team. What attracted me to this startup was the people, mentorship opportunities, interesting engineering challenges, and the chance to make a huge impact at a high-momentum startup. In the 12 weeks of my time at Shift, I’ve learned more than I have in all my past internships.

Continue reading “SHIFT-ing Perspectives: What I Learned From My First Startup Internship”

Assistant or: How I Learned to Stop Worrying and Love Field Ops

Buying and selling cars isn’t easy. Not only is it a large transaction, it’s a highly regulated one. To top it all off, here at Shift we believe you shouldn’t have to complete it at a dealership. You should be able to buy a car on your own turf whether that’s your home, your office, or your SoulCycle. Luckily we have a crack team of Car Enthusiasts (CEs) to make this possible. To make their job possible we have Assistant. Assistant is the internal iPad app used by our field teams on all types of appointments. Throughout the development process we keep three core tenets in mind. Continue reading “Assistant or: How I Learned to Stop Worrying and Love Field Ops”

Knowledge-Sharing with Design Docs

Shift’s engineering team has always had an informal process around design docs for new systems, but the process has varied from team to team and engineer to engineer. We’ve had the assumption that if a project or feature is expected to take more than a week or involve more than one engineer, it probably makes sense to document your design in advance so you can get feedback.

A few engineers from our infrastructure team recently formalized the process to add some consistency with the main goal of streamlining the process–we want the term “design doc” to mean the same thing to everyone and to prevent engineers from feeling like they have to reinvent the wheel every time. We also think design docs can be used for mentorship because they allow junior engineers to get feedback faster than through code reviews.

Continue reading “Knowledge-Sharing with Design Docs”

Logistics at Shift

At Shift, a foundational belief is that the used car market is local and that customers need to see, feel, and smell a car before they are comfortable buying one.

With this belief in mind, one of our core value propositions is we will meet you where and when you want us to, and when we meet we are able to do all things a traditional dealer needs to do in order to sell you that car from the comfort of your driveway.

Delivering this core value proposition may seem simple — companies have been doing field sales for ages — but to do it delightfully, efficiently, and at scale with vehicles is a tough problem. Here at Shift, we call the system that coordinates all of this the Logistics Platform, and its main responsibilities are to:

  • Model customer demand and manage our availability
  • Monitor and adjust operational schedules
  • Enable the field sale

We’ve built parts of the system so far, and have grand plans for the rest, so let’s dig in and see what these responsibilities really entail.

Continue reading “Logistics at Shift”