Camis logo


Camis Inc.

Role: Software Developer

Date: Fall 2019 (Sept - Dec)

Introduction

This section of the website is a report of my time spent working at Camis Inc. as a Software Developer Co-op, during autumn of 2019. This report will go in depth about my time at Camis and how it taught me web development skills, valuable knowledge about database architecture and improved my essential soft skills like problem solving.




About the Company

Camis Guelph office
Camis's Guelph office. (Source: Mayor Cam Guthrie)

Founded in the days of MS-DOS, Camis is a Guelph-based company that provides software solutions for park management and campground reservations. The company’s clients include the government agency owned Parks Canada as well as Ontario Provincial Parks, Washington State Parks and more. Camis also operates call centers in Maryland, Michigan, Wisconsin and of course Guelph.

Camis’s proprietary software handles park permits (handed out at the park to provide confirmation of your arrival), park reservations and point of sale transactions for various goods (firewood, boating permits, etc). The program has had 3 major iterations so far:

  • Original command line version: An obsolete version that resembles a command line. From what I could tell, it didn't have an official name.
  • Everest: a legacy software built upon Microsoft Silverlight, a framework for writing and running internet applications. With Silverlight being discontinued in late 2021, the company has transitioned many of its clients away from this version of the software.
  • Camis 5: the current solution built from the ground up in-house and used by most of Camis’s clients today. I worked for Camis from September to December 2019 as a Software Developer co-op and was a member of the small but humble Everest team. As a result of maintaining aging software, I didn’t have the chance to design and program new features. However, I still took on a variety of roles such as updating configuration, debugging errors and tinkering with databases. Being on this team presented me with the opportunity to learn more about an area of Computer Science I’m not too familiar with as well as giving me the chance to contribute to a side project that further bolstered my learning.



  • Goals

    Table of food at Camis
    (Source: Dar'ya Heyko)

  • Become proficient with SQL, databases, and web service development.
  • Improve initiative.
  • Develop skills needed for a team development environment.
  • I developed my goals after about a week and a half at the job. As a result, they were closely tied with (what I believe) my tasks to be and would provide me with growth in both my technical skills (SQL and web services) and soft skills (initiative, collaboration). The latter two goals also mixed in some other skills I’m always looking to improve, like problem solving (e.g. taking the initiative to tackle problems on my own while still being able to ask for help when needed).

    The big thing I wanted to learn about was SQL. With databases being so prominent in almost all fields of computer science, knowing how to use the most common language for managing data in a relational database is almost mandatory. I absolutely wanted to learn the basics at least, and hoped to gain more intermediate knowledge afterwards. Though not listed as any one of my goals, I also wanted to improve my ability to communicate effectively because I felt that I was too quiet and reserved at my last co-op job until about the last month.

  • SQL, databases, web server dev: Compared to how much I knew about SQL and databases at the start of the semester (zero), I think I’ve made substantial progress with this goal. I learned about SQL syntax, how to make queries, and what relational databases are. I also learned about intermediate concepts such as the SQL order of operations and temp tables. I haven’t become as highly proficent as I thought I could be, but I’ve definitely made a lot of progress with this goal. Upcoming courses this winter semester will only benefit my learning in this area.
  • Initiative: I think I’ve made good progress with this goal. Due to the nature of my team’s work and the team’s small size in comparison to the amount of work we had to do, I was allowed to deal with client request tickets from the same pool as the other fully qualified developers on my team. Being able to fix issues that full-time devs also regularly deal with has allowed me to develop my problem solving and thinking skills while also improving my initiative to tackle issues on my own and ask others for help when I needed it (which trust me, I needed a lot). I think in the future, a greater emphasis should be put on my initiative in regards to communication. I’ll go more in-depth about that in the next numbered bullet point.
  • Team-based skills: The nature of my work meant that I didn’t actually get to do as much team-based work as I expected. However, I do believe that I could’ve done better with this goal. I still believe I was more outgoing than at my last position, but the detail in which I explained things verbally and my ability to speak up at team meetings left much to be desired. I also think that I should try to be more active when listening and watching someone teach me something as I’m often passive during these moments.


  • In conclusion, I think I did pretty well with making progress on most of my goals. Like my goals from the summer co-op term, they’re not meant to be 100% completed but rather used to build upon skills needed for me to excel as both a software developer and a person.




    Job Description

    Camis Guelph office outside shot
    Camis's Guelph office at 130 Research Lane. (Source: Loopnet)

    Camis operates within the typical two week agile development cycles, closely following scrum principles, which focuses on breaking down a big issues into individual, feasible goals that can be met within the cycle’s time frame. Every two weeks, new tickets would appear on the Everest squad’s development pile. These issues would range from bug fix requests to small configuration updates (e.g. updating text on reservation confirmation emails) to the very rare feature request (I wasn’t allowed to do these for obvious reasons).

    The bulk of my work typically involved the following:

  • Configuration updates: Much of the work I had to do was for the upcoming summer season, the busiest time of the year for most parks and campgrounds. As a result, most of the work available each cycle were simple fixes to things such as reservable dates, restrictive messages, and the like. These were the first type of issues I tackled as they were simple and good for helping me learn how Everest worked from the inside out. I still worked on these occasionally later on, but by the last month I had moved on to greener (and less tedious) pastures. It involved looking at a lot of front-end related files so I became acquainted with HTML5, CSS, XSLT and XML.
  • Bug fixing: Most of the bug fixes I did were related to visual inconsistencies with the software such as incorrect information displayed or information being missing. There would be the occasional chance for me to head into Everest’s business logic to locate the issue there, but that was usually out of the scope of what I was capable of and allowed to do. Much of this work involved C# (for the code itself) and T-SQL (for checking how some issues manifested on the database or just checking if data was stored correctly). Microsoft Visual Studio and SQL Server Management Studio were used, respectively.
  • ""Pair"" programming: I would occasionally be called over to observe my supervisor tackle a more complex problem (such as critical compliance changes or tracking a bug that had plagued the system for months). I wouldn’t be the one coding here but instead watching how my supervisor thought and tackled the problem. I didn’t really provide a lot of feedback (which I regret, as mentioned in the Goals at Camis section) but I did get to see how a seasoned developer used what he had to deal with a problem that was hard to wrap one’s head around initially.


  • Unfortunately, I wasn’t given the chance to do any new feature development. With what I had, I definitely preferred the bug fix work over the configuration stuff since it was more stimulating, less tedious, and let me think. The C focused knowledge I acquired from my classes wasn’t too handy at this job as expected, but knowledge from my last job at Adknown (C#, Visual Studio, debugging techniques) proved to be highly useful at Camis.




    The Side Project

    Build Monitor screenshot
    The foundational extension for the side project.

    The most interesting thing I did at Camis wasn’t even related to the work from the company’s clients; it was a side project entrusted to me by my supervisor Taylor. The project was deceptively simple (though not intentionally):

    1. Take the existing Build Monitor extension for Visual Studio and change it to gather specific metrics such as CPU and RAM in addition to the extension’s pre-existing feature of timing how long it takes a Visual Studio solution to build.
    2. Create a simple web service that will receive the metrics from the modified extension and store it in a table in a relational database.
    3. Allow the database to be queried for the metric data.
    Additional requirements, such as being able to use Splunk to query the database for specific correlations and additional data, were to be left for the next guy to take on the project. I was given in my second week and wrapped up my section in my final few days at Camis.

    I liked doing this project for several reasons. Firstly, it tied directly into my goal of knowing more about SQL and web services. This goal was actually created based on the required knowledge needed to complete this project. Doing the project allowed me to both gain knowledge of SQL, databases, web services, and more and put it to practical use. The project did end up being overwhelming at times, but the extensive help provided by Taylor allowed me to arrive at a satisfying result. Secondly, it was good change of pace from both my usual work at Camis and what I’ve been learning at school. I hadn’t tackled the concepts of web-based endpoints, GET/POST. relational databases, and more before. Doing this project allowed me to gain knowledge on many software engineering topics that are invaluable for a developer to have in this day and age.

    To conclude this section, I enjoyed most of the work I did at Camis, even if it was difficult or a tad boring at times. Many of the things I did taught me either valuable soft skills like problem solving or technical skills like what is and how to write a query.




    Conclusion

    Tent at Camis office
    No, you cannot sleep in this tent. (Source: Dar'ya Heyko)

    In conclusion, my time spent at Camis was a great learning experience. I was able to learn a lot more about many important topics in computing, such as databases, web services and more. I improved my problem solving and debugging skills and achieved substantial progress on my goals. Finally, I got to do it all with a reliable team who always had my back.

    I’m still not entirely sure what strand of computer science/software engineering I’m going to pursue as my lifelong career. However, what I did at Camis did make me consider web-based development as an option. I may explore related work in my future positions.




    Acknowledgements

    A special thanks to the following people for making my time at Camis great:

    • Taylor Poulin, my supervisor, for being a helpful and reliable mentor figure. Taylor was always ready to lend his aid (if he wasn’t caught up in a meeting or unlucky occurrence) and was instrumental in teaching me SQL, database design, how web services work, and much more. The fact that he took time out of his busy schedule to sit down with me and help me learn to be a better developer is something I’ll always appreciate and be grateful for. Stefan Barrette, for helping me with specific details in configuration changes on countless occasions and being an upbeat presence. His patience and reliability was indispensable for everyone on the Everest squad.
    • Julian Verity, for being a kind helping hand to everyone and going above and beyond his developer duties, even organizing sessions for the devs to sit down and learn new things via Pluralsight.
    • Dhaval Pathak, for guiding me through Everest and more during my first week at Camis as Taylor was out on vacation. Without him, I would’ve fumbled around in Everest’s business logic for much longer than I did.
    • Josh Nasso, for his solid testing of my fixes and always being friendly and accommodating with me.
    • Colby Warkentin, whose keen eye and deep experience working with Everest allowed him to catch my mistakes in code review and recommend the best course of action to resolve them.
    • Hassan Hassan, for providing a comprehensive orientation that got me and the other co-op students up to speed.
    • Victoria MacKenzie, for being extremely helpful and reliable for any of my HR related issues and also being excellent during orientation.
    • Everyone else at Camis, take care and thanks for helping make my time at Camis great, even if indirectly and if most of us never met face to face!