My Summer In The Rainforest

Photo by: Kyle Cleveland / Unsplash – https://unsplash.com/photos/VDPFEyIrAn0

And So It Begins

This Summer, I had the opportunity to work as a Software Development Engineering intern with Amazon Web Services. I spent the Summer in Seattle, WA working as part of the Kendra team within the Machine Learning platform of AWS. This internship marked my first official experience working in the software industry and, despite some nerves, I was more than ready to get started. From my perspective, this opportunity was something I had been working for consistently since I began my Computer Science studies with Oregon State in the Winter quarter of 2021. My hard work was finally paying off.

On June 15th, the start of my journey began as I hopped on a plane in Cleveland, OH. After spending 5+ hours in the air and going through 3 different time zones I finally arrived at the Seattle-Tacoma International Airport. I eagerly departed the airplane and found my luggage at baggage claim. With all my belongings accounted for, I ordered an Uber and made my way to the Airbnb I would be staying at for the Summer.

With my internship not starting until June 20th, I had some time to get oriented to Seattle and my new way of life for the Summer. In the days leading up to my internship, I spent time learning the bus system, finding my route to the office, exploring the city, and getting my Airbnb to feel like more of a home.

Below are a few of the pictures I took while I was exploring Seattle.

My Project And Internship Experience

My first few days of work were spent doing general onboarding activities – setting up my laptop, getting correct access to various internal systems/services, setting up my email, meeting the team, etc. I had my first 1-on-1 with my mentor the Wednesday of my first week. During this 1-on-1, I was introduced to my internship project – I would be developing a real-time analytics dashboard that the Kendra management team could use to better understand how customers were using the Kendra service. I was told that I would be responsible for taking the project from concept all the way to production. This meant I would need to design the project infrastructure, create the project design document, implement the project infrastructure and code logic, and create associated unit tests. To say I was feeling overwhelmed is an understatement! With the internship duration being only 12 weeks, I instantly felt way over my head – both cloud application development and AWS were completely new concepts to me. Nonetheless, I was determined not to fail. I quickly began researching and doing everything I could to understand all about AWS and what services were offered.

A view of the Space Needle from my desk

During the research phase, I relied heavily on my mentor, my onboarding buddy, and the other members of the Kendra development team. AWS has a huge offering of cloud services, and the team played a huge role in helping keep my research efforts focused in the right direction as I worked on designing the project infrastructure. One of the tricky aspects of the project was that the Kendra service is available in 7 different AWS regions, and each region has exclusive customer data. This meant that the service I was building would need to process raw customer data from each region and then consolidate all the processed data together in one region so that a dashboard with analytics could be built to show all the combined data together.

After 2 weeks of heavy research, I finally had a service infrastructure design that I felt confident in! My service would start by using Amazon CloudWatch to trigger an AWS Lambda function which would be responsible for processing raw customer data. The event trigger would be based on a cron job that was setup to fire every 2 hours. Once triggered, the AWS Lambda function would begin by pulling in relevant raw data from DynamoDB, CloudWatch logs, and several other internal AWS services for processing. Once the processing was complete, the data would be written out in its final form as a JSON document into an Amazon S3 bucket partitioned by region, by year, by month, and by day. From here, the partitioned data would need to be consolidated into a single table. Now, you may be asking why not just consolidate the data upfront? Well, since each region will be processing its respective raw customer data every 2 hours, there is the possibility that one region will overwrite data already written into the S3 bucket by another region. Thus, the decision was made to keep the initial processed data upload partitioned by region to prevent cross-region overwriting. To consolidate the processed data from each region, I decided to use AWS Glue and AWS Athena. Glue crawlers were used to create tables out of the JSON files and Athena was used to merge all the data into a final table. Finally, a connection could be made between AWS Athena and AWS QuickSight allowing the consolidated processed data to be displayed using easy drag-and-drop analytics graphics offered by the QuickSight service.

After getting approval on my design, I went to work with implementation. I spent the next 10 weeks working on building the infrastructure, implementing the code logic, going through code reviews, and developing unit tests. The infrastructure itself was written using TypeScript and the code logic that went into the Lambda functions was written in Java. Both languages were new to me, but I found that the foundation built during my course work at OSU more than prepared me to quickly hit the ground running with both. For unit testing, I had the opportunity to work with JUnit and Mockito. Mocking and stubbing of objects was a brand-new concept to me, however I attribute both as a huge factor in helping me improve my coding skills. I learned that to successfully mock and stub objects, your code package needs to “correctly” inject different dependencies and for dependency injection I used Dagger. This led me to learn more about dependency injection and really shaped the way I look at efficiently developing a code package to allow for unit testing and better readability.

In the end, I was able to successfully get my project completed and released to production for internal use among the Kendra team. I also experienced a huge growth in my skills as a software developer – I was pushed hard to continuously grow and learn new concepts, and this ultimately helped take me to the next level in my journey to become a software developer. Excitingly, I also received a full-time return offer to rejoin the Kendra team after graduation!

Key Takeaways From My Internship

  1. Keep Calm and Continue Moving Forward

There were many, many moments during my internship that I felt overwhelmed, unsure, or confused. I found that the worst thing I could do in those moments was to panic. In that regard, I found that the best path forward was to remain calm and continue moving forward in search of understanding or a solution. Besides, where’s the fun in anything without a challenge?

  1. Don’t Struggle in Silence

I’ve found that the tech industry is full of highly intelligent, motivated, and hard working people. Sadly, I’ve also found that it is very easy for people in tech (myself included!) to end up with imposter syndrome. In my case, this can lead to me putting myself on an island and not reaching out for help in fear that I’ll be “found out”. I worry that not knowing something will shine a light on my inadequacies. During my internship, I learned that this was quite the opposite! I found that it was extraordinarily beneficial to reach out to a mentor or another team member when I was stuck or unsure. A problem that may have taken me a day to come to a solution on could be reduced to an hour with the help of someone more experienced. Not only that, but the opportunity to build a relationship with your teammates and learn from them is invaluable!

  1. Look for the Learning Opportunity

Perspective and attitude is everything. During my internship I consistently came up against challenges. Whenever you face a challenge you can choose to be frustrated by it or you can choose to see it as an opportunity for growth. I learned that if I can look at every challenge as an opportunity to grow and learn then I don’t have to be frustrated by them at all. In fact, with this mindset, I found myself seeking out more challenges that would push me to keep being better.

  1. Take a Walk

I can’t begin to tell you the number of problems I’ve solved by just getting up and walking away – my internship project was no different. Whether it’s going for a walk, a run, getting a coffee, or spending some time staring out the window, often I’ve found a seemingly “unsolvable” problem was only “unsolvable” because I was stuck looking at it in a very specific way. Getting up and doing something else gives your brain the opportunity to reset itself and when you come back you’ll often see the solution was right in front of you the whole time!

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *