What I Learned From My Internship

Nina Vuong
Engineers @ Optimizely
6 min readSep 16, 2020

Introduction

This summer, after I graduated from UC Irvine, I have gotten to participate in the most rewarding experiences with Optimizely which is the world’s leader in customer experience optimization. It was great to work as a Software Engineer intern on the QA team with a group of incredible team members that allowed me to work on a variety of projects including both front-end and back-end projects. The hands-on experience and knowledge gained through this internship will be beneficial to me for the course of my career. It set in stone the foundation of my career and I plan to use techniques and advice that gained from the past 12 weeks to share with future interns.

At Optimizely, QA team exists to help developers create and build the product with high-quality code. We were involved in every step of the agile development process to ensure its proper functioning with the automation code, run manual tests, and write testing tools to help run and maintain the product. I had the chance to contribute to automation code using Cypress.io framework for the front-end, then worked on API testing, deployed on pipeline using AWS, and added to integration SDK testing using BDD framework. The aim of this blog is to discuss what I worked on and share some tips that I gained through this internship.

What I worked on

  1. Adding automation test for Front-end:

Cypress shows an error message when running test

I wrote JavaScript automation code in the Cypress framework — an end to end testing tool for Authenticated Datafile, Snippet Settings, Scheduling logic, and Targeted Rollouts for JSON to add on regression automation test suites for our product. The purpose of those tests is to exercise a complete production with a scenario. This means we can simulate user behavior and cover all functionalities.

The interesting thing about using Cypress is that it gives me the ability to directly debug our app under test from Chrome Dev-tools, it not only gives me straightforward error messages but also suggests to me how I should approach them.

I learned that a good developer should learn how and what to test in their app. It’s simply a waste of time if we write meaningless tests that increase code coverage but don’t test the true functionality. I put myself in the user’s role to include all the necessary details and the expected results that help to determine if the test case is a “pass” or “fail”. Also, testing is one of the critical processes in application development, the success or failure of the application entirely depends on it because test cases can help uncover a lot of information early on such as usability issues or unclickable buttons.

2. Contributed on API test suite:

After three weeks working with the front-end, I moved to the back-end side and worked on API testing named Godzilla. I learned tons of new things from this project like how to use Python to establish integrations between services that are functioning reliably. The goal of building Godzilla is that we can begin testing API endpoints before deploying to the customers, which means we’re testing to verify that new features have not broken any existing functionality and making sure those live API endpoints are up and returning the data that’s expected.

I learned that it’s important to do API testing during development because it can reveal issues with the API, server, network, and more that we may not discover or solve easily after deployment. I added two API tests for Exclusion-group and Experiments to complete the test coverage for Full Stack entities that help maintain the quality product. Then my manager suggested moving the Godzilla project running on CI/CD pipeline to make more protection for API before releasing new code. I had a chance to learn about deploying using AWS CodeBuild and Lambda.

To do it, I created a buildspec.yml file that CodeBuild uses to run. It’s a build specification file that includes building compiling running tests. Our repositories hosted in Github are automatically built by AWS CodeBuild on changes (resulting from Pull Requests being approved).

By invoking AWS Lambda functions, the QA team can receive real-time notifications that help them monitor the systems from within Slack. I configured the Slack integration to obtain the URL for sending messages to a specific channel named #godzilla-pipeline.

Here are some tips I have learned throughout my internship..

  1. Ask questions:

For many of us, it’s natural to feel shy and nervous when getting started in a new working environment. I was scared of appearing unknowledgeable about some tasks I was working on and avoided asking any questions. In the first 2 weeks, I spent too much time and energy just reading the testing code in the Github project’s repository then realized that a good question can lead to innovation and growth, and would help me work more efficiently. It’s always better, however, to get clarification than to do a thing wrong. I realized that internships are supposed to be a learning experience, it is a great chance for me to learn and ask questions. I started asking more questions that helped me be able to pick up knowledge that I never would have been able to come across in any other setting.

2. Keep learning:

This internship is my opportunity to learn and try new things. Trying out new programming languages, patterns, and technologies that helped me challenge myself. Even if I had no clue on how to do a certain project, I would still take it on and find out from many sources. This was the perfect time for me to learn and grow.

3. Don’t be afraid to ask for more tasks:

As an intern, I was not given a lot of work at first but instead of waiting after completing my tasks, I would go ask and look for more that can help me gain more knowledge and experience when working with multiple projects. My advice is you should approach your manager/mentors for some additional task or take up a project on your own. After several weeks, you have spent learning and understanding should by now give you the ability to pick up something on your own and complete it. This is where your mentor’s advice will be very helpful, you can approach them anytime and get the necessary guidance. “Learn and be curious”

Finally, I want to say thank you to my manager Jeffrey Sing and the mentors, who guided me through my internship process, helped me out whenever I got stuck and made a profound impact on my professional development. I gained deeper insight into the software industry and it has helped me significantly with my career planning. I developed a better understanding of the career path of a software engineer through the internship, helping me to make an informed career decision. Spending 12 weeks with Optimizely made a big impact on my life. Not only was I exposed to a network of support from the QA team, but also made lifelong friends and professional connections during my time here. I was able to see and experience the concepts that I have learned throughout my life. This provided me a chance to reflect upon what I have learned in school and gain the important insights of working with seniors engineers in reality. My biggest takeaway is the new long-term relationships and connections with my colleagues and fellow interns at Optimizely.

--

--