I started an internship at Workfront April 2019 as a Software Engineer. Working at Workfront has been an amazing experience. Learning to work in a massive complex application has opened my eyes to the ability we have to improve people’s lives with code.
The first project that I worked on at Workfront was creating a manual testing plan for part of the Workfront application. Once we finished we presented that plan to our Quality Assurance which they gave some simple feedback. We were then given a 1000 plus manual testing plan to test the current application. This was to learn the application and to learn what quality looks like with a real application.
I led a team of five interns, from 3 other teams, to finish an onboarding program called Event Planner. The purpose of the onboarding exercise was to learn how to build a feature inside of the Workfront Application.
Leading this team I was responsible for scheduling a Standup that the team could attend. They were to answer three questions at this standup.
- What did I do since we last met
- What will I accomplish until the next time we meet
- Am I blocked
The goal of the team was to work together as a team. We did not leave anyone behind and nobody was allowed to push ahead of the group. If someone got stuck with anything we would rally behind that person. Resulting in pair programming or group programming. If the group as a whole got blocked and could not figure out the issue we would then get help to unblock us.
The onboarding application was accomplished in two sprints (4 weeks) which allowed us to move onto creating unit tests for the area of ownership our team was on.
After working on the onboarding application I was assigned to increase the Unit testing coverage. Learn and create unit tests with Jest and React Testing Library. Learning how to write, mock, and create unit test has helped me understand the importance of Test-Driven Development. Working to understand unit tests helped me learn how to read code that others have written.
Understanding how to read other code is a skill to understand what their design process was during the building and modifications since the creation of the feature. This can be a complex task to understand the purpose of the code the first time you looked at it. I have applied TDD to my skill set to make sure that I don’t have to go back and write tests after I have forgotten what the feature should accomplish.
Learning React.js at Workfront I have been able to build, find, and fix issues in a codebase that I did not understand. Learning how to understand code has helped me gain the responsibility to fix issue fixes that are complex in the system. Working in the front end and back end code has helped me understand my capabilities to learn and to accomplish work.
I have fixed over 100 issues in the codebase. The way that I accomplished this task was to identify the issue that I was given. Find where the code lives, understand how the application should work so that we don’t break it. Then create a fix for the defect and then apply it. Creating unit tests for all of my fixes so that it would not come back during regression. While I was in the area of code I would also look to see what I could improve. Whether that be making the code easier to test by adding data-testid’s to the code so that we can access the DOM better or by exporting functions so that we could mock them better in the Unit test. I also look for any flaky tests and improve the unit tests. I would do this by making the tests easier to read, remove SnapShot expects or applying better coding practices.
This leaves me where I am currently. I have started to write Cypress tests at an integration level to enhance the quality of the application. We are testing in a customer behavior thoughtfully way. Wanting to make sure that we test what is important to the customer over testing everything. Customer behavior testing has taught me what is important to the customer over what is important to myself or the application.
Working at Workfront has taught me how to create features for a complex application that includes backend, frontend, and database changes. Learning how to write Test-driven and Behavior-driven development to ensure the quality of the application that I touch will be maintainable and reliable.