This is a reflection on my software engineering internship experience with Coinbase. The article is originally post on my Medium page.
What is it like to do an internship between the study terms?
What is it like to tackle real problems in a top 5 company on the Y Combinator Top Companies List (as of October 2018)?
What is it like to sit together and work with smart and experienced people every day?
In the past 4 months, I had the opportunity to work as a software engineering intern on the Consumer(Engagement) team at Coinbase. Here, I found the answers to these questions! I kept myself busy with fun and meaningful problems (no trivial tasks even for interns!)
Before I dive into what I learned in this internship, here is some context:
1. I am a Computer Science undergraduate student from the University of Waterloo, and I had just finished my second year when I joined Coinbase.
2. The internship with Coinbase was my 3rd software internship since I started university.
3. I found the career opportunity online, when I was looking for an internship related to cryptocurrencies and blockchain.
Set goals for this internship on Day 1
Day 1 was full of excitement. I arrived at the office at 9AM and was given a well-structured onboarding schedule sheet with my name printed on it — I couldn’t be happier to start the new journey! How exciting it was to finally set foot on my ideal company for an internship! Then I was guided to my desk, on which there were two huge boxes containing many cool swags, shirts for different seasons, and a welcoming card full of kind greeting notes from my colleagues!
Hold on. Before I got too excited, I asked myself, “What do I want to get out of this 4-month internship?” A deeper understanding of the technical stack? Yes. More proficiency and fluency in coding? Definitely. Better at communication with teammates? Exactly.
Am I going to forget these “goals”? No, and I was able to make my goals more specific and keep them in mind, thanks to the conversation my team manager brought up in our first ever 1:1.
“What are your top 3 strengths that you are proud of? What are the 3 things that you have least confidence in? What are 3 things that you feel like improving on?”
He asked me these questions and encouraged me to think over and discuss them. Then he said, “In our next 1:1, we will check together how you are doing with your goals.” Over our 1:1s during my internship, we talked a lot about my improvement, blockers, areas to work on, all oriented to those goals I set up at the beginning.
Telling your manager what you have done and what you need for your goals is not only beneficial to keeping yourself accountable, but also adding more visibility to your manager about your work. Obviously, you need to set up your own goals first, but a good manager can definitely help you achieve them faster.
Be resourceful to unblock yourself
“Tell me about a time when you need to deal with a problem that you are not familiar with.”
I bet this is a common behavior question we all get asked during interviews. Indeed, when you first join a company especially as an intern, there is little chance that you are already familiar with the technical myth of the huge codebase. What would you do then?
What did I do to unblock myself? I searched in the codebase and company documents for related files and functions to see how they work; I googled the ruby syntax and found examples to learn; I set up breakpoints in my code and debugged in the terminal with trial and error… Sounds good already? But there were times when I had no clue what to do or why something was happening, after being stuck for the whole day. Yeah, as you can tell, I was afraid of asking people questions at that time.
I was afraid of being judged. “Will people think I depend too much on others if I ask questions? Will they think I am not capable enough?” With a certain degree of imposter syndrome, I only asked for help if I was blocked by a problem for a long time, I mean, really long.
I then brought up my concern to my mentor and manager and asked for their suggestions. It turned out that they really encouraged me to ask questions!
“You don’t have to be so shy, just ask questions if you have any!”
“You can have a baseline for yourself: if you are blocked for [insert a period of time] and gain no progress, you should ask.”
“How well your internship goes, depends on how well you can ‘pull’ from other people you can learn from!”
Indeed, there were so many smart and nice people around who I could always learn a lot from. I tried what they said, and I could see my progress in both work efficiency and understanding of a problem!
One thing I find useful when asking questions is to organize your questions clearly before you reach out to people, with a description of the situation, what and why you need something, as well as what your attempts are. This will kill two birds with one stone, since you can better understand your problem, and save others’ time as well!
Keep yourself and your work organized
When I walked past the desks of other engineers in the office, I noticed that many of them kept notes. Some engineers wrote on a notebook when they had ideas, some had to-do lists on colorful stickers, some kept a well-structured document on the computer where they could constantly add things to.
Wow, I wanted to try this out myself too! I had a notebook and a pen right beside my computer. Every time I was thinking about ways to solve a problem, I noted down my ideas with keywords. When I discussed technical problems with the other engineers, I brought my notebook and kept notes while listening and talking. At the end of the day before I left work, I would also put a to-do list on my notebook so that I could pick up the work right away the next day. At the end of each week, I also wrote a work summary of what were the challenges I faced, what I did, what I improved on and what I could still improve on. I kept my summary in a google doc, but it is just my preference.
With my notes and summaries, I found myself much more organized and less uncomfortable. There were new tasks, new bugs, new situations coming along every day, but keeping myself organized really helped me prepare well for them. It’s also fun when you look back and see your notes from months ago! Seeing all the learning curves and walk-arounds, you will be fascinated by how much progress you have made over time!
Learn to deal with ambiguity and uncertainty
There are times when you are given clear and detailed instructions of what to do and how to execute, but there are also times when you have an open-ended problem to solve where you have to make your own decisions.
For example, when I was given a task to create a feature, I only knew what it was supposed to be like from the product’s perspective. At Coinbase, I was entrusted to carry out solutions. But it looked intimidating to make decisions as an intern.
What techniques should I use to solve the problem? What service interfaces and models should I add or update? What kind of changes should I make to the technical architecture?
With some guidance from my mentor, I researched online to see how others tackled similar problems, arrived to some solutions and summarized different ideas and wrote a thorough design doc with my answers to the questions above. With the design doc, I collected more feedback from other senior engineers and made changes for improvement. This was even more important when doing cross-platform work! I encountered a case when something that worked well for the backend didn’t mean the same for the web frontend side or mobile client side, and I was lucky enough to have the communication with my teammates before I went too far on a “not working” path.
One important lesson I learned was “Don’t rush to have a poor pull request.” When there is ambiguity and uncertainty, it’s worthwhile to think thoroughly from different aspects and analyze the trade-offs, and most importantly, communicate and collect feedback from other people on your team. This way, you can make sure you are not on the wrong path for too long, and you also get your team to have more understanding of what you are doing.
Big shout-out to wonderful people here at Coinbase
I am really grateful that I met so many wonderful people at Coinbase over my 4-month internship. I had a great technical mentor in my team, who would really sit down and take time to discuss and dig into problems with me together. He was experienced at pointing me in a good direction, but also knew how to “teach someone to fish instead of giving them a fish.” My team manager checked in with my progress and feelings every week, and was great at giving me useful suggestions and constructive feedback that helped me a lot to improve myself. My teammates were awesome too! The team built a sense of building transparent, joyful, curious, and fast-moving. The teammates gave me lots of trust at work, and when I approached them for career advice, they were so generous and helpful!
There was also a special program for interns at Coinbase, where every intern would be matched with a mentor outside their team for the whole internship period. To me, my mentor was a friend and role model! I would tell her what was going well or wrong and what I wanted to improve on, and she talked to me just like a friend, but with a lot of take-aways that I kept applying in my internship.
Also, here in Coinbase, people are just so willing to help you grow, especially if you are an intern! I could just walk up to a manager for another team who I admired a lot and tell her I would like to learn more from her! She offered me a 1:1, from where we even had a development plan with clear action items for something I really wanted to improve on, and indeed improved a lot on — communication!
Not to mention those people who were patient to answer my “might-be-foolish” questions, or got me involved in a conversation about cryptocurrencies even if we didn’t know each other before. People here are smart, many of which have many years of experience, but also really nice and friendly. I really want to give a big shout-out to them, it’s these people who make me have a fulfilling internship and grow a lot!
Last but not least…
I know I still have a long way to go. There are so many things to explore and learn! Looking back, I have learned a lot at Coinbase, which I can always carry forward in my future career. I couldn’t be more grateful that I got the chance to have such an awesome experience here, that I met so many wonderful people here. I couldn’t be more grateful.