What I learned as a software engineering intern at Hudl

Over the summer of 2016, I was a software engineering intern at Hudl, a company that builds software to help sports teams play, communicate, improve, and win. This blog posts covers some of the essential takeaways from my internship.

Going in to my internship, I hoped that I’d learn a lot more about software engineering in general, and how code is written, tested, reviewed, and deployed to production at scale. I wanted to get a good idea of how to write robust, maintainable code, how to identify bugs in code, and appropriately squashing these bugs. Luckily, over the duration of my last internship at Hudl, I gained these skills and a lot more:

  1. **General improvement in coding/software engineering ability: **I learned a few languages, frameworks, and database management systems: Mongo, JavaScript, React, GraphQL, and C#. I learned a few interesting concepts of databases while working with Mongo as well as how GraphQL servers differ from the regular RESTful paradigm. Moreover, I was exposed to a few important computer science concepts and how they can be applied to production environments, namely using async/await methods in C#, lazy object initialization, and dependency injection. I also learned in general how the microservices architecture worked, and how to make API calls to different services using an internal library and use or cache these results. Another important thing was writing solid unit tests in case my code broke in the future.
  2. **Basic knowledge of application and codebase architecture: **I was lucky enough to get to sit in on and even contribute to discussions about how a new feature or microservice in the codebase would be architected, what the deliverables will be in what time frame, and how it would be unit tested. This gave me exposure to how a large technical project is planned and architected, before it is even implemented in code. In another particularly difficult problem I was solving during my internship, I had to figure out how to integrate a service that required multiple classes into another codebase with similar functionality, without introducing any code duplication or unnecessary abstractions. This required understanding concepts like inheritance and polymorphism, and applying them to figure out how to produce the best code with minimal replication.
  3. **How to push code to production: **I worked with an awesome QA on my team who walked me through the steps of actually deploying my code to production once I had gotten it tested and signed off by other developers. I got to learn about how deployments are done at scale to make sure that nothing breaks and the user is guaranteed 100% uptime.
  4. **Documentation & writing: **I learned that it’s important to document everything that you can do, so that it can be used for future reference. This requires effective communication and writing skills. In addition, we used the pull-request paradigm to propose new changes or additions to production code, and writing good PRs that clearly stated my changes turned out to be an important skill I developed.
  5. **Receiving feedback: **Before my internship, the only real source of feedback I had was the grades I was given on an exam. However, at Hudl, I had the opportunity to receive actual feedback from the people I worked closely with, whether it was feedback regarding the code I had been writing or about my overall performance. Taking critical feedback can be tough, and I realized it’s essential to seek feedback and learn from your peers and co-workers if you want to grow and improve. Since then, I’ve been deliberately seeking feedback from others in my life, so my internship also played a role in my personal development.
Notes
  1. I originally wrote this as an answer on Quora.
Written on March 5, 2017