This summer, I had the incredible opportunity to participate in an internship at Hippo Insurance Services as a Software Engineering Intern within the Partner API team. Unlike many internship experiences where interns work on low-risk, isolated projects, I was tasked with an impactful project and treated like a full-time employee. The skills I have gained and the knowledge I am taking away are immeasurable.
Academia vs. Coding in the Real World
Within my academic career, I've only had well-defined, isolated problems. Every test, assignment, and problem sets were provided with all the information necessary to find the solution. In my time at Hippo, this was rarely the case. I realized that although requirements were known (I.e., "acceptance criteria"), it was my responsibility to wade through loads of context in order to investigate complex problems. Through this process, I learned to gather relevant information, analyze possible solutions and deduce the one best suited for the problem.
From "Coder" to Software Developer
Most of my studies at University have focused entirely on learning programming languages and analyzing algorithms. I rarely contemplated abstract solutions to a problem before touching code. Working as a Software Engineering Intern expanded and improved my process by encouraging me to actively think about what I am doing, what I want to create, and how I will make it happen.
My time at Hippo also broadened my understanding of what the job of a Software Developer entails. Aside from writing new code, I was in charge of fixing bugs, design and architecture, testing, and refactoring.
Developing an End-to-End Solution
My primary project during my internship was to design a high-level API that implements business logic to interact with our Data Vendors. To kick things off, I learned to write a formal Tech Design Document, which includes information like the scope of the problem, the analysis of possible solutions, and my recommendation for the best course of action. I attended brainstorms and reviews to gather information and feedback that helped me clarify and iterate on my ideas. I also learned to make data models and sequence diagrams to better explain my solutions.
I also gained experience in Project Management, using the tech design document to break down tasks into manageable Jira tickets and estimate each ticket's story points. These tickets helped me prioritize what needed to be done and kept me from getting overwhelmed at the size of the project.
Coding the actual API brought fun, new challenges. I was working in a language and framework I did not know prior to the start of this internship. It was also my first time working with Git, and it took me a while to get the hang of the pull request (PR) process. In the first few weeks, I regularly failed CircleCi tests for forgetting to update test snapshots and having lint errors. I was very excited to learn there were commands to fix these before pushing the pull requests.
After building the API, the next challenge was figuring out how to test it. I wrote thorough unit and translation tests by mocking services to test the logic of my code. I also used monitoring metrics to track latency and data miss through HTTP responses. While that may sound a bit boring to the laymen, I can assure you that it was all very fascinating to work through and complete on my own.
Once testing concluded and everything worked properly, I integrated this API within a data vendor, which introduced the challenge of navigating legacy code. Because of this situation, I learned to write integration and regression tests. My implementation ended up being so impactful that it resulted in a change in underwriting rules. As a result, I also wrote a migration script to modify existing policies to follow the new rules.
In the final week of my internship, my API integration went into production! My team and I worked late to assist DevOps with any hiccups surrounding the code release. It is exciting to know that something I worked so hard on is being used by customers every day.
Experiencing Growth and Mentorship
At the beginning of my internship, I was paired with a mentor to help me become accustomed to the code base and guide me along the way. My mentor, Edward, was a friendly face right from the start and served as a valuable resource for answering any questions I had. He offered insight into the company and the technologies it used. As well as giving me advice about career development and finding a work-life balance. It was a wonderful experience working with such a talented engineer.
As my internship progressed, I had the opportunity to interact with the other Senior Engineers on the Partner API team. They shared a wealth of technical advice surrounding caching/persistence logic, object-oriented design patterns, and the tradeoffs between synchronous vs. asynchronous flow. By providing me with critical feedback in code and design reviews, this team helped me grow as a developer.
A Thank You
This summer, I saw firsthand the kind of innovative spirit that compelled me to join the tech industry in the first place. I could not have asked for a better internship experience on which to build a foundation for my career. I will forever be thankful for this opportunity and proud to be a part of the Hippo family.