Note: Specifics of the projects in discussion will not be disclosed due to confidentiality


ABOUT MAGNET FORENSICS

“Seek Justice. Protect the Innocent.”

  Criminal investigations have transformed greatly over time due to the technological advances of society, placing a larger focus on digital elements such as location data, images, browser histories, instant messages, and email. Digital forensic labs were overwhelmed by the sheer amount of data that needed to be manually recovered from computers and mobile phones, and some of the most relevant data couldn’t be accessed at all.
  Starting in 2011, Magnet Forensics was launched with the purpose of revolutionizing the way investigators obtain and handle digital evidence. Now as a global leader in digital investigation software, with over 4,000 customers in over 100 countries, Magnet Forensics plays a crucial role in modernizing digital investigations. Recognized as one of the fast-growing Canadian companies in recent years, it has employees working in offices located around the world, in Waterloo, Ottawa, Herndon (USA), and Singapore.
  The company has firm roots in government and law enforcement, as well as helping agencies fight cyber enabled crimes such as human trafficking, child exploitation, and terrorism. In addition, organizations in telecommunications, technology, health care, and financial services have adopted their software to investigate important potential issues such as corporate fraud, employee misconduct, IP theft, and external threats such as ransomware, malware attacks, and business email compromise.


Magnet Forensics Website

JOB DESCRIPTION

  For my 4-month Summer work-term at this amazing company, I worked as a Software Developer Co-op on Magnet Forensics’ REVIEW Team. Working primarily remotely, with the option to use the company’s wonderful main office space in Waterloo, I contributed to the development of the Magnet REVIEW product, which allows non-technical users to easily browse, search and filter evidence with an intuitive interface that works on any web browser. It also enables simple and easy collaboration between users from anywhere, especially through the application of tags and comments to items of interest that other collaborators can instantly view, among many other useful features for reviewing digital evidence in a simple, yet effective way.
  Using Kanban methodologies, I worked on “Taco Team,” a group of 5 developers and 1 testing specialist assigned to develop new features for, and maintain, Magnet REVIEW. Using React/Javascript for the frontend, and .NET/C# for the backend, I had the opportunity to contribute to the product’s evolution in various ways, from adjusting user interface elements to improve the user experience, to developing backend logic to provide the user with additional useful information when generating a report. I applied my experience with REST APIs, Kubernetes, and JIRA from my previous co-op placement, as well as my knowledge of JavaScript, Object-Oriented Programming, Pair Programming, Unified Modeling Language, User Interface Design, and more from my education at the University of Guelph, in order to excel as a Magnet REVIEW developer. In addition, I participated in many formal meetings, such as stand-ups, retrospectives, and more, as well as informal meetings such as troubleshooting sessions, testing debrief meetings, and backlog replenishments.



TOOLS AND TECHNOLOGIES

  Being a developer for the Magnet REVIEW product allowed me to learn a variety of new tools and technologies, as it entailed both frontend work, involving the user web interface, and backend work, involving the various microservices. In addition, I used many new tools as part of my regular development process at Magnet Forensics in general. For example, I got the opportunity to use premium Slack as the primary method of communication within my team, as well as across different teams, which is a platform that I had very little experience with before this work term. Moreover, I had used a program called “Postman” to easily send API requests and test endpoints as necessary in the past, but on this team, I was able to learn how to use a similar alternative, called “Insomnia” to accomplish the same task, further widening my technical toolset. In regard to my frontend work, I received valuable experience with React, async and await functionalities, as well as frontend testing which involves making mock requests, rendering pages and its components, as well as using various snapshots to verify the structure and contents. On the other hand, by doing tasks involving the backend, I was able to learn a whole new programming language, C#, as well as how to use the .NET framework in general. Additionally, I had the opportunity to get even more experience with common, but important, tools such as Kubernetes, VS Code, debuggers, testing frameworks such as Jest and ViTest, Node Package Manager (npm), and more. I also extensively used a program called “Miro,” which acts as a virtual board on which members of the team can visually depict what is needed; for example, we used it to visualize the dependencies of each story related to a large epic, in an easy-to-follow diagram. Another example of our Miro use is when we held Retrospective meetings for the releases, we used it as a virtual board to put sticky notes in the appropriate columns. Furthermore, since I worked-on the user interface at some points, I had to converse with the User Experience (UX) team, and I even sat-in on one of their usability testing sessions, which was an excellent demonstration of how I can apply what I’ve learned in school about usability testing to a real session. To add, the UX team used Figma as a tool to visualize and communicate what they want to see in the UI, so I had the chance to familiarize myself further with that commonly-used software. Lastly, the developers at Magnet use Azure DevOps for version control, which was also brand new to me, as I only had experience with GitHub and GitLab. While it is largely the same, I still had the privilege to familiarize myself with another version control interface that I may encounter again in the future. Overall, the wide range of tools I had the opportunity to learn and hone my skills with a wide range of tools was largely due to the nature of my work being both frontend and backend, but also simply because I always jumped at the opportunity to learn new things. For instance, I could have continued to use “Postman” to test API endpoints, but I chose to try something new with the slightly different, “Insomnia,” instead.

React


WORK HIGHLIGHTS

  During my term working at Magnet Forensics, I learned many new tools and skills, contributed greatly to the Magnet REVIEW product, and had a fun time with my team. On the “Taco Team,” alongside two other small teams, which all combine under the name, “REVIEW Team,” I did a variety of work for both the frontend and backend. For example, I made changes to the UI in a variety of ways, from the location and style of buttons, to creating a new alert message for a particular event that needed to be communicated to the user. Regarding the backend, I improved logging, created API endpoints and the respective functionality in microservices, and more. Overall, I took the opportunity to do vastly different tasks which required entirely different skill sets and knowledge, in order to learn as much as possible on this team, and I’m grateful for all of the valuable experience I’ve gained involving the following: JavaScript, React, Jest, MySQL, C#, debuggers, Kubernetes, and more.
  Additionally, in the second half of the work term, I began to take-on QA (Quality Analysis) tickets in addition to the feature development and bug fixing tickets, when I noticed that there were many items waiting for QA on the board, and I had finished the story on which I had been working. This allowed me to learn more about testing new code changes thoroughly, and apply my experience from my past co-op term in attempting to find potential bugs and improve the overall stability of the code functionality. Lastly, working-on QA tickets also allowed me to improve my informal communication skills, as it entails doing a debrief of the testing results with the team afterwards, to verify if there is anything that the team thinks was missed, and should still be tested before integration.
  I had an opportunity to improve my oral communication skills in a software development setting throughout my time working at Magnet Forensics, so I volunteered to run the team’s daily stand-up for an entire month. Doing so allowed me to get more comfortable with talking in meetings, as well as keep the meeting on-time and sticking to the agenda, without getting sidetracked by things that should be discussed outside of the current meeting. Since I attended every standup meeting anyways, I thought it would be a great opportunity for me to be a leader, and take-on a role with more responsibilities as a co-op, and I believe that it was effective in improving my general comfortability with leading meetings for the future of my career, and has given me some things to work-on regarding my formal communication skills.
  Throughout the 4-month term, Magnet allowed all co-ops to gather on every Friday for a one-hour meeting to play online games and chat in a Microsoft Teams call, as an attempt to keep us connected with people in similar situations, who are also around the same age. It was a great program, because I made some good friends as a result of these weekly social sessions, and I truly had a fun time de-stressing and laughing with the others. Additionally, due to the bonds I formed in these weekly socials, we created our own team for the company-wide hackathon in the second half of my term!
  During July, the company ran a company-wide hackathon over three days of the week, called Magnetathon. In this time, I formed a team with 4 other co-ops, and helped to develop a PDF to XML converter project that was intended to help fix an issue in one of Magnet’s products that was resultant from a source suddenly choosing to supply PDF format files rather than the XML format files that the original code logic was based-on. In short, we had a successful hack, and were the first presenters in the demonstration/showcase at the end of the Magnetathon. It was also a great experience working with the other co-ops as a team, since I was the only co-op on Taco Team. Throughout the hackathon, there were several fun games in which we could partake, such as drawing games, trivia, and more, as well as guest speakers, who told interesting stories, or ran very informative demonstrations.
  Near the end of August, the company held the “Magnet Summer Jam,” which is essentially a week in the Summer that is chosen for all employees across the world to have the chance to travel to the main office in Waterloo, Ontario, from wherever they live, expenses paid. For this week with everyone in one place, a big company event was held at Bingemans, where we were served delicious food in the conference hall, and had our quarterly presentation in-person rather than online. Afterwards, we had a variety of activities to do in the Bingemans Center Square, with live music, entertainers, and various carnival games. In addition to this all-day company event, since all team members (who could make the trip) were in-office that week, they also held many fun events throughout the week during the day; my team, for instance, ordered take-out and held a group lunch on the patio on one day, and traveled uptown Waterloo to eat lunch together at a restaurant on another day. Other teams chose to book meeting rooms to play board games together, or set-aside the BIG Room to play table tennis, table soccer, bubble hockey, and more. Evidently, Magnet truly cares about its employees, and graciously gave them the opportunity to bond better as a team, despite how far away they may live, and I thought that was a very inspiring initiative.



GOALS

      LITERACY - Information Literacy: Improving Technical Vocabulary
      Goal
        I will learn new terms and abbreviations related to the software development process and various development tools to improve my technical vocabulary, so that I can more easily understand and contribute in technical conversations with my team, and any future teams.
      Action Plan
        My action plan is to record all unfamiliar words or phrases in a personal document, and either research them individually, or ask one of my teammates for an explanation, in order to define and understand each new word. I will also record the definition for each, so that I can fully understand, and consequently be able to utilize, each term or abbreviation in any meetings or presentations with my current software development team, as well as any future teams.
      Measure of Success
        My measure of success is the number of new terms that are in my list by the end of the work term; My goal is to create a list that contains at least 5 new words, as well as their definitions. Although I learned many new terms at my previous co-op placement, I believe that due to the difference in the tools and processes between the teams and companies, learning 5 new terms or abbreviations is a reasonable goal.
      Reflection
        Over the course of the work-term, I have learned many new words and terms related to the software developer field, recording twelve unique terms and definitions. Furthermore, I have clearly surpassed my initial goal of five new terms in an outstanding fashion, and all new terms will be outlined in detail below, but for instance, a couple examples of terms that I have discovered are the following: BVT, which stands for Build Verification Testing, and represents the act of the team manually testing the product before a release to catch any bugs that may not have been caught by the automated tests, as well as KT, which means Knowledge Transfer, and involves a developer explaining/teaching another developer about a concept, tool, or task they are working-on in order to give them enough knowledge to continue work on it while they are unable. The other terms for which I recorded definitions are the following: Landed, Blocker, Bash/Bashing, Debrief, Nit, RC, On-Prem, Migration, Timebox, and SaaS. While I had learned many software development terms at my last co-op placement, and I thought there would likely not be many more, I was proven wrong, as I still increased my technical vocabulary by more than twice the number than I had originally set as my goal. Furthermore, it is evident that I still have a lot to learn when it comes to my technical language skills as a software developer, and I am excited to learn more in my next term.

      Terms and Definitions:
    • BVT:
      Build Verification Testing - when large e2e test suites do not exist yet, the team must manually verify that the product is working properly before the release to the customer, to find any possible issues that may have been missed during previous testing
    • Landed:
      A term software developers often use to indicate that a ticket/task has been completed.
    • Blocker:
      A categorization of a ticket that indicates an issue that “blocks” the development completion of other tasks.
    • Bash/Bashing:
      A term that the software developers use to describe a session where developers and testers discuss the acceptance criteria, minor details that require attention, and a general plan of action for the ticket(s) on which someone is beginning to work.
    • Debrief:
      The term that the software developers and testers use to describe a session in which the tester goes-through their list of tests, and discusses what they tested, the reslits (succeed/fail); developers also are given the floor to suggest additional tests that may be beneficial, or have been overlooked, etc
    • Nit:
      A word that is commonly used in code reviews, meaning a very small or minor imperfection; for example, if there is some trailing whitespace at the end of a line, which sholidn’t be there.
    • RC:
      Stands for Remote cluster, regarding the use of Kubernetes.
    • KT:
      Stands for Knowledge transfer, which is the name given to the process of one team member giving all known information of a particliar topic to another team member, which is usually done to allow another person to work on a ticket that is assigned to someone who is going on a long vacation, or to spread knowledge of new tools that the team may be unfamiliar with in general.
    • On-Prem:
      Meaning “on-premise,” referring to when an installation of the product is done for a client’s own environment, and their deployment of the product is their own; sometimes there are different behaviours of the software for on-prem versus the developers' setup, so this term helps to distinguish between the two types of environments.
    • Migration:
      In software development, it is a word used to describe the movement of code from one location to another, or the upgrade of plugins/libraries/tools that require configuration changes in the code.
    • Timebox:
      Set aside a predetermined amount of time to investigate or work-on something, and if the time limit is reached without completing the task or fixing the issue, the developer will record their findings and create a ticket to be done later. If the issue is fixed within the time period, no new ticket is needed to be created, and instead, it can be added to the current ticket that is being worked-on. Used to try to prevent scope-creep.
    • Patchset:
      A set of software patches that have been applied to the code, usually used by team members when describing the fixes they have made to their plil request after getting feedback during code review.

  1. LITERACY - Technological Literacy: Becoming A Full Stack Developer
    Goal
      I will familiarize myself with both ASP.NET, C#, and JavaScript, in order to effectively contribute to my team’s development on our product regarding both the front-end and the back-end, in order to get a diverse development experience for my future career.
    Action Plan
      By being open to tasks related to both front-end and back-end, as well as asking my supervisor and teammates for suggested tasks to take-on, I will be able to get experience with both front-end and back-end development by the end of the work term.
    Measure of Success
      As a measure of success, I will strive to complete at least 2 front-end tasks for my team. Since most of my work will involve back-end development, I will measure only the number of front-end tasks that I complete for the purposes of tracking my goal. This way, I can ensure that I'm choosing to work-on some front-end development tasks, with which I am less comfortable than back-end, allowing me to broaden my skillset and push myself as a developer.
    Reflection
      By the end of my 4-month term, I had completed 4 front-end tasks for my team, with one of them being a major feature that was highlighted in a significant release of the team’s product, as it was a big visual change to a page that has the most traffic in the web application. As a result, I have achieved my goal of completing at least 2 front-end tasks, by doubling the number, and surpassing my own expectations. While front-end development was mostly new to me, I challenged myself by taking-on tasks that involved front-end work, allowing me to familiarize myself with key concepts such as JavaScript style/syntax, React, front-end snapshot testing, Jest, mock requests, “npm” (Node Package Manager), async/await, bootstrap, and UI design. It also allowed me to interact with the UX team about any UI changes that I needed to make, which taught me much more about how to take the user experience into account while developing the UI. Although I still did mostly backend tasks, since they were more critical to the team’s short term goals for the next releases’ features, a large portion of my time was put towards either developing or testing front-end features and fixes, which I believe greatly benefited my technical knowledge as a developer, and will prove useful in my future career.

  2. CRITICAL & CREATIVE THINKING - Problem Solving: Improving Onboarding For Future Team Members
    Goal
      Over the course of my onboarding, I will improve the current onboarding instructions documentation by updating it as needed, and adding any necessary information for any new hirees that will be using it in the near future.
    Action Plan
      As I go through the onboarding process, I will take notes, and address my concerns by creating a new branch of the onboarding documentation repository, making my changes, and presenting it to my supervisor for feedback. I will also ask my supervisor for confirmation when making more drastic changes.
    Measure of Success
      I will consider this goal a success if I successfully merge my changes with the current master branch for the onboarding documentation repository, as well as any other repository that I may need to change in order to improve the onboarding and development environment setup process, and new employees within the team afterwards are able to smoothly setup their development environment. To clarify, I will try to make changes to at least 1 code or documentation repository as a result of my findings while completing onboarding, and monitor the progress of new hires who will be doing the development environment process.
    Reflection
      After completing my onboarding, I merged changes with the master branch for the onboarding documentation repository, making several key changes to improve the comprehensiveness of the instructions and guides. For example, I changed the wording for the environment and EC2 instance setup section that better aligns with the current version of the AWS interface, which had different wording for the user interface than what was described in the onboarding documentation. Overall, I achieved my goal with great success, as it was evident that the two new full-time hires on the team, who started shortly after I made these changes, were able to smoothly progress through the onboarding. I also reached-out to my new team member to offer my help with any onboarding issues since I had just gone through the whole process a week prior, and would be able to solve any similar issues that came-up. I wasn’t asked for any further assistance, which implies that my changes to the onboarding documentation led my new team members to set-up their environments properly, and avoid the issues that I encountered during my first couple of weeks on the team.

  3. COMMUNICATING - Oral Communication: Leading Meetings
    Goal
      I will run the daily standup meetings for a month during my work term in order to further develop my oral communication skills, as well as my ability to run a smooth meeting as the leader.
    Action Plan
      Since the team selects a new person who runs the meetings each month, I will volunteer to do it in the month of July (or August if that somehow doesn’t work-out), and I will attend every standup meeting on-time, as I have been, but will also be running the meeting, ensuring that all of the necessary updates are given, and making sure the meeting moves-along smoothly, without the team getting side-tracked by topics that should be discussed outside of standup.
    Measure of Success
      My measure of success will be the simple fact that I am able to volunteer to run the standup meetings for a month, as well as the level of positive feedback from my mentor regarding my ability to lead those meetings after the month is over.
    Reflection
      For the month of July, I ran the daily standup meetings for my team every day, always being punctual. I also made sure to ask the management figures in the meeting for any updates following the updates of my team members on their respective tickets, in case there was any information that should be shared among the team, always giving the chance for people to speak. In addition, I ensured that the meeting stayed on-track, not allowing in-depth discussions about tickets that are in progress take-up the allotted meeting time, and instead encouraged the team to take the discussion to Slack after the standup meeting had finished. Moreover, after speaking with my mentor, Drew, about my performance as the standup leader, the feedback was overly positive, signifying my success in achieving my goal. He told me that my communication skills had greatly improved, but there was still one area where I could improve; the ability to have natural-flowing meetings, without being too rigid and too quick. While I tried to keep the meetings as concise as possible, upon reflection, I see that I can elaborate more on each ticket before I ask for an update from the assignee, just to give some context to the others in the meeting, as well as keep the meeting flowing naturally. In the future, I will use this feedback to further improve my communication skills when it comes to leading meetings.


CONCLUSIONS

  In conclusion, my 4-month work term at Magnet Forensics was an amazing experience in which I developed many of my skills as a programmer, as well as gained valuable knowledge about various tools that I will likely use again in my future career. Using commonly-used programming languages such as C# and JavaScript, with frameworks/libraries such as .NET and React, will be beneficial to my skills as a programmer, as many other tech companies will use very similar, if not the same, tools and technologies, possibly giving me the knowledge needed to achieve great success more efficiently in future positions. In addition, the variety of work that I had the opportunity to do in general, working on Magnet REVIEW, including frontend, backend, and quality assurance tasks, has allowed me to continue on my path to become a full-stack developer who is well-rounded, being a valuable team member in all areas. Over the term, I progressively became a team member that contributes greatly to the product, in an efficient and effective manner, rather than an inexperienced co-op that lags behind the other full-time employees. Moreover, I am thoroughly impressed by the combination of culture and dedication that Magnet brings as a whole, with an emphasis on REVIEW Team, as it was truly a joy to work with each and every one of the members, always being a fun and welcoming environment; for instance, we had hosted a biweekly “coffee time” or “game time” to spend time together as a team despite working remotely. Regardless of how much fun we had as a team, ultimately, everyone remained determined to make Magnet REVIEW the best product it can be, and never got distracted from that ambition. Magnet Forensics’ vision, to seek justice and protect the innocent, with their various software solutions, is clearly evident through the behaviour and actions of the employees, and it feels wonderful to be a part of something that truly helps people around the world. Overall, working at Magnet Forensics was an incredible experience, and if given the opportunity, I would strongly consider working there as a full-time employee after I graduate.



ACKNOWLEDGEMENTS

I would like to thank the following people for making my 4-month Summer co-op experience at Magnet fantastic, as I truly enjoyed working with each and every one of them, and they created an extremely welcoming and positive environment in which I was able to gain valuable experience as a developer:

MAGNET REVIEW MANAGEMENT

TACO TEAM (my team)

GADGETEERS TEAM

WARP TEAM

MY HACKATHON TEAM