Fall 2020 Work Term Report - Camis Inc

Always leave the campground better than you found it

Photo by Matt Whitacre on Unsplash

Introduction

Welcome to my first co-op blog post. I am Niloy Kumar Ghosh, an International Student in Computer Science, going into my third year at the University of Guelph. In this blog post, I will be documenting my experience at Camis Inc., where I worked for my first co-op work term.

Who is Camis?

Camis Inc. is a refreshing, innovative, and fast-growing organization, who makes state-of-the-art reservation and park management software for the camping industry with implementations across North America.

Job Description

I worked remotely as a Software Developer at Camis given the current pandemic. I was provided with all the necessary tools and setup needed to develop, and contribute to the Camis Software from home.

The Camis Software consists of two separate applications. The first is a fully-fledged web application where customers can make their own reservations at parks. The second is a desktop application designed for call centers to make park reservations for customers.

The web application was primarily built on top of Angular with Typescript, RxJs, and an ASP.NET core backend, while the desktop application was developed with C# for the application logic, WPF for the user interfaces, and SQL for the database.

JavaScript was always my second language of choice after C as I had some experience with it from school (CIS*2750) and my side projects. I always wanted to extend my knowledge by working with a JavaScript frontend framework such as Angular or React and I was in luck! At Camis, I was part of the Booking Squad where my day to day task mostly involved working with Angular, Typescript, and C# to rapidly implement new features, maintain both the web and desktop applications, and improve the user experience for our customers. We used the agile (scrum) development approach to organize and tackle our day to day work and meet our priorities and deadlines.

Goals & Reflections

While at Camis, I identified 4 goals for this work term.

Improve Time Management Skills #

When I started at Camis, I had very little knowledge of how the Scrum framework and Jira worked. I started watching videos on Scrum and Jira to get myself familiar with the terms and methods used to manage daily tasks. Very soon, I was able to estimate a ticket properly with my team, using story points, and divide epics into smaller manageable tasks.

I also kept track of the number of story points I completed per sprint to measure my “velocity” and time management. I have completed and closed an epic worth 40 story points, within the first 3 weeks. Over the course of the term, I was praised for the productivity of my work and for being a fast learner.

Improve Team Work and Team Building #

A team player is essential in the software development industry. Personally, I tend to develop this skill by attending daily scrum meetings in the morning with my team, where I discuss the work that I am doing in the current sprint. I was also involved in “planning poker” sessions where we assigned story point estimates to future tickets. Other meetings involved planning implementation strategies for new features and attending tech forums where we learned something new every week about the technology stack we use. Attending these meetings gave me the confidence to speak up and present my work in a team environment. Fridays were the most fun as we played JackBox games with team members of different squads.

On the technical side, to get more familiar with the codebase of Camis, I started to pair-program with my mentor (buddy) every day for an hour, where he explained the business objects of the code and showed me new tricks of the tools I was using. These tricks and shortcuts helped me to develop quick and efficient solutions. The active learning environment at Camis was my favorite part of working there; my squad always helped me whenever I needed them and challenged me with exciting new work every sprint.

Learning Angular and improve my frontend skills #

Typescript

Angular

RxJs

I was fortunate to gain some hands-on experience with Angular in this work term. Angular has a vast ecosystem with a very complex architecture with which we can rapidly develop single-page applications; it integrates very well with Typescript and RxJs. I first started learning Angular when my mentor assigned me a ticket worth 13 story points (part of the 40 story point epic) that involved making a component from scratch.

I started taking courses and watching tutorials online on Angular. I put everything I learned into practice by doing the component work, I was assigned and picked up some nifty Typescript tricks along the way. The use of RxJs changed the way I looked at asynchronous code as I come from a promise-based JavaScript background. Throughout the term, I integrated this new component in several parts of the web application. Consequently, my work also involved maintaining the other parts of the web application where I used Angular and Typescript heavily to merge and ship production code.

Diving into the backend and
getting exposure to C#, ASP.NET, and Test-Driven Development #

Unit Testing

Jest

C#

At Camis, any pull request goes through three stages of testing: Unit, Integration, and End to End testing. In this framework, my primary role was to work on unit tests for every feature/component I made. When implementing these components on Angular, I applied test-driven development, where I created failing test cases and then built the component code based on these cases. During this, I was subjected to the Jest testing framework which is used to write tests for JavaScript/TypeScript applications.

My other tasks involved creating a mini-feature for the desktop application using C# and WPF. I primarily approached this by watching C# videos online to get used to the syntax and pair-programming with my Team Lead. The mini-feature was designed to allow the call center agents to delete multiple bookings in one click. However, due to time constraints, I was not able to experience ASP.NET to the full extent but I plan to explore the boundaries of ASP.NET and C# more in the future.

Key Takeaways

Amazing Angular #

Admittedly, it was not easy to learn angular at first, but since my entire work was centered around angular, I quickly learned the awe-inspiring power of angular that it gives to developers like me. It allowed me to reuse components without repeating code (unlike HTML and CSS) and rapidly create component based single-page applications.

Awesome TypeScript #

TypeScript turned out to be a revelation for me! It’s implications in large-scale applications and the strict type checking meant that I could write JavaScript code with a lot more confidence than I previously could.

Testing is central #

Needless to say, testing is paramount to any development cycle. It ensures I can write and maintain bulletproof code and also avoid potential bugs once the code is changed.

Learning to use your tools and shortcuts is essential #

Using tools like debuggers, VS code shortcuts, and chrome developer tools gave me an important realization - although they may be simple, they are fundamental to improving my productivity and decreasing my development time.

In conclusion, these takeaways will definitely help me to move forward in my career. After this experience, I see myself as not only a better developer but an efficient worker and a creative thinker.

Technical Skills Addition: TypeScript, Angular, RxJs, Jest, C#, Unit Testing

Soft Skills Addition: Better at time management, Better at communication, Agile(Scrum) Team work, Team Building

New Tools: JIRA, Git Kraken, Better at Chrome Developer Tools, Better at VS Code Shortcuts

Acknowledgments

I would like to thank my manager, Craig Skelton, for guiding me through an incredible work term.

To Booking squad, you will always remain in my heart. Thanks for creating an amazing learning environment and an exceptional co-op experience.

To my Team Lead, Mo Liao, I am grateful for your help with C#, WPF, and Git issues.

To my mentor (buddy), Jacob Barrick, thank you for challenging me with Typescript and Angular work and helping me whenever I needed it.

To my co-workers, Corey Dutson, Jackson Zavarella, Alicia Thomson, and Kelly Dip, thanks for making Angular and accessibility work easy for me.

I would also like to thank our co-op coordinators, 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 counselors, Greg Klotz and April Nejedly for reviewing this work term report.