MDM (Mining Data Management) is a mine design database and workflow management tool. It plays a crucial role in the planning and operational stages of the mine design process by allowing mining engineers to collaborate on a mine design. To explain MDM to a software engineer, it can be compared to GitHub or Bitbucket for mining CAD data. While this comparison is limited due to the unique challenges presented by spatial and xprop data, it gives a general idea of its purpose.
Like any software engineering role, my work on MDM has involved addressing small isolated defects and enhancements, as well as contributing to larger feature epics.
Mine Layout Approvals
The aim of the PDF approvals feature was to enable mining engineers, project managers, and geologists to review the layout changes in a mine design.
This feature allowed the setup of a custom PDF approval template at the beginning of a workflow. The template included items such as mine design layouts, checklists, and spaces for required signatures. As changes were made to the mine design in CAD software, new mine design layouts were generated and displayed on the approval page. Reviewers could then view and sign a finalised document containing these changes in their web client.
The challenge of this feature was to provide users with the ability to edit a PDF document in their browsers to build the approval template. Working with PDF files can be notoriously tricky, so we relied on a library called PDFTron. Although PDFTron had an outdated coding style from the early 2000s and was somewhat challenging to use, it served its purpose.
CefSharp Plugin Refactor
When I joined Deswik, the MDM CAD plugin integrated into CAD software was written in WinForms, unlike the rest of MDM. This created a maintenance challenge, as numerous tasks had to be done twice: once for the client and then again for the plugin. This epic involved refactoring the MDM CAD plugin to use CefSharp, allowing it to share components with the client.
The plugin refactor was one of the most interesting epics I worked on. It required a complete UI rewrite for the plugin side and a significant effort to make existing client components more reusable and package them for distribution on Nexus.
Along the way, I also undertook a small endeavor of writing PowerShell scripts to update our graphics libraries, reducing the time required for package upgrades from approximately 1-2 hours to just a couple of minutes.
Software Demonstrations
Every fortnight the company would get together for teams to showcase their work. Presenters explained the purpose of the new features their teams had been working on and gave 10-20 minute live demonstrations to showcase the functionality to the entire company. As a newcomer to the company, I initially hesitated to present my work, but I eventually gave it a shot and received positive feedback. I presented again with similar success and eventually I was asked to fill the role of the former host who had recently left the company. As one of the two new hosts, my responsibilities included welcoming attendees to the demonstration session, providing a brief overview of the featured work, introducing presenters, and facilitating audience questions.
During my time hosting the demonstrations, I became invested in improving the overall quality of the sessions. One key issue was that many presenters assumed that people from other teams already had a user-level understanding of their product, which was not the case. To address this, I started communicating with presenters beforehand to understand their work, allowing me to ask the right questions and prompt them to provide appropriate context before their presentations.
Another significant challenge was increasing engagement during the presentations. The typical format lacked interactivity beyond a few questions at the end. I did my best to foster a lively environment full of jokes and banter that made the software demonstrations more enjoyable and approachable.
Doubles Pool Competition
Without a doubt, my greatest accomplishment was winning the doubles pool competition with my teammate Mark. Our team, named ^Mark(us)?$, emerged as the champions among approximately 25 other teams.