Introduction
My name is Jacob Young. I am a fourth year Computer Science Student (during this placement) with a minor in Mathematics from the University of Guelph. This page will document my 8 month work term (January - August, 2019) at NCR in Waterloo, Ontario, Canada. It is my goal to explain the numerous ways that this work term has made me grow as both a Computer Science student and as a future employee in the workforce after graduation.
Employer Information
NCR is an American company founded in 1884 as National Cash Register. They focus in the area of financial transactions with Point of Sale (POS) systems, cheque imaging, and bank deposit software. They offer many different financial solutions for different industries; such as banking, restaurants, retail, and travel to name a few of them. Their offices are located all over the world; including (but not limited to) the United States, Canada (in Mississauga, Quebec, and Waterloo), France, South Africa, Japan, Australia, and Brazil. One of the slogans of the company is "Turning Everyday Transactions into Meaningful Interactions" and "We turn everyday transactions into meaningful relationships."
Job Description
During my 8 months at NCR, I was an engineering intern performing DevOps for the TxInfinity application. My overall role and purpose was to help to improve the application's release time, and implement/improve best practices while developing the application. I had to add, update, and sometimes remove aspects of the code that was involved. I worked with many different frameworks this workterm. The majority of them were completely new to me, as highlighted in my list of new frameworks, and required a lot of research to ensure proper implementation and to follow the best practices.
Some other tasks I did while at NCR to help improve TxInfinity include:
-investigate new ways to deploy the TxInfinity system using different frameworks
-create pipeline jobs in Jenkins to ease the process of building, deploying to the registry, and releasing to the customer
-implement many features to Jenkins pipelines (including locking build jobs to ensure no resource collision, implement Microsoft Teams integration to alert upon failure, git tag deletion upon build errors to avoid further build failures, etc.) to ensure a smoother and quicker release
-add different security scanning frameworks to the building process to scan and detect vulnerabilities before shipping code to possible customers of NCR
-upgrade some plugins and project dependencies to more recent versions to keep up to date with the latest advances, security patches, and industry standards
-refactor end-to-end test code to decrease execution time, add new behind the scenes code to decrease the number of test steps, and became a default pull request reviewer for the code
-general quality of life improvements to have a smoother deployment experiences; these include removing deprecated flags, ensuring all required software is installed before deployment, updating documentation, etc.
-interview future co-ops at Wilfrid Laurier University to see the other side of the interview table
Improving the existing application taught me a lot about how to handle production for large scale corporate applications. It taught me how to try and think of everything, including the little things, to enhance the code in fewer commits and a faster turn around time. I also learned how challenging it can be to upgrade to newer software from "legacy" application numbers when a few bugs appear, or people attempt to use the old style before changing their habits.
Goals
While at NCR, my goals were: continue to improve upon my oral communcation skills, increase my Docker knowledge and effectively learn Kubernetes, advance my teamwork skills in a professional setting, improve my ability to notice redundant code and reduce the repetition, and boost my written communcation skills when messaging team members. The tasks I was assigned, and any that I found on my own, while working at NCR were very helpful in meeting all of my goals this work placement.
Reflecting on all of my goals, I was extremely successful in the majority of them. For learning Docker and Kubernetes, I was able to effectively learn how Dockerfiles work to create the images used at NCR and how Kubernetes is able to deploy them to the various machines at the company. This is great knowledge as Docker and Kubernetes are used a lot in the computing industry. While working at the company, I advanced my teamwork skills by collaborating and helping others with any questions or concerns they had with the work I had done. I changed and updated at least 3 applications used at NCR. The cucumber testing framework used to ensure the code behaves as expected, the docker plugin when building/pushing image builds to a different registry, and some minor dependencies in the tests. These, along with my Jenkins updates, brought a lot of changes to the standard practices used at NCR. As such, members of every team asked me questions and I helped them figure out how to solve their inquiries. This will be extremely useful when I am a fulltime employee in the workplace as any change does affect the entire team.
Futhermore, I improved upon my ability to reduce redundancy in code. Since starting the degree, I was always told to try as much as possible to decrease copy-pasting or writing the same snippets. While working at NCR I went through several instances of reducing redundancy. For example, I would create environment variables in Jenkinsfiles to avoid copying and pasting long URLs, create and edit a base class for different users in the testing framework, and general small reductions in code for any task I was doing. This was extremely good practice to help me avoid falling into copy pasting large sections of code. I can apply this to any software project I work on in the future. Finally, I improved upon my written communication skills when team members would send me messages asking for advice, and for clarifications on my work. I would also practice my written skills when commenting on the pull requests I created, and the ones I was reviewing. This would help me communicate my ideas to members of the team on what I was trying to achieve, or what they can improve upon. This is an extrememly useful skill as comments in code, messages between team members, and written ideas are used everywhere in the computing industry.
The one goal that still needs some improvement is oral communication. When I would talk and collaborate with my supervisor, sometimes there would be some miscommunication until I used visuals to explain my thoughts. I would talk a bit too fast and not fully put into words what I was thinking. I have, however, improved upon this skill from previous workterms. When I slow down I am able to fully explain what I am thinking to anyone I have talked to at the company. Overall, I am happy that I have improved but I still need a little bit more advancement before I am completely satisfied with my progress.
Conclusions
NCR was an excellent company to work for in my final two co-op workterms of my undergraduate degree. Working at NCR helped improve my skillset by providing me experience in yet another field I can apply my degree towards (financial transactions), and demonstrating to future employers that I can take on any task with new technologies and implement them extremely effectively. The constant questions, collaboration, and communication with me by members of TxInfinity during my last 4 months was a superb demonstration of my influence at the company. The experience really demonstrated to me that I am a valuable member of the team as I was contacted a lot asking for help.
Improved Technologies (Languages, Frameworks, etc.)
- Docker
- Git
- Linux
- JUnit
- Java
- Shell Scripts
New Technologies (Languages, Frameworks, etc.)
- Kubernetes
- Kibana
- Helm
- YAML
- Cucumber
- Jenkins
- DevOps
- Aqua Security
- Microsoft Teams
- Coverity Scanning
- XML
- dockerfile-maven-plugin
- Terraform
- Microsoft Azure
- Google Cloud
I also feel I have improved upon my ability to be a better team member within my team and the other teams. I was able to talk about my ideas and get an understanding of what I was going to be doing while talking to the supervisor and others about how they imagined the work would get done. Futhermore, I was also contacted by several members of the team asking questions about items I implemented in my 8 months.
Acknowledgments
I would like to thank everyone that I worked with on the many teams at NCR working on TxInfinity. The people I worked closely with on Alpha Team, and the members of the other teams (pi, falcon, draft, delta, omega, and zeta), were all excellent coworkers. Everyone was great to work with and they really helped me to improve my skills on communicating between multiple teams in a single organization.
I would like to thank computing co-op advisors Laura Gatto and Kate McRoberts for their continued support with the computing program, with helping students work through the co-op application process, going to visit many students for the site visits, and helping with any other issues that the co-op students may have had this work term. I appreciate their commitments to the computing co-operative education program's ongoing success.
I would like to thank academic advisor Greg Klotz for taking the time to read this work report. I appreciate the amount of time it takes to read every co-op student's report.