
API Gateway
- Git
- Unix Shell
- TypeScript
- Node.js
- CI / CD
- PostgreSQL
- GCP
- Golang
At Streamroot I worked as the tech lead of the company’s analytics dashboard team. We developed a web app which was used both internally and externally to monitor and configure usage of the company’s video streaming products.
Our dashboard was the primary interaction point for customers to understand the value of the underlying products as well as diagnose potential issues, so it was critical that we validate the accuracy of all data visualizations as well as confirm that all configuration tools worked in case a client needed to alter parameters of their integrations.
Creating a Public Gateway
During my time at Streamroot, their backend was comprised of several microservices (mostly written in Golang) orchestrated by Kubernetes. For the most part, I worked primarily on an inherited service focused on supporting the frontend: various entities needing CRUD operations, calls to external services, etc. Since most of the functionality we added on the frontend required very minor changes to this medium-sized service, I did not feel an urgent need to rework it and opted instead to address technical debt gradually with the team. That said, as the wider company backend evolved over time, the positioning of this service grew unwieldy since other services relied on rigid parts of it and the brittleness of the system was highlighted. This ultimately was a small piece of a larger, multi-team puzzle around the organization of concerns in the backend services.
This is where I was asked to help rework the backend by breaking the dashboard backend service down into its component parts which would be converted into focused microservices. We aimed to write these new services such that updates in one of the core services (such as the shape of the User entity) would require minimal to no updates in other services. To handle this dissolution without complicating API interactions, we created a gateway that could combine calls to various underlying services and preserve the outward simplicity. Additionally, this gateway would handle authentication and the rest of the services would no longer be publicly accessible. So I needed to organize the following in collaboration with other teams:
- Creating a handful of microservices to replace the functionality of the existing dashboard service.
- Replacing the old authentication system of sharing code and secrets between services with a new auth service that the gateway would use.
- Creating a gateway with endpoints for all of the underlying services as well as recreating the functionalities provided by the old dashboard service.
- Learn enough Golang to be effective.
On top of the scope of this work, I had already planned my departure with management before this project was planned, so my time would be limited to a few months and I was needed to ensure feature parity with the existing dashboard backend service. We worked very hard for those months and managed to release the new backend before I left!