Magnet Forensics banner image

Working at Magnet Forensics

In this post I will be discussing my recent 4-month work term as a Software Developer Co-op at Magnet Forensics. I'm a computer science major (Bachelor of Computing) going into my fourth year of school at the University of Guelph. This was my third work term so far, my first two terms being spent at MappedIn. I hope that this post may provide some insight into my experience at Magnet and maybe even teach you something new!

Sections

About Magnet

Magnet Forensics is a global leader in digital forensics technology. We design and build products used for digital investigations in the modern era by law enforcement, corporations, and government agencies. Our primary focus is on acquiring and processing digital data from smart phones, computers, and the cloud while modernizing digital evidence management. Our goal is to bring the truth to light and our motto is Seek Justice. Protect the Innocent.

Magnet believes that nothing should stand in the way of the truth.

Magnet is a mid-sized company head quartered in Waterloo near the local university. A large portion of the employees work in Waterloo, but we also have offices in Ottawa, the Netherlands, and the USA. Our most well-known product is Magnet AXIOM, a software based data recovery and examination suite for mobile phones, computers, and cloud data. Magnet also builds products designed for agency wide case management geared towards law enforcement.

Learning Goals

Soon after I started my term at Magnet, I set out to achieve a set of goals that I knew I could work towards during my entire term. I choose three goals that I believed would be important and provide many learning opportunities while I was working at Magnet.

One key point I had in mind when choosing my own learning goals was what Magnet could provide me. I wanted to learn about how our software is used so I could become a more well-rounded developer. That is why I choose that as the focus of two of my goals.

1. Understanding the role of digital forensics.

For my first learning goal, I decided to aim for a unique learning opportunity that I could only get from Magnet. The main drive for this goal was understanding why we do the work we do at Magnet and how our software and our individual contributions made a difference.

I want to understand the role of digital forensics during an investigation and examination process.

To achieve this goal, my plan was to seek out individuals who work in the field and learn from them in addition to shadowing opportunities that I could learn from and would help complete my goal. I decided that I could use my own understanding as my metric to measure any success towards this goal.

Reflecting back on my term, I believe I have been able to complete this goal, at least by my original measure of success. I have gained a strong understanding of what digital forensics plays in an investigation. I now also know that there are many complexities and details that would take years to understand fully, but I believe I was able to obtain a very basic but complete understanding.

2. Back-end development in Clojure.

I ended up deciding on my second goal after a week and a bit at Magnet. The main product I worked on had a back-end written in Clojure. Clojure is a functional dialect of Lisp that runs on the JVM. Before this co-op, I had never used a strong functional language, a Lisp language, or a JVM language for a back-end. Because of these factors, I wanted to ensure I learned as much about Clojure as I could and hence I set out to become competent in the language.

I want to become competent at back-end development in the Clojure programming language.

I set out an action plan that involved continuously seeking criticism of my work as well as taking advantage of experienced co-workers and company resources. Using my work at the end of the term as evidence, I would be able to see if I had completed this goal. I would have completed the goal if I was able to build a complex new feature on the Clojure back-end.

Now looking back at my work, I can absolutely say I have achieved this goal. During my term I fell in love with Clojure and the expressiveness that it afforded developers. I had already managed to build a complex new feature by my second month at Magnet thanks to a commitment to learn Clojure.

As my third (and final) goal, I choose to pursue a new skill which I've been interested in for years but haven't been able to learn until now. I have always been interested in how real investigators and examiners work. Because Magnet offers in-house training on their tools for any employee, I decided to take advantage of that for this goal.

I want to be able to conduct a digital forensics examination of my own with the use of advanced forensic tools.

The action plan for this goal was a bit of a cop out compared to most, since Magnet offered a course, AX200, that would satisfy this goal upon completion. To flesh out my plan a bit, I decided I would work through AX200 as well as practice with the tools involved to maximize my learning. Completion of the goal was a fairly simple metric, I needed to be able to take an image of a real mobile phone or computer and examine it correctly.

This is the one goal I feel that I was not able to complete in its entirety. I was able to finish AX200 and practiced much more outside of that, but the more I learned, the more I realized I wanted to learn and would need to know. In the end, I was able to complete my goal with the original scope, but in the process I realized that my original scope was wrong. I hope to continue pursuing this goal after I leave Magnet.

My Job at Magnet

I worked at Magnet as a Software Developer Co-op. During my term I spent the majority of my time working on the Digital Evidence Management (or DEM for short) team. I worked as a full-stack developer with my primary focus being Magnet AUTOMATE, a workflow orchestration product designed to reduce case back log for law enforcement.

While working as a developer at Magnet, my responsibilities included maintaining existing software, implementing new features, and ensuring the quality of our software. I developed in multiple environments including front-end web applications, distributed backend servers, and high-performance processing applications. The key languages I worked in were JavaScript, Clojure, and C#. I did the majority of my front-end work in React using modern ES9 code features on a custom API built by Magnet. The other half of my work resolved around back-end programming in Clojure and managing complex distributed Jenkins pipelines.

Luckily for me, this job provided a diverse set of new and known technologies. I found this perfect because it allowed me to continue working towards an expert skill set within JavaScript and React that I enjoyed using during previous projects (CIS*3750) and jobs (MappedIn and Zeitspace). As well, I had to learn Clojure and hence Lisp languages without any prior experience. Finally, this was an amazing experience with regards to learning how distributed pipelines are designed and built primarily in Jenkins.

Academic Connections

I'd like to take a moment to talk about the connections between my term at Magnet and my academic studies. In theory, co-op terms are intended to enhance and improve the academic side of my education. I'll explain why my term at Magnet absolutely satisfied that intention for three main reasons.

1. Real world practice.

A huge component of a co-op term is obviously working. But not just any work, the work should (and does in my cases) relate directly to the academic program you're in. In my case, my pursuit for a computer science degree relates directly to work as a software developer. This allows, in essence, continuos practice using what I've learned during my studies. Because I need to take advantage of new skills and knowledge from previous study terms, my co-op terms end up reinforcing everything I've learned previously at skill in a way that you could not possibly get only from school. This huge amount of practice solidifies academic learning wonderfully.

2. Experienced mentors.

Throughout my co-op terms, and at Magnet in particular, I've always taking great advantage of all my co-workers who have years of experience in the field. I find that this provides a great insight into the unique skills and knowledge that individuals experienced in the industry can provide. This provides a perspective that contrasts that of academic experts. The new perspective gives insight into skills that I may have never learned if I had only practiced at school and academically.

3. Diverse experiences.

For me, I have worked at multiple employers for my co-op terms so far. Each employer has given me a different experience since they build different products, work in differing industries, and have different clients. Additionally, you learn a lot about the industry and products of the company you work for. During this term, I was exposed to cyber security and digital forensics which I've never learned about before. This was a diverse experience for me in the sense that I learned quite a lot that I never would have learned had I not worked at Magnet. I believe that expanding the diversity of your experiences gives you more background knowledge and allows you to become a more well-rounded employee and student. I think this experience is hard to obtain at school compared to co-op terms.

Conclusion

My term spent at Magnet Forensics this summer has been an incredible experience. I was able to contribute to majorly to projects that helped make real differences in the world. I also was lucky enough to learn a whole host of new technologies including Clojure, C#, and Jenkins. In the end I was able to meet most of my goals I had set out at the beginning of the semester. Between the work I finished and the goals I achieved, I found I grew a lot during the term, both in skill set and experience. I really hope you've enjoyed this post and I encourage you to pursue information about anything you found interesting!

Kudos

As a final note, I want to give my kudos to some of the people who helped me throughout my term and provided support. They very much so deserve some acknowledgement.

To start, I want to give a huge thanks to both Qiuchen Dong (or just Q) and William Lindsay. Q was my new hire "buddy" during my term at Magnet and helped me out with all the questions that I didn't know who to ask. He also worked with me through one-on-one meetings weekly providing feedback and support. Without Q's help, there's no way I could have achieved as much as I did at Magnet. Additionally, throughout my term, Will was the go to guy for knowledge and help. Since Will was the developer with the most experience on our product on our team, he was indispensable countless times and helped me a ton! Huge kudos to both Q and Will!

Following up, I owe much thanks to both Jason Wood and Kellen Bailey, who both acted as my supervisors, just at different points in time. When I started at Magnet, Jason was my direct supervisor and helped introduce me to our team and dynamics as well as helped in setting personal goals for the term. About halfway through my term, Kellen joined Magnet as my new supervisor. Despite being so new to the company, Kellen was able to help me continue my professional development at Magnet and was a wonderful supervisor. I want to thank Jason for being incredibly easy to work with and supportive throughout my term. As well, I want to thank Kellen for instantly being a supervisor who I could go to for any questions at all!