About Hospitality Services
At the University of Guelph, Hospitality Services organizes a multitude of things on campus for students and staff alike, also creating many job opportunities on campus. This division has influenced and managed many services including: food services with off-campus partners and on-campus meal plans; the University Campus Bookstore for textbooks, office supplies, and university-affiliated clothing in MacNaughton; Gryph’s Locker for athletic apparel and accessories in the Guelph Gryphons Athletics Centre; and even student-run organizations with parallel goals, such as the Student Nutrition Awareness Program (SNAP) and Student Ombudsperson. Of course, Hospitality Services is best known for their amazing food services and being ranked the #1 food service in Canada by Maclean’s Magazine for the past 10 years in a row. Like many other large organizations, Hospitality Services as a division within the university has multiple departments relating to different areas of the experience. My position for the S20 co-op term was with the information technology department of Hospitality Services, where I dealt with all the behind-the-scenes systems and applications that others use daily.






Job Description
As you probably know, COVID-19 caused a lot of chaos starting March and continued to affect everyone into
the summer, which also unfortunately led to the cancellation of my original co-op placement in Toronto at Wave
Financial Inc. However, I managed to land this position after beginning my co-op search for the second time during the
semester. For the last 2 months of the summer, I worked for the University of Guelph, Hospitality Services - Information
Technology department as an application developer / web design and was stationed in an office room in the basement of
Express Centre, Creelman Hall (see images above to get an idea of where I worked during my co-op). Since I was excited
to receive such an opportunity very late in the summer, I accepted the loose job description of “application development
and general computing support” and started working the same day as the interview.
Working here, I received the opportunity to further improve my knowledge about financial technologies
while dealing with some of the payment systems behind meal plans and convocation ticker orders / gown rentals. During
this co-op, I interacted with databases more often and more directly in comparison to my last time, which is something
I was looking forward to. Certainly, everything I did here was almost entirely new to me and I was constantly learning
new things - see the “Tools and Technologies” section below for what I learned technically. I enjoyed this challenge
and it helped me create small goals throughout my term. For instance, besides transferable skills, I only had minimal
experience with C#, yet it was the primary language I worked with throughout the co-op term. The kind of work I did was
very general and pretty much anything random that was tech-related could be assigned to me: web apps, dev ops, databases,
back-end, and front-end. I pretty much did a bit of everything and would almost classify this position as full-stack due
to the variation of tasks given to me.
In addition, I gained firsthand experience of how daily life is as an individual programmer without a
team (nor anyone to ask for help) besides a boss/supervisor to report to occasionally. Once again, I think it was good
to see the other extreme of the spectrum where there are next to no meetings if any at all, let alone any normal
communication or assistance, especially when compared to the seemingly never-ending queue of meetings at NCR.
Despite some small struggles, it was an interesting experience where I learned many new things and I am thankful for
being able to work a co-op term this summer here.
Tools and Technologies
Since there were only assigned tasks and projects void of literally any training or onboarding or anything
like that, I never had a proper developer environment setup. Something that is important to note: due to COVID-19 many
services were cancelled or shut down, which includes the following Moneris-related tasks I worked on. This meant that
I had the luxury of testing using the live system instead of locally. Of course I would test some small pieces locally,
but never ran a copy of the entire system from my computer to test it as a whole.
For the projects I completed besides the PDF task, I was required to use virtual machines (VMs) and
connect using GoToAssist to access and edit the hosted app code or database. In the VM, there were many different
editors/IDEs available, such as VS Code, Notepad++, MS Visual Studio, and Visual Studio Express for Web. I was told
to work directly on the VM, but I also did a lot of work locally before porting it to the VM for testing. Overall, I
used VS Code and Notepad++ the most since they were the most convenient and fastest for the changes I was making,
especially since I was already familiar with them. I also used other applications I was adept with like MS Office (eg.
Word and Excel); however, I used Adobe Acrobat Pro DC and got to try out the pro features, particularly during my PDF task.
We used Oracle and SQL databases, which were managed using MS SQL Server 2014 Management Studio within the VM when
not accessed and used by program code. On the other hand, most code I dealt with was primarily in C#, CSHTML, Razor,
MVC 3, including ASP.NET core and framework, as well as JavaScript for Adobe PDF scripting and a little bit of PHP.
I was happy to obtain experience learning with so many different languages that were entirely new to me at this co-op,
but I also learned about my preference for a proper work flow and development environment.
Work Highlights
- Greatly exceeded expectations by remaking a form from scratch using MS Word and then using Adobe Acrobat Pro DC to make it fillable and automate/script everything as much as possible. I created this new form by referencing the old PDF paper form they provided and redoing it entirely. I even included thorough documentation detailing how to use and modify both the original word document and PDF, including the scripting and all automated and fillable elements as well as how someone would be able to make a form like this from scratch.
- Integrated Moneris as a third-party credit card payment system after reading A LOT of their documentation and determining the best option for our system. This was done because Hospitality Services is moving away from using the MiraPay system. In this case, I carried that process out for Hospitality Services’ Online Services system where people go to manage their meal plan accounts and funds. This was the main highlight of my co-op term, and I was allowed to do it again for the Gowns system afterwards because I did it so fast with high quality (I finished it in less than 2 weeks instead of the expected 1-2 months!). Refactoring the Gowns system for Moneris was much more challenging because it was so much more complex and resulted in it being completed in just under 2 weeks as well. I was especially proud of myself for revamping the receipts for each case of the transaction, refactoring the complex Gowns code to be more manageable, and greatly improving internal and external documentation for these related projects. Moreover, I even made a brief summary document about the Moneris tasks and integration process, including change history, integration process, example flow and diagrams, and any other necessary information and links if someone were to work on this again or need to troubleshoot/debug an issue.
- After taking a quick peek at our Hospitality Asset Management System (HAMS) and its database after hearing my supervisor discussing with others that there was an issue/bug, I solved it immediately and surprised them since they did not know what was wrong besides the fact that they were unable to add more assets. Afterwards, at the request of my boss, I also added an administrative account for the HAMS system permitting it to be the only account with the ability to delete assets and users.
- The last task during my term was a simple and straightforward structured task where I was instructed to add a printer to VisualRATEX for the Campus Bookstore using Linux.
-
For quality assurance purposes, I was supposed to user acceptance test the new GET app and was looking forward to
the interesting assignment, as well as being the first student to use the new mobile/web app for ordering food
from on-campus establishments (pick-up only). However, the out-sourced team developing the vast majority of the
app was delayed and behind schedule due to circumstances and I never got the opportunity to before leaving.
NOTE: After talking with my boss, I will be reviewing it anyways outside of this co-op term and helping them out.
Note: There are more details about Moneris and the PDF tasks in the Goals section below.
Goals
-
CRITICAL & CREATIVE THINKING - Problem Solving:
Third-Party Credit Card Vendor Switch Within One Month
Goal
My first task upon being hired (besides the PDF form side-task) was to implement a new third-party credit card vendor, Moneris. The organization was switching to Moneris from MiraPay as the hosted pay-page to pay using credit cards for Online Hospitality Services operations, such as meal plan top-ups. I was told this should take approximately 2 months, and that doing it in 1 month would be very impressive. Of course, my goal is to impressively complete this in one month or less.
Action Plan
In order to complete this within a month, I will need to conduct thorough and careful analysis of the existing code base, the existing MiraPay system implementation, as well as large amounts of necessary Moneris documentation, in order ensure I choose the right approach to changing the third-party credit card vendor when considering budget, time, and feasible of the project. However, I will first have to learn the new languages presented to me in the system (eg. MVC3/razor, C#, .NET, HTML/CSS). Using problem-solving skills and creative thinking, I will make a decision after researching everything and discuss it with my supervisor before proceeding with development.
Measure of Success
Of course, this will be achieved if it is completed within 1 month; however, I would also want to make sure I am not rushing things and the quality and documentation of the process and final product is above standard. With regards to this qualitative aspect, my supervisor will be able to inform me of the success level.
Reflection
As the first task I was introduced to during my term here, I really wanted to impress them and complete it in the smaller given time frame. Since I managed to finish everything including tests and put it live in less than two weeks, I definitely achieved this goal. In addition, I completed it while following my other goals and ensured it remained a high-quality work. Just take a look at my next goal to see that I also improved the internal and external documentation, as well as refactoring the code. My supervisor was surprised (in a good way) that I finished so fast without slacking on quality and testing. He was especially happy with the improved receipts and when I took the initiative thinking up ideas of how we can make things even better. He rewarded me by assigning a similar task where I had to do the same thing for a different system. Since this second system I was implementing Moneris for was a lot more complex, it took me nearly another two weeks even though I had experience with it and finished researching. You can take a look at this brief summary document I created to maybe get a little bit of a better idea about what I did for this project.
Working on this task reminded me once again just how important it is to properly plan and prepare for each project before development. However, in retrospect I feel I still should have been able to complete both Moneris tasks a little faster by not prioritizing the planning phase as heavily in the initial stages. Instead of reading the entire Moneris website and applicable documentation, it would have been better to break it into a few steps:
(1) Research different solutions to choose the best one for our system;
(2) Analyze our system and confirm the decided solution approach with supervisor;
(3) Implement Moneris into our system;
(4) Test that the new Moneris solution works properly.
By breaking it down, I would have been able to streamline my process more and efficiently develop the product. -
CRITICAL & CREATIVE THINKING - Creativity:
PDF Form Creation
Goal
Learn and incorporate appropriate interactive PDF elements and scripting in order to create a fillable PDF form that is automated and make it as good and user-friendly as possible.
Action Plan
As I work on a task to create a fillable PDF form, I will go above and beyond to improve the form at base level (eg. layout and appearance) from the old version they provided. Then, I will conduct research about PDF interactive elements and scripting (eg. Adobe Acrobat software). After preparing the new PDF form to be fillable and learning new PDF scripting skills, I will proceed to add appropriate elements and scripts in order to automate the logic for filling out the form. For example, using required fields and elements to ensure the user knows what fields they need to fill out. By doing this, the form will become as user-friendly as possible and they will be unable to submit an incomplete or incorrectly completed form.
Measure of Success
Once the electronic PDF form incorporates all the same logic and reasoning used when someone completes the form by hand, this will be accomplished. The user also should receive appropriate alerts when forgetting to fill out fields so they know what is incorrect and what still needs to be filled out. Additionally, a good measure of success would be when the supervisor who originally handles these forms approves of the form I have created.
Reflection
Having a detailed plan to tackle the task made completing it more straightforward and much easier since I always knew what to do next. As PDF scripting was entirely new to me (although I am familiar with JavaScript), I had to spend a fair amount of time researching what was possible as well as how to realize my ideas. I was extremely satisfied with how well it turned out because I managed to put everything I personally wanted to include on top of the requirements set by my supervisor. The new form perfectly automated and worked as intended, receiving great praise from my supervisor and the department I made it for, especially for the external document I created which explained its functionality, how to use and modify it, and even instructions detailing how to make one from scratch.
I also realized it is important to test the form on multiple OS and PDF viewing apps in order to verify its function in different environments and I will continue to keep this in mind for the future. From this experimentation, we had to include a short notice on what types of PDF readers were compatible and how to get and use it on each OS. However, it was unfortunate the department posted it on their site after disabling the "Submit" button, thus rendering nearly all the automation and functionality I added useless. Nonetheless, I greatly improved even the core of the form because I rewrote it from scratch so I could give it a better appearance in comparison to the reference initially provided. Working on this task reminded me once again just how important it is to properly plan and prepare for each project before development. -
LITERACY - Technological Literacy:
Improve Code Documentation
Goal
While working here so far, I have noticed that there is very little documentation within the code. Therefore, I would like to make it my goal to enhance the code documentation of files I work on in order to improve it for future developers. In order to document code properly, I will also increase my understanding of the system.
Action Plan
Generally, I will carry this out for all of my work; however, I will take specific note of a task involving Moneris switch from MiraPay for the Gowns ordering system and use this to measure my success besides an overall perspective.
After I learn the new coding languages presented by the system (eg. ASP.NET, C#), I will carefully examine the current codebase and system before coming to a decision and confirming my approach with my supervisor. Then, throughout development I will add proper comments in the code that explain the logic of a code block if it is not straightforward and easily apparent to a developer. While documenting, I will also bear in mind that future co-ops will potentially work on this. Other than typical comments for code blocks and similar usual comments, I will also add file comments and function comments using coding standards for documentation learned from software design courses. Besides just documentation, I will modify the code itself to be "self-documenting" where possible. For example, just by changing logical flow, function names, and variable names, the code can become easier to read and understand. Therefore, I will also aim to refactor the code as I improve documentation.
Measure of Success
This goal will be successful when each task I complete also improves the documentation within the code. In simpler terms, I will leave each file better than when I first started on it. I will create a checklist related to coding standards of documentation to ensure I meet all guidelines. For example, this way I will ensure that each function and file has a header comment. Additionally, I can ask my supervisor for code reviews to ensure that the documentation is good and the code itself also "self-documents" and helps viewer understanding.
Reflection
The personal checklist I created to aid with refactoring and adding documentation helped ensure I did not miss anything. It also determined when a file met standards, which allowed me to efficiently refactor and improve documentation for many areas because I was not spending extra time on any single file. I was very happy with how much the codebase documentation improved, both internally and externally. My supervisor was also very pleased about this and praised the extra work and effort to improve everything I worked on, especially regarding documentation which was previously quite lacking. Although we never conducted formal code reviews, my supervisor would look over my work and validate that everything was acceptable and high quality.
Looking at code entirely new to me that lacked any form of documentation or even well-written, self-documenting code during my work term here has reminded me that clear, concise, and thorough documentation is necessary for a good project. Although one might be able to get away without it, including makes it much easier for anyone new or even yourself if you need to look back at it in the future. I had literally nobody to ask for help during my term as I was the only developer; however, my supervisor had previously written code for many of the things I worked on. Unfortunately, he usually was unable to fully help since he had worked on it so long ago and did not remember much, which would leave me solve almost all issues on my own. I will definitely continue to uphold strong documentation standards in all my work because it is a good habit to possess.
Conclusions
During my short ~2 months working in this position, I learned about many different things and was
constantly challenged, fostering growth in many areas, both technically and professionally. Although working
individually may seem quite enticing for some people, I do not think I would enjoy a position with such minimal
teamwork and interaction long-term. Perhaps if COVID-19 did not affect this job, I would be on a team with proper
procedures, but I am glad I learned this early in my career. Nonetheless, after this co-op, I find myself preferring
structured team workflow and proper development environments over what occurred these past 2 months even if that
means I would have less freedom.
That being said, working by myself without any assistance was a great opportunity where I was able
to increase my confidence with independent development in the workplace. Since most other people were remote working
from home (WFH), I also became proficient writing clear and concise professional emails yet managed to include enough
detail when appropriate. Although I asked for more work and believed I could have been challenged with more tasks and
tougher assignments compared to what I received, I am still thankful for the valuable experience I accumulated working
here the past 2 months. It is my hope that the contributions I made during my time here will have a lasting impact for others.
Acknowledgements
I would like to give a special thank you to the following people from Hospitality Services whom I worked with for making an impact on my experience this summer and contributing to my personal and professional growth:
- Altaf Virani, Assistant Director - Information Technology
- Munny Malik, Assistant Manager - Information Technology
Although I rarely interacted with Munny, I want to thank her for talking with me a little bit every time
she came in to work - actually talking to another person once in a while was nice after being alone in the office
every day. Even if it was brief, it was also a pleasure to work together when designing and creating a PDF form.
Last but not least, Altaf, my supervisor and only mentor during my co-op placement. I always enjoyed chatting with
you during the small respites between your busy schedule for us to update each other about work. Even when it was
not about the current projects, we usually got a good laugh or two every day.
I understand the difficulties we faced over the summer kept you quite busy, especially as you had
to make sure on-campus Hospitality Services was prepared for the return of classes and students coming back to
campus. Despite everything, you still tried your best to make me feel welcome and be available if I had any questions
about my work. I am very thankful for working with everyone and you can rest assured that I will remember and
transfer the many things I learned during my co-op term here into my other endeavors.