Welcome to my second co-op blog post. I am Niloy K. Ghosh, an International Student in Computer Science, going into my third year at the University of Guelph. In this post, I will share my journey about my remarkable work term experience at one of the largest banks in Canada.
Who is Royal Bank of Canada?
Royal Bank of Canada is Canada’s largest bank and one of the largest banks in the world, based on market capitalization. They are North America's leading diversified financial services companies and provide personal and commercial banking, wealth management, insurance, investor services and capital markets products and services on a global basis. For this work term, I had an incredible opportunity to work with OMNI and Home Journey to build their next-generation digital engagement channel with modern cloud-based tools.
With the ongoing pandemic, I worked remotely as a Developer Co-op on Squad Blue Steel and Squad STP Highway. Yes, I worked with two squads in this work term, which I thoroughly enjoyed - building awesome relationships, delivering disruptive features, maintaining code, and having loads of fun.
At Blue Steel, I was responsible for developing features for a web application that makes it easier for clients to apply for mortgages. The application was based on the Spring ecosystem, MongoDB and Angular. As a part of the client-data capture process, I built Angular forms using the Reactive Forms API, RxJs, and SCSS, while I worked with Spring, Java, and MongoDB to save the captured data in the backend. However, at STP Highway, my day-to-day tasks involved automating the STP (Straight-Through-Processing) system with Spring, GraphQL, and SQL. Besides this, I participated in all agile events: learning, writing, testing, reviewing, iterating, and deploying changes to production.
Goals & Reflections
I have successfully achieved several goals this work term.
Implement microservices using Spring/GraphQL, MongoDB/MS SQL, OpenAPI, and Lombok #
In both the squads, I heavily used Java to build Spring and GraphQL backend microservices. We used battle-tested code generation tools like Lombok and Mapstruct, to generate boilerplate Java code (setters, getters, constructors, and mappers) at compile time. To define and standardize our REST API interfaces, we used Open API, to establish a contract between services. All of these technologies made sure that our core focus was implementing the business values rather than setting up our ecosystem.
When I initially started at OMNI, I quickly identified my knowledge gap for Spring, Java, GraphQL, and code-generation libraries. My very first ticket/task was implementing an Open API interface which I successfully completed by pair-programming with my teammate. I always loved hands-on experience and my first success gave me the confidence to learn more about the backend tech stack at OMNI. However, getting up to speed with the Spring ecosystem was a challenge for me as this was my first time building production-level backend features. I started learning Java and Spring by watching Udemy and PluralSight videos online and trying out RBC’s learning resource called Degreed. Along with the help of my teammates, I was able to adapt to the tech stack very quickly and start contributing to the backlog.
When I transitioned to STP Highway Squad I was introduced to GraphQL and MS SQL as one of the core technologies used in the squad. Immediately, I started pair programming with my mentor to understand the Java implementation of the GraphQL schema. I was also exposed to using the Mapstruct library to autogenerate the mappings of our graphql schema models to our domain models. During this time, I was able to research and improve our code quality independently by introducing Dependency Injection in Mapstruct to the team. My first breakthrough with GraphQL came across while developing some core mutations and queries for STP Highway. Over the last two months of the term, I was able to deliver GraphQL features rapidly and help other developers maintain the GraphQL microservice with ease.
Use TDD, achieving the code coverage outlined in the Inter Squad Development Norms, writing quality unit and integration tests using JUnit5 and Mockito in all assigned stories #
At OMNI, all the developers were responsible for writing unit tests and integration tests for every feature and component that was built. For most feature/component development, I practiced test-driven development for comprehensive test coverage and easy maintenance. This practice gave me exposure to writing better unit tests with JUnit5 and Mockito and creating integration tests with failsafe. For my frontend stories, I was subjected to the Jest testing framework for unit testing all the components I had built.
Complete Front-End stories independently for my squad #
For this term, I wanted to go above and beyond. With my experience at my previous work term, I was very comfortable working with Angular and its ecosystem. Although my core focus was backend development for this term, I was still able to complete some front tasks for my squad. The tasks involved building forms using the Reactive Forms API and RxJS. During this time, I introduced the Control-Value-Accessor pattern to the squad which was a big success.
Learn about the different Backend technologies and deployment processes throughout the term #
This was more of a personal goal for this term. On PluralSight, I have completed courses on Creational and Behavioural Design Patterns. Although these design patterns are abstracted away from us in our day-to-day backend work by codegen tools, I have successfully accomplished diving deep into the implementation and use case of these patterns.
At OMNI, developers from different squads held knowledge-sharing sessions every two weeks. Since I wanted to expand my backend knowledge to the fullest extent, I actively participated in these sessions to learn more about spring, spring webflux, graphql, backend security and the OMNI infrastructure. I also had the opportunity to present topics on GraphQL integration and Dependency Injection in Mapstruct
Networking and Communicating with different people across RBC #
Networking has always been a major goal for me. Being a co-op, it was always important to connect with different people across the bank to know more about different roles that I can explore in the future. To achieve this goal, I actively participated in coffee chat sessions with like-minded individuals through the Ten thousand coffees platform. We talked about similar interests in tech, career advice and the different roles I can explore throughout my journey as a developer. To improve my communication, I actively spoke up during sprint retros, held knowledge-sharing sessions, and acted as a scrum master for my squad for two weeks.
Bootiful Spring #
Out of all the backend frameworks, Spring Boot and its ecosystem is probably my favourite. It’s rich in features and easy to understand but powerful enough to build production-grade backend services
GraphQL is fun #
I had a fun developer experience with GraphQL. It allows the client-side to request specific data fields in a single API call, unlike REST, making it a perfect fit for microservices.
Git rebase over Git merge #
Although I did not mention much about git in the above sections
(as it is my go-to tool for version control which I use every
day) I learned about the surprising command:
git rebase main. This command moves the entire
feature branch on top of the (newly pulled) master branch,
rewriting history for the project by creating brand new commits
over the original feature branch. This provides a much cleaner
project history over git-merge, by not creating unnecessary
merge commits made by other branches.Î
Lastly, I would like to acknowledge the immense support and role my team members played in making my work term such a huge success.
I would like to thank my manager, Evan Hamilton, for providing me with the opportunity to be a part of two wonderful teams.
To both my squad members and my mentor, thanks for being awesome. Kudos for creating a fun learning environment and for the exceptional support.
I would also like to thank our co-op counsellors, Laura Gatto and Kate McRoberts, for always encouraging us to put our best foot forward.
Last, but not least, I would like to thank our program counsellor, Greg Klotz, for reviewing this work term report.