Hello! My name is Gurleen, and I’m a Software Engineering Intern at Linode. I study Computer Science and Entrepreneurship at Drexel University in Philadelphia, Pennsylvania. For the past five months, I’ve had the opportunity to be the first intern at the Linode, working alongside the API team.
Linode’s mission to make cloud computing simple, affordable, and accessible to everyone is near and dear to my heart. I started with Linode back in 8th grade to spin up a Minecraft server (which, by the way, is now available as an easy to use One-Click App), and today I use Linode for hosting large applications. From the start of my internship in March, I felt it important to continue that mission and bring the cloud to a new generation of technologists.
During my time at Linode, I’ve had the opportunity to work on both internal and customer-facing projects:
Improving API Response Times
APIv4 is the backbone of our product offerings. It powers our Cloud Manager and allows our customers to have programmatic access to all of Linode’s products and services. This year, we’ve placed a lot of focus on speeding up the API to better serve our customers, especially those who connect from the other side of the world.
Before taking on this task, our response times hovered around 150ms. That’s already fast, but we still wanted to squeeze out some more performance.
As a newcomer to this large project, I could dive in with a more critical eye. We wanted to find optimizations that would yield savings across all our endpoints (of which there are many). I started thinking about what operations take place everywhere, and it came to me: logging!
It seemed a bit far fetched at first, but it makes sense when you measure it. Writing to stdout, as well as logging to a file, is a synchronous operation in Python, and it can take anywhere from 10-20ms depending on the amount of text written. That’s a large portion of time spent on a task that may or may not be useful.
I explored various options, such as asynchronous logging, but I found that reducing the logging level would yield the most benefit. Our development environment mirrors the containers we use in production, so I developed a stress test using Locust and gather response time data. The biggest gain came from changing the logging level from DEBUG, our previous production setting, to INFO. This development alone gave us an average reduction of 15 milliseconds in production, even with ~18k requests per minute!
Improving API response times was an amazing opportunity to make the customer experience better for everyone, especially those in Europe and Asia.
Gathering GitHub Metrics for Managers
Software Engineering Managers at Linode have the task of gathering data about their teams’ productivity. They use GitHub metrics, such as PRs and commits, for some of this information. However, this can be a laborious task, as we have repos in both our GitHub enterprise server and open-source projects on GitHub like the Linode Cloud Manager. My manager, Samir, asked if I could assist in speeding up this data collection.
This process was ripe for automation. I began by exploring GitHub’s API offerings and found that both public GitHub and GitHub Enterprise share the same API schema, making it easier for me to share logic for both cases. Search functionality allowed me to get the numbers I needed in just a few API calls.
I built out a proof-of-concept within a week that was usable as a command-line tool. The next step was to provide a web interface for our managers to use. For the size of this project, I used Vue.js to get the job done. The result was a small, self-hosted app that can take API keys, team rosters, and a date range, and turn them into raw numbers for managers to move into tools like Google Sheets.
Managers have already saved many hours tracking down these metrics, and I’m confident that my program will continue to provide value even after my internship is over.
Bring Your Own Certificate
Many customers use our Object Storage service for hosting static websites. By default, we serve an SSL certificate on the linodeobjects.com domain that’s owned by us. However, there was no mechanism for users to serve their own certificates if they wanted to. One of my mentors, Adam Mohammed, came to me with the idea to add this functionality. As a user of Object Storage myself, I understood the value this would bring to our customers, so I worked with him to build out this feature.
My task was to build the API interface to support this new functionality. Building a new feature gave me a tour of every corner of the API project. As a large, monolithic web application, there’s a lot of moving parts to comprehend. It also filled in the gaps of knowledge I still had in how our systems communicate and work together.
A big part of this project was the focus on security. Dealing with customer secrets is no easy task, and we spent many hours planning, discussing, and testing every link in the chain to make sure that we’re providing a secure service. It gave me a new perspective on systems design and allowed me to put myself in the user’s shoes. I’m excited to see customers use and enjoy this feature.
This work is now complete. You can now upload a certificate and private key pair, and Object Storage will serve it when a request comes to your bucket. It’s that easy. This feature speaks to our mission to make cloud computing simple. We give you the tools you need to build your project or business without any of the bloat.
I started at Linode in March, not only as the company’s first engineering intern but also as the first employee to be remotely on-boarded due to the pandemic. Despite this, I learned much more than I ever imagined I would. My team and department welcomed me with open arms and answered questions I didn’t even know I had. We were able to make the most of a weird situation because Linode’s culture is about supporting one another. I could not have asked for better people to work with.
As you saw, the work I took on wasn’t “intern work.” I was on high-impact, customer-facing projects with the goal of advancing the company’s mission. Beyond the technical knowledge, this work instilled in me a customer-focused engineering mindset. I can only obtain these skills outside of the classroom.
These past few months have been exciting, challenging, and rewarding. I’m so grateful to Linode for providing me with this opportunity, and I can’t wait to see other students in this role.