Philip Kennedy

Computer Science Student - Software Developer

Tekside.io W22 - S22

Tekside was born from one of Canada’s leading email marketing agencies. They branched off to form their own company which consisted of the Technological side of the business. The team includes accomplished software engineers, architects, and data scientists, led by an award-winning team of marketing leaders. They're committed to helping their community. One method is utlizing the Co-op program offerred at the Univeristy of Guelph. They have continuously hired and nurtured students to become better tech leaders!

Improvement Goals

I worked at Tekside for 2 Co-op terms. My goals for these 2 terms were to finish my co-op experience as a well rounded and solid software developer. This includes how I document my code, how I coordinate with my co-workers, or taking the initiative in creating a project to work on that would help future employees complete their work more efficiently. I've come out of this experience with a fresh perspective on best practices to follow in development and can say that I benefitted greatly from this experience.

Written Communication

I learned the significance of creating better documentation for
projects that I work on. This knowledge/skill became very
apparent when co-workers that haven't worked on certain
projects looked at the documention I had written which allowed
them to get caught up to speed far faster than if they were
required to read over the code base itself.

Communication

I learned how to effectively communicate the issues I had to solve through text. This allowed me to get the help I needed
from my co-workers without having to interrupt them while
they were working on their own tasks.

Creativity

I had many opportunities to apply a creative thinking process
to solve problems. This allowed me to learn the importance of
thinking outside the box when it comes to solving problems.
In one circumstance I was able to solve a problem by
creating an internal tool that allowed me to automate a section
of my work.

Position Overview

I held the title of DevOps Developer at Tekside. My tasks throughout my placement varied depending on what project I was working on at the time. A lot of the time there was a need for someone to jump between projects to provide a bit of extra help. There were times I had to figure out the problem that I was trying to solve and then a solution for said problem. I also worked on projects where the design/actionables were laid out very clearly and I had to complete the nessecary steps to spec. Below are all the different projects I worked on during my time at Tekside.

Project Timelines

Subscribe Page Phase (January - April)

Project Overview

This was the first project I was given at Tekside. The state of the system when I arrived was fairly simple. The purpose was to subscribe users to our clients' different newsletters. This was accomplished through a few different steps.
- Create a front end site for the end user.
- Prompt the user to enter the email they'd like to subscribe with.
- Use an API that was built by the previous Coop student to send a request to the companies main SAAS, which would then subscribe them to their desired newsletter.

The task I was given was to revamp the old system to provide more security to both the end user and our clients that are using the service. The improvements I was asked to implement are as follows.
- Verify a users email before subscribing them to the newsletter.
- Once verified allow a user to change their preferences.

Steps in Development

Verifying a users identity
1. An initial verification page was created with a single field for the user to enter their email.

2. Once a user submitted their email a token was created with their email as the key which is valid for 1 day
3. An email would be sent to the user with a link containing their valid token.


Editing a users preferences
4. When a user clicked on the link in their email they're brought to the preference editor page.

5. They would be able to edit their personal details as well as what newsletters they wanted to subscribe to. Once any changes were made a request would be sent to Connect with the updated contact/subscription information and the users info would be updated in Connect.

Problems and Solutions During Development

Problem: Almost no documentation of the initial API was provided which made starting development very taxing.
Solution: Unfortunately there was no easy solution for myself. Before adding my own changes I had to read through the current codebase for at least a week to understand how it interacted with Connect's API as I didn't want to break any existing functionality. Even though there was no easy solution for me, I did document all the new code I wrote as well as the previous code that I hadn't written. This way any one else who had to work on the project in the future would have an easier time getting started and making changes of their own.

Problem: It took about 1 - 2 days to get a new subscription page up and running. I had to do this for about 10 clients which ended up taking quite a bit of time in total, even with the API working perfectly.
Solution: I created a subcription template repository. Using this template anyone would be able to set-up a new client in few hours once they got used to it. I created a step by step tutorial on how to set-up a new client, with screenshots and simple instructions making the set-up far easier than before. I had demoed this project to the whole company on something called "Tekside Tuesday" which is an event held each month to illustrate what some of the developers are working on. This was met with great enthusiasm, and I appreciated the suggestions from my co-workers on what they liked and where I could improve this service. The above screenshots were taken from the page I set-up for this demonstration.

Email Template Phase (May)

Project Overview

This project consisted of getting designs for emails that clients wanted to send out and creating HTMl templates for each email. The timeline isn't entirely accurate as I worked on email templates throughout my entire placement but I did most of that work during late April and May. Normally creating HTML templates is very easy as there isn't that much that can go into them but when creating templates for email there are a lot of factors that need to be considered. There are 3 variables when it comes to formatting the email, the device; operating system; and application the user is opening it on. Seeing as how none of these can be known beforehand the email must be formatted so it looks the same across all devices, OS's and applications.

Steps in Development

Formatting across all platforms
To assure that the email created looks identical or as close to it, on all platforms we utlize a site called emailonacid. This site takes whatever HTML it's given and renders it across a large varity of devices, OS's, and application so that you can verify that the end user will view the email as the design intended. Below is an example of an email and what EmailOnAcid will generate.

Problems and Solutions During Development

Problem: Most email applications render the email as expected. The main culprit behind most issues is Outlook. It will either ignore certain styles that have been applied or change them entirely.
Solution: There is no perfect solution for this issue besides using HTML standards from when the Outlook application was made. This means you're not able to utilize a lot of modern day standards for HTML and must use old code repeatedly. My solution to this was to create an email template library. I hosted an internal site where employee's can upload HTML templates of previous emails so that they can be accessed and reused easily. I also added a snippets sections that just had small chunks of code that were reused often between different templates.

Screenshots

Data Ingestion Project (June)

Project Overview

For privacy the client for this project will just be referred to as the client instead of their name. For this project I was a member of a 4 person team that was tasked with importing all of the clients contacts from their current CRM into Connect. There was 3 steps to this process, the API request serice; Data-filter service; and the Connect-contact-service. My development was focused on the Connect-Contact-Service and the Data-Filter-Service

Steps in Development

API-Request-Service
This service makes requests to the clients current CRM's API to retrieve the contact records. It sends a formatted query to the clients's API which omits contacts based on certain data fields. It then parses the returned data into an object, that object is then passed on to the Data-Filter-Service. This was done once during the bulk import and was then set-up to routinely request the recently changed contact records at a set interval.

Data-Filter-Service
This service has 2 main functions. After receiving the data from the API-Request-Service it will check for bad records (invalid emails, null data etc.) and discard them. If a record is valid, then it is compared with a secondary database that stores a hashed version of the records info. If the record is found and is different than what's currently in the database or if the record is not found in the database (ie. it's a new record) then the hash value in the database is created/updated. The record is then passed onto the connect-contact-service.

Connect-Contact-Service
This service receives the filtered data from the Data-Filter-Service, formats it appropriately, then sends it to Connect.

Problems and Solutions During Development

Problem: Receiving bad data.
Solution: a lot of the data we received either had null information that shouldn't be sent to Connect or had missing data. We had initially figured that we could just request the data from the clients CRM and pass it onto Connect but after further investigation we found this would cause a lot of issues. This is why the data-filter-service was added as part of the development process. This is also when I learned that separation of different services can be very useful when developing in a group. The data object that we passed through the different services was constant so all we had to worry about in our separate services was how to process the data. This made the communication through the separate services simple, streamling the development process.

Connect Analyze Refresh (July - August)

Project Overview

I was put on this project with a co-worker. We were asked to modernize the Analyze service that Connect offers. It’s used to look at all the data that each email deployment has recorded. We also added in a dashboard page which did not exist in the service prior. We refreshed the table page with better coding practices improving the longevity of the service. The new features added on the dashboard included graphs to view specific data points over time as well as quick stats comparing certain relevant info to the previous duration of time selected.

Problems and Solutions During Development

Problem: Refactoring a large code base with a new language.
Solution: To improve the quality of the codebase we decided that it would be best to change the language used from Javascript to TypeScript. This change would improve the integrity of the codebase over a longer period of time and make it easier to read when a new employee gets moved onto the project in the future. Although we knew this would be a good idea in the long term, it was quite difficult to manage in the short term, as we had to rewrite a large majority of the existing service. Despite the issus we faced it ended up being a great learning experience. I had to determine what we would have rewrite completely as it would take too long to translate and which code would be fine to leave alone. We ended re-writing a large chunk of the code base but ended up making it more compact, making a component library for many of the UI features in the process. By doing this we produced a standarized model that could be used for the future of the project, making it far easier for other people to contribute to the service!

Screenshots

Goal Development Throughout the Semester

After reflecting on my time at Tekside I think I've exceeded the goals I set for myself in quite a few aspects. I don't think I would have realized the importance of good documentation until a considerable amount of time had passed in my career unless I had the experience that I did. This is due to my only having worked on projects myself or with a very small group of people over a short period of time. When you work in this manner the need for good documentation isn't as apparent since everyone (for the most part) will just remember where they left off and continue from there, but when working on a project over a long period of time, with multiple co-workers things change. This was made very apparent in my first project when the documentation was almost non-existent making it especially difficult to get aquainted with the codebase in a timely manner. To rectify this issue I wanted to make sure that everything I worked on was very well documented so that everyone else who had to work on/use the service I had put my time into did not have to deal with the same pain. Throughout the different projects I worked on I communicated frequently with co-workers who were either working on the same project or that I asked for help. After doing this over a long period of time I was able to communicate my issues concisely with clarity, which made the process far more fluid than earlier on in my term. I'm happy to say I was also able to make great strides on my final goal, which was to work on projects that I had created with myself. Both the subscription template page as well as the email template library were internal tools that I planned out and developed myself, which came with great reception from my co-workers. I took great pride in my own work not only from a developmental perspective but also with the documentation I provided along with it! Overall, during my 8 months at Tekside I think I grew immensely, not only as a developer but also as an employee and a person. I'm very thankful for my experience here and hope that other students also get to work at this great company as well!

Synergenics S20 & W21 - S21

Synergenics has been an IT Support and Solutions provider since 1989. They provide companies and individuals with the resources and information required to bring businesses up-to-date in this fast growing technological world. While a small company, Synergenics has a big impact on the Guelph area supporting some businesses for over 20 years! Their newest product “LP Angel Facial Scanner” offers companies safety and security in these troubling times by providing near instant no-contact facial scanning and temperature measurement.

Improvement Goals

During my 3rd term at Synergenics, I created goals that coincided with my increased responsibility as a full technician. Working directly with clients I wanted to create goals that would improve my communication and problem solving skills. This would allow me to communicate in laymens terms what issues the client was facing while allowing them to grasp the situation instead of it sounding like techno bable.

Oral Communication

Figure out what issue the client is facing

Ask the right questions to figure out how the issue occured

Explain the situation in simple terms to help the client understand the situation

Problem Solving

Develop a general problem solving action plan that I can apply on all jobs

Create a list of steps to follow which will help me diagnose and solve problems more efficiently

Technological Literacy

Fully understand server architecture and how they communicate with other devices

Follow a server setup to understand how policy configuration is done

Ask fellow technicians about server functionality and usability

Position Overview

I was involved with the installation and maintenance of customer IT systems and infrastructure, by working directly with clients to resolve their on going issues. This consisted of supporting clients in many different areas such as providing remote support for software issues, taking clients physical systems in for repair and maintenance, going onsite to diagnose, repairing and installing network systems. The most unique aspect of my position was being a main cog in the “machine” of Synergenics. Having coworkers rely on me to complete my work before they could comeplete theirs, made for a dynamic and fast paced work environment.
The skills I needed for the job were already built up from my previous experience in IT. These include hardware, operating systems (Mac & Windows), networking, and programming. What I gained were new layers of information, that built upon my already standing foundation of knowledge. This process greatly expanded my perspective of the IT world by showing me all the areas that I thought I understood and blowing them out of the water with piles of new information.

New Technological and Work Expereince

During my third semster working at Synergenics I had a well-defined position and was given more responsibility. The level of trust my employers and co-workers had in me was far higher than in previous semesters.
This put me in the position to independently diagnose, evaluate potential solutions, and propose a final answer, while taking responsibility for the outcome.
Network: Installed keystones for clients new buildings.

Hardware: Setup new machines for clients with desired specifications

In house: Helped wire a crypto mining room.

Goal Development Throughout the Semester

Throughout the semester I've accomplished what I wanted to and more. Daily contact with clients increased my skills in explaining technological issues to such a high degree that I can now explain how crypto currency works to my Grandma... So not to brag but they're quite impressive. In all seriousness getting to work with clients and solving their problems was a really enjoyable experience. Some people would come in with a problem that would normally have ruined their week (or year) and seeing their faces (or eyes in this case) when their problems were solved was well worth all the work. My problem solving skills have grown much faster than I expected. By applying my skills in so many different areas with so many unique possible solutions available, my ability to determine what paths to follow and what paths to discard have made solving problems np-easy (fast). Overall my time at Synergenics has helped me improve in the areas in which I feel I was most lacking. It was an excellent place to work and I'm thankful for the time I was able to spend there!