By Kate. He

Although working in the tech industry, the concept of DevOps is quite blurry to me even after watching a few YouTube videos, is it just about building pipelines? What’s the operation side of software development? With questions in my mind, the best way to find out was by working on meaningful projects that would allow me to gain an area of experience. While starting from the beginning was intimidating, it allowed me to investigate the core responsibility by asking basic questions that I hadn’t thought about before, questions like “How convenient is it to use Docker in a team environment? and why?”, and “what’s the difference between end-to-end testing and unit testing?” Most of these were answered by Google, but my mentor Peter never stopped pushing me to the next level and was helpful throughout the process; it turns out orchestration isn’t just a word for musicians!

Code for Philly and the Philly ward leaders Project

The project that I worked on was for Philly ward leaders. The project explains the City of Philadelphia’s ward and committee system to the public. Broadly, they aim to bring transparency with a level of the spotlight to ward leaders and committee members for the Democrat and Republican party structures in the City of Philadelphia and serve to drive voter registration for their party and support of endorsed candidates.

During my fellowship, I worked with the following that helped deepen my previous level of understanding:

1. Docker

2. GitHub Actions

3. Component updates

4. End-to-end testing

The above knowledge (and more) was acquired while helping with the deployment of Philly ward leaders. The fellowship was about developing an updated system to build and deploy updates, identifying issues, and implementing fixes that meet the project’s needs.

Three (not necessarily) simple technical exercises highlighting what I learned:

1. Improvements to the build process

Peter and I started by looking at the current build process. He helped me understand how the project runs build and what needed to be done. We started off by adding Continuous Integration steps to the pipeline; for the Continuous deployment step, I first picked up a few GitHub actions from the GitHub marketplace then did experiments to make sure they met our needs, for example, if adding a trigger on manual approval, after running jobs, it gets deployed to production.

2. Update outdated components

The next assignment Peter gave me was to update outdated components and packages for the application. I have to say this is the biggest challenge I have ever worked on so far. Not only did I know very little about Vue and the tools needed to build the app, but also the updating packages process was daunting at the beginning. I was scared to break the app; I had a feeling it wasn’t just as simple as typing “npm update” in the command line. Through much Stack Overflow research, Googling, and reading the documentation of each dependency, I have become tremendously confident about every update over time. Through this whole process, I learned that reading the docs is just as important as writing code!

3. Implementing End to end-testing framework

The next and final step to take was to implement an end-to-end testing framework for the application that would simulate real user scenarios and validate the system under test and its components for integration and data integrity. While choosing a suitable framework, we did research between Cypress and Playwright, and we decided to go with Playwright for its versatility and being completely open source, as well as being loved by many coders. The testing started off simulating a user typing in the site URL, loading the home page to clicking buttons on different pages. Finally, I Integrated end-to-end testing steps into the CICD pipeline to automatically generate test results before changes were made to production. Overall, it’s a very impressive tool, fun to work with, and you can do so many things with it!

Things that made the fellowship such a great experience:

1. Exposure to teamwork

One of the most interesting aspects of this opportunity was getting to be part of a motivated team. While most of our meetings were virtual, we kept in close communication via Slack, which helped to make sure I was on the right path and guided me through when problems occurred.

2. Reflection

I also learned about writing and public speaking. Code for Philly was very supportive by arranging two very helpful sessions: technical writing provided by a prestigious technical author Julie Silge, and a public speaking session with Marieke Jackson; both sessions paved a successful path for presenting our work during the time.

Wrapping up, looking ahead…

As my time being a fellow comes to an end, I can proudly say it has been a great experience. I was hoping to gain experience working as a DevOps Engineer outside of my full-time job. I’m thankful the organization gave me the opportunity to add these skills to my toolbox, and to broaden my tech skill set to include basic DevOps competencies. I’m thankful for the exposure I got to a group of friendly, skilled people in the Philadelphia area. Going forward, I’m hoping to put my skills to work in a professional capacity and will continue to contribute to meaningful projects in Code for Philly.