My Summer at SentryOne (Dedicated to the Prospective Intern)
For my first software development internship, I landed on a CloudOps and Site Reliability Engineering team at SentryOne. If you are like I was at the beginning of the summer, you might not really understand why that has such a large impact.
Going into the summer, I had practically no prior knowledge of CloudOps. I mean, I knew that there was a field called cloud engineering and that “the world is moving toward the cloud," but I couldn’t really tell you much about a virtual machine or describe any individual services that a cloud platform such as Azure might provide a company. I thought that going from my traditional computer science schooling to cloud engineering might be similar to picking up a new language. There might be new syntax or a different set of uses, but, overall, if you know how to code in one language, switching over to cloud engineering would not be much different. Boy, was I wrong.
In the Beginning
My team consisted of two full-time cloud engineers (Mike Wood and Jamie Phillips), each with more than 15 years of industry experience, and me. This could have been extremely intimidating but, instead, they welcomed me with open arms, endlessly encouraged me to ask questions, and patiently broke down difficult, complex cloud features and topics whenever they could. That is not to say I wasn’t drinking from a fire hose throughout the summer (which apparently is a good thing!). Mike and Jamie, thank you for taking the time and effort to onboard me as a tried-and-true member of the team.
Right off the bat I had trouble following the casual conversations the team was having during our stand-up my first week. A stand-up is a daily meeting that each of the engineering teams have where we catch each other up on what we worked on the previous day, what we will be working on today, and anything that is blocking us. These meetings are meant to be high-level conversations, so I was shocked that my two teammates would bust out sentences of which I understood less than 50% of the words that came out of their mouth.
Not to worry because my teammates emphasized the importance that I never stop asking questions. In one instance, I grabbed hold of a word that I heard, “containerization,” and asked about it. A few follow-up questions later and we dove into a breakdown of how resources are used and shared between virtual machines (VMs) and containers, respectively.
The funny thing is that if you had asked me immediately following that conversation to summarize what we talked about, I could never have said it as succinctly as I just wrote it. I learned that it was immensely important that I ask follow-up questions and listen carefully to the answers, and that it need not trouble me that those follow-up questions often led to more terms and phrases I had never come across. Although I did not walk away with an in-depth understanding of the pros and cons that come with Azure Kubernetes Service for containerization, the next time I came across that word, I would be one step closer to understanding the big picture.
So that was a stand-up meeting, where we had the high-level “What are you doing today?” conversations. But, what about the deeper cloud conversations that principal cloud engineers at a software company must be having? You might think an intern does not get to attend those meetings, but I did. There was a weekly meeting that one other intern and I were lucky enough to sit in on throughout the summer, where a handful of experienced engineers got together to strategize the architecture of a cloud product. You can probably guess that contributing to, or even comprehending, these conversations was out of the question. At times, I found myself tirelessly googling, note taking, and trying to keep up with the information being heaved my way. I quickly learned that although I am a curious person, curiosity can burn out if it is not managed correctly, and feelings of being lost, hopeless, or confused can ensue.
So instead, I did my best to take this meeting for what it was: experienced engineers engaging in difficult, strategic conversations regarding a field in which I had minimal experience. This allowed me to focus on another aspect of the meeting from which I could gain better insight, given my level of experience. I noticed that even these principal cloud engineers were struggling with these topics. Each of them took the time and effort to ask thoughtful questions when they were confused or misled and patiently answered them when they happen to know the answer. This showed me how normal it is to ask questions, and how important it is to be comfortable, and even proud, to be able to go to my coworkers for an explanation. It is also the type of thoughtful, strategic discourse that I am excited to be a part of for many years to come.
Throughout the summer, my general lack of experience with cloud led me to do a lot of learning for the sake of learning and becoming more familiar with cloud concepts. Given the increasing momentum of migration to the cloud for businesses across almost all industries, and the extra fuel added to this fire by a pandemic that has forced companies to outsource and save costs wherever they can, it is an exciting time to be exposed to cloud engineering.
My Project: Cloud Analytics Dashboard with Grafana
In my time at SentryOne, I got the chance to spearhead a cloud analytics project that became my baby for the summer. This was learning-by-doing at its finest.
My main project for the summer was related to a weekly “Rounds” meeting. At its core, Rounds is a site reliability meeting, in which 8-10 engineers sit around to discuss the performance of our various products and services hosted in Microsoft Azure for the previous week. The old way of navigating the meeting centered around a member of my team sharing their screen and steering the conversation through the feature in Azure Portal called Application Insights. Application Insights works well for storing information such as our products’ recent performance and failures and for digging deeper into never-before-seen issues. However, we frequently run into efficiency issues, as 15-20 separate tabs are opened, and within each one it can take multiple navigation and filtering clicks to access relevant information. On top of that, there is loads of extra information on these screens that we don’t look at, making it difficult to focus on what’s important. There are a lot of people on this meeting, but only a few active at a time (we look at one product at a time), so efficiency and fluidity are important. This is where Grafana comes into play.
Grafana is an open-source observability platform that I like to describe as “a WIX or Squarespace, but for making dashboards instead of websites.” It has a nice drag-and-drop UI to arrange your dashboard, while importing data from various types of data sources using the appropriate query languages for each source. For the Rounds dashboard, we set up Grafana’s convenient Azure Monitor plugin, which includes connection to Application Insights and Azure Log Analytics.
Before I could get started, I had to learn a little bit about query languages and databases. Mike, my team lead, helped set me up with a small database of AdventureWorks example data hosted on Azure, and SQL Server Management Studio (SSMS) as an environment to query that data. I enjoy brain teasers, and I learn best by experience, so I spent a fun week or so reading through T-SQL docs and knocking down mini sets of challenges to get familiar with query language and a feel for how to interact with a database.
Next, I swapped over to learning Microsoft’s Kusto Query Language (KQL) to grab data from Application Insights. I could have simply started writing code within Grafana, but from my perspective, the Grafana environment runs queries and displays information well, but is not best suited for writing queries. After converting what I had learned about T-SQL over to KQL within the Logs feature of Application Insights, I was ready to take on the dashboard.
As the final step before getting started, I worked on a short design process. We had talked over the goals and important features, and we studied how the user (a member of my team during the Rounds meeting) would most easily navigate through a series of dashboards to best fit the flow of the meeting. I made two wireframes using a tool called Lucidchart, and I got feedback to make sure my team and I were on the same page. I enjoyed the PM-like flow of these discussions, which required me to think about purpose and the effect of my decisions during the creation of the dashboard would have on the user.
I am excited to share that building out the dashboard turned out to be a satisfying example of an iterative, agile workflow. We didn’t have a sense of exactly how the dashboard would be used until we had a version at our fingertips to work into Rounds. Building it out in chunks allowed for an unfinished product to be used during a few of the meetings and paved the way to make informed updates and changes as requested and required by the Rounds meeting attendees.
The rest was history. I got to play around with the UI and design, and I encountered small-to-medium sized query-related problems to solve along the way. One of the most difficult problems I faced was creating a time histogram bucketed logistically along the x-axis. Although we never found our perfect histogram, I had to dive deep into the KQL docs looking for special tactics and potential query manipulations. This was great practice for becoming more familiar with KQL and learning to identify when I’ve done enough digging to conclude that it is a problem that we cannot or do not need to solve.
This summer, I set three goals for myself: Contribute meaningfully to the company, learn a lot, and meet people along the way. I am proud that I accomplished what I came here to do and I am impressed with the internship program at SentryOne for the opportunities the team offered and for caring about us interns, especially in the face of a pandemic. Thank you to everyone who helped make this program awesome.
Ethan is a Software Development Engineering intern at SentryOne for the Summer of 2020, where he focuses on creating cloud analytics dashboards to improve the visibility of hosted products and services. At Vanderbilt University (Class of 2022), he is a Computer Science major with minors in Business and Spanish at Vanderbilt University. At school, he also leads a software development club , Change++ (Changeplusplus.org), that brings students together to partake in the software-development-team experience and build meaningful tools for non-profits in Nashville. Born and raised in the city of Chicago, Ethan is a lifelong die-hard cubs fan, and has a passion for playing acoustic guitar.