My Experience Interning at CloudOps

28-08-2020 / Julia Hohenadel

One might think that a company’s culture is hard to define when you’ve never set foot in the office or even met your coworkers in real life. At CloudOps this simply isn’t true; CloudOps did an amazing job of propagating their culture in an online environment.

There were a ton of initiatives to facilitate team bonding, such as virtual coffee times and in-person ice cream meetups, to perpetuate CloudOps’ amazing culture in the online environment. That being said, culture as a concept is difficult to describe with words. They say a picture’s worth a thousand words, so here are some of my favourite moments at CloudOps.

Beer meetings

Every Friday at 4 pm the company gathers for a “Weekly Update”, which is better known as the beer meeting. For the first five or so minutes we chit chat, we give a quick update, and then some people move to a different zoom call to chat more. We call it a 5 à 7, which is like happy hour. In the picture above we competed to see who had the best virtual background, which was a smash hit!

best background competition

Ice cream meetups

Once COVID restrictions eased, CloudOps started arranging in-person ice cream meetups. As a Guelphite I couldn’t join the folks in Montreal, so we in the GTA had virtual ice cream meetups!

virtual ice cream meetup

Loot haul

My manager Pat biked to all my teammate’s houses and delivered some bagels. Guelph was a bit of a hike so he mailed me 2 dozen Montréal bagels. So tasty! They also sent me a goodie box with my computer, including a branded sweater, pens, notebooks, stickers, and even little lego figurines!

Julia and her bagels

Tiktok work

I worked with the HR team to create a series of Tiktok videos for each of the company’s core values. Check out the Tiktoks at this link: @_cloudops

Salt-n-peppa (Let's talk about Slack)

CloudOps Bees

CloudOps has a beehive on its roof! The hive is a nod to the company’s core values, and it is super duper cool. They have workshops over zoom for hive health checks. It’s nice to work someplace that gives back to the environment.

Alvéole on CloudOps' rooftop

What I Do as a Cloud Developer Intern

I’m a software developer on the Products Team. The team has ownership over the CloudMC product, which means I was a full-stack developer for a Java web application. I fixed bugs, updated the UI, refactored code, and also added new features, mainly to the Kubernetes plugin. I was required to perform extensive research on Kubernetes entities to aid the development of new features.

During my time, I developed many new features for CloudMC, such as those offering: Support for Kubernetes resources and their details, such as Deployments, Service, and Secrets. Support for the creation of certain Kubernetes Resources, such as Pods, Deployments, Services, and more!

I also contributed to the maintenance of the product:

  • I contributed many bug fixes
  • I performed many Acceptance Reviews on my teammates’ work
  • I wrote a ton of tests for all of the Kubernetes entities
  • I did a lot of refactoring of different implementations

Team of Teams Work

One of CloudOps’ four main values is teamwork. We have this concept that we are a “team of teams”, one big team formed from the company’s various teams. As such, CloudOps provided me with lots of opportunities to contribute to work outside of my team, such as…

  • Quality Assurance for the new CloudOps website
  • Demo of the new features in CloudMC
  • Creation of a series of TikTok videos inspired by CloudOps’ main values
Julia and Julia singing for a video

Another one of CloudOps’ values is continuous improvement. Having completed my internship, there are a few skills I can say I’ve learned.

Technical

  • Git
  • Object-Oriented Programming (Java)
  • Kubernetes
  • Cloud Native Concepts
  • IntelliJ
  • Groovy (Unit Testing)
  • Full-Stack Development
  • Flexible Coding

Non-Technical

  • Code Reviews
  • Public Speaking
  • Leadership
  • Communication
  • Kanban and Scrum Methodologies
  • Problem Solving
  • Teamwork

I started my internship with five goals in mind.

Goal 1: Gain a better understanding of Cloud frameworks and infrastructure.

The majority of my work at CloudOps was spent contributing to this goal. I worked mainly on the extension of our Kubernetes support (nearly 200 hours of Kubernetes work alone).

Note: Kubernetes is an open source container orchestration engine for automating deployment, scaling, and management of containerized applications. The basic idea of Kubernetes is to further abstract machines, storage, and networks away from their physical implementation and into the cloud.

Throughout my work-term I worked on Kubernetes features such as…

Viewing a list of Kubernetes entities Viewing the details of a single Kubernetes entity Operations on Kubernetes entities such as… Create Kubernetes workload and networking resources Delete Kubernetes resources Edit Kubernetes configuration resources

While some of the features I implemented followed predefined patterns, a few of the features I added were entirely brand new. Because of this, I read a ton of Kubernetes documentation. Even the simpler features required thorough research, since each entity has their own unique characteristics. Though, my research covered more ground than simply reading documentations; it also provided me opportunity to work with a few of the public clouds, as I configured a Kubernetes Cluster on both Azure and Google Cloud Platform.

Also, CloudOps organized Cloud Native Day which was a series of talks about Cloud Native technology and solutions. I attended three such talks, as follows

Untangling the Maesh – Thinking outside the Net An explanation of the Maesh (a lightweight service thingy) and its future in the world of cloud computing. Kubernetes Needs the Zero-Trust Model An explanation of security issues that Kubernetes is at risk of, and how to overcome this. Kubernetes Dream A thought experiment: what the ideal future for Kubernetes looks like, and how to make that dream a reality.

In summary, CloudOps provided me with a ton of opportunities to learn about cloud frameworks and infrastructure, and I know this because I’m able to teach others about what I’ve learned!

Goal 2: I want to gain more confidence on the front-end side of web development.

In all honesty, I did not really work that hard to reach this goal. 🙈 My comfort zone is in the server side of web development— which was the reason I made this goal in the first place. I couldn’t help it though! There was so much cool Kubernetes-related code to write on the backend side. Talk about a conflict of goal interests! That being said, I did have the opportunity to delve into the world of Java and Vue.js on a couple bug fixes. Through this work I learned a very cool trick! If you type debugger; in javascript it acts like a breakpoint, stopping the flow of code so you can debug it. Though that’s about the extent of the knowledge I gained.

Goal 3: I want to gain proficiency in the Groovy and Jest testing framework

I achieved this goal quite well, and I actually worked in a third testing framework, Junit, for one fix. Although, having grown proficient in Groovy makes me reluctant to use Junit ever again!

I highly value unit testing. This was especially true in the beginning of my internship, when I was less familiar with the webapp— I performed true test-driven development, writing tests before I’d ever ran my code on the webapp. For every new feature I made sure that I wrote extensive tests for my code, and for every fix I made sure that I updated the tests. Sometimes I would implement a bug fix and no tests would break, and I took that as a sign to add more! Additionally, when I noticed discrepancies in the level of code coverage for our newly-developed Kubernetes Resources I took it upon myself to add these missing tests, dozens of them, and going forward I advocated for higher test coverage for all new entities.

In the end, I even wrote tests with features even full-time devs weren’t aware of! In my book, that’s a sign of a goal well achieved.

Goal 4: I want to gain a better understanding of Kanban and Scrum methodologies and best practices

I thought that I’d achieve this goal by participating in the practices of each methodology— a feat easier said than done when working in a remote environment.

A large part of our Kanban process was the PR (Code Review) process, a topic which I examined extensively with my manager, Pat. Together we wrote a couple of documents about PRs. The first document was more of a reference sheet; it explains why PRs matter and provides tips and tricks for the people participating in PRs. The other document summarizes the main points of many great code review articles. From these documents I made a presentation about PRs that Pat and I presented to the whole team!

I strived to participate in many more Kanban related meetings, such as tasking meetings, sprint retrospectives, and product backlogs, and I’m happy to report that my efforts have resulted in my greater understanding of Kanban and Scrum methodologies.

Goal 5: I want to learn how to still feel connected to my team in a work-from-home environment... and maybe work on my French while I’m at it!

I can honestly say that I went above and beyond with this goal. At the beginning of my co-op placement I made great efforts to connect with the team, attending every single optional meeting I could, from the dev team’s daily virtual coffee time to the company’s weekly virtual happy hour, from technical discussions that went way over my head to trivial fixes that could be solved in one sentence. I attended them all, and I felt very close to the team of teams because of it!

Every week I’d have a special coffee meeting. The first was facilitated by the Slack app Donut, which is a really cute tool that randomly pairs off the members of a certain Slack channel and gives them two weeks to find the time to get coffee. At first, these meetings were what I saw as a necessary evil; they were, after all, just time to make small talk with a complete stranger. However, once I got into the groove of things I really looked forward to these meetings! And I talked to a wide variety of people- people on other teams, people from our sister company, even the CTO and CEO! These coffee times were super useful in cultivating the cute little CloudOps culture and in making me feel like a member of the team.

The next special coffee meeting was dubbed “Franglais Cafe”, a space for the victims of the Ontario Public School system’s lacklustre French education to practice our French. Or Franglais, because we spoke about 50% French and 50% English. That was a great way for me to catch up with one of the interns on the other team, someone I rarely saw but who I would’ve spent a lot of time with had we been at the office. And I even practiced my French!

Last but not least, my work with the TikTok campaign came about from an anecdote I shared at a virtual girl’s night. Through my TikToking escapades I worked closely with the HR team, and I also had to talk to a variety of people in the company and ask (read: beg) them to contribute to our videos. This little side project sparked a crazy amount of conversation and camaraderie with people from all over the company, from my closer colleagues to people I’d never even met!

In the end, this goal was the key to my happiness during my internship, and it was something I completed time and time again.

Conclusion

At the beginning of my work term, I was more than a little wary. I wasn’t sure how working remotely for a company would play out, and I was worried I wouldn’t get the support I needed. Although the road had a few bumps along the way, the majority of my time at CloudOps was smooth sailing. CloudOps was so supportive of me, my goals, and my interests despite the state of the world, and as my term concludes I feel like a big old part of the team.

CloudOps was so supportive of me. Throughout the term, my team was only a zoom call away, always eager to help me out. I felt like my voice was heard and that I could make a positive impact on the company. Working at CloudOps also provided me with amazing opportunities to learn more about cloud computing; in fact, they gave me the time to attend the talks on Cloud Native Day, where I learned a lot about the cutting-edge side of cloud technology. In the end, what made working at CloudOps so great was that it provided me an environment in which to learn and grow, both as a developer and a person.

Acknowledgements

I would like to thank everyone at CloudOps for making this very unique co-op experience truly incredible. I’d like to thank my teammates on Red Team for being my CloudOps Family- for all that you taught me, and the support you provided me with, and for the laughs that we shared, I thank you from the bottom of my heart. I want to give my manager, Patrick Dubé, a huge shout-out for being so supportive of my learning this past term. And thank you for mailing me bagels to Guelph- that was seriously one of the nicest things anyone has ever done for me, and I hope you know they were very appreciated. I’d also like to thank the entire company for encouraging my coffee addiction, especially Pat, Milt, Stefan, and Jason. And thanks to the HR team, especially Jen, for including me in the TikTok videos. It was a great experience, and a great way to collaborate with people outside of the Products team- like the other Julia! (Julias unite!) Last but not least, from the University of Guelph, I’d like to thank Kate McRoberts for her support and guidance. Because of the support of all the people I mentioned and many more this crazy co-op experience defeated the gloom of the pandemic and was truly the highlight of my year.

New call-to-action