7D Surgical

Work Term Report

Jason Hung

7D Surgical System
 

00.

Introduction

Hello! I’m Jason Hung. I’m a 5th-year Software Engineering student at the University of Guelph. From January to August 2021, I worked at 7D Surgical as a Software Developer Intern for my third and fourth co-op work terms.

In this report, I will be detailing my responsibilities, learning goals, and what I’ve accomplished during my 8 months there. The focus will be on the co-op experience overall.

01.

7D Surgical Inc.

7D Surgical is a medical device company specializing in image-guided surgery for spine and cranial navigation. Their system provides extremely fast registration of the patient's anatomy to a CT scan, without the use of radiation.

Their main product is the 7D Surgical System, which allows surgeons to use tracked surgical instruments to view their precise movements within patient anatomy. This is done by registering (aligning) an intraoperative scan of the anatomy with a pre-operative CT scan.

Traditional image-guided surgery systems may take up to 30 minutes to perform registration, whereas the 7D Surgical System takes less than 20 seconds. All while being radiation-free in order to reduce exposure to the surgeon and the patient.

02.

My Role

As a Software Developer, I was responsible for helping develop and maintain software that is deployed onto the system. I helped design and implement new core features for these software applications. I was also responsible for documenting software design specifications and requirements for the areas I work in, as required by various regulatory bodies such as Health Canada and the FDA.

Since that I previously had 8-months of experience at this company back in 2019, I was given more responsibility and autonomy. Now that I am more familiar with the software products and the development process for them, I was assigned projects in which I was to be the project owner. This meant I was driving development and engaging relevant people in order to move the project forward. I was expected to define and triage work items based on the project vision/goal, which I previously relied on a mentor to take care of and tell me what to do.

03.

Work Term Focus

I already worked at this company before in 2019 for my first and second co-op work terms. Back then I focused on just learning the development process, tools, and best practices. It was my very first software development job, so I wanted to learn more about these fundamental areas.

For these two work terms, I aimed to continue building on the skills I learned, and by doing so, be able to work more autonomously. I also aimed to take on more responsibility by taking on higher level duties for a project. During my time there, I was given the opportunity for become the project owner for two projects I worked on throughout the two terms, meaning I was to be aware of the overall goal/vision for the project and facilitate development effort to achieve that. This involved generating requirements and creating actionable work items to satisfy them. This also involved being responsible for taking the project through the development lifecycle and making sure the proper documentation and other administrative tasks are completed.

This opportunity helped me achieve my goals and overall focus, and was made possible thanks to the trust I’ve built with my mentor and manager in being confident that I can remain productive and unblock myself without having to be checked up on often.

04.

Work Term Goals

Improve my proficiency in designing and implementing maintainable code.

As I continue to gain more experience, I want to work on improving the quality of the code that I write. I specifically identified maintainability as an important area to work on. In order to achieve this goal, I aimed to research and learn about various design patterns/principles such as SOLID, and be able to identify various implementations of these in the codebase.

I was able to achieve this goal, and I am now able to identify certain design patterns/principles such as dependency inversion, Liskov substitution, and other SOLID principles. I also found various examples within our codebase in which these principles are implemented.

Create tools and processes that facilitate and assist developers in the development of the company’s software products.

For my two work terms, I was assigned a project in which I was to improve a developer’s ability to work on our software applications on their laptop without having to access a system with specific hardware that the software would normally need. With the pandemic going on, this would greatly improve the ability for everyone to work from home. My goal was to completely satisfy the goal of the project by the end of my work terms by providing new development tools/features while improving existing ones. Ultimately, I wanted to make a positive impact on the company’s ability to develop and deliver their software.

By the end, I was able to implement a new set of useful features that allow developers to access nearly 100% of the software workflow (previously ~60%) without having to access a system. I demoed all the new functionalities to the team which was well received.

Improve my UI/UX design skills.

When working on front-end tasks involving creating an interface for a new feature, I had trouble with coming up with good, clean design. I identified this as an area to work and grow on. To tackle this goal, I searched for good sources UI/UX design information such as online tutorials. I also searched for examples of good UI design related to the components I was designing.

By the end of the term, I was able to improve my UI design skills, and rely less on other people telling me how to get started. Most importantly, I learned to take inspiration (but not copy) from examples rather than try to prototype something completely on my own. This way, I developed a better “eye” for good UI by seeing many great examples, and in turn was able to more easily prototype on my own.

Take more ownership in the projects I work on, and be able to efficiently drive a project forward.

A large focus for these two work terms was to take more responsibility and work more autonomously. As I was assigned projects for these terms, this involved taking ownership of them instead of having a mentor/senior direct me on what needs to be done. My goal was to be able to be able to own and manage the development effort of these projects, which involves determining work items to complete, as well as triaging them based on priority.

I was able to achieve this goal and learned to be cognizant of the overall goal/vision of a project and create work items to achieve that goal. I learned to place priority on work items that provided more business value and return on investment rather than the easiest ones.

Improve my code review skills and reviewing another developer’s code.

While improving the quality of the code I create is important, it’s also important to be able to effectively review another person’s code and identify relevant areas for improvement in order to keep the codebase clean and maintainable, as well as catch critical bugs that would otherwise have gone unnoticed.

This goal was not achieved as I happened to not review anybody else’s code for that term. However, the many pull requests I created always receive relevant feedback about the structure/design of the code, and catch bugs that I didn’t consider. This will help me when I review another developer’s code in the future as I know to look out for these things from my own pull requests.

Become more familiar with each of a software project’s phase, including what each phase is for, and the requirements to proceed to the next phase.

As I take ownership of more projects, I wanted to become more aware of a software project’s lifecycle and the processes for moving a project forward through each phase. This would allow me to make better decisions about what work needs to be done (documentation, demos, etc.) without having to consult a senior about what to do next.

I was able to achieve this goal by reading our documentation describing each software phase (Alpha, Beta, Verification, etc.). I learned what each phase was for and what needed to be completed to proceed to the next phase. I also put this to practice for one of the projects I was working on and was the owner for. Although due to time constraints (end of my co-op), I was not able to carry the project through many phases.

05.

Conclusion

These work terms have been invaluable to me. I feel that I'm a much better developer than I was when I first started. I have found new interests (such as design and architecture) that I want to pursue in the future. I have learned development processes and best practices that I am able to take and apply to my future work. I have gained more confidence in myself in having the skills I need to succeed in my career.

7D Surgical is a fantastic place to work and learn. It provides meaningful and relevant industry experience for new software developers. I will absolutely recommend fellow co-op students to apply to 7D Surgical!

06.

Acknowledgements

Special thanks to the following people for a successful workterm!

Michael Leung

VP, Software Engineering

Vladimir Savchenko

Director of Software Development