Bio
Where I have worked and studied, newest first.
2026 to now
Senior AI Engineer, MEDFAR Clinical Solutions. Montreal, Quebec.
MEDFAR builds software for physicians, their care teams and their patients, and a lot of the current work is a suite of AI features aimed at the documentation and administrative load that surrounds a clinical visit rather than at the care itself. I lead prompt and model evaluation.
2021 to 2026
AI & Software Engineering Researcher, Huawei Canada, Centre for Software Excellence. Montreal, Quebec.
The Centre for Software Excellence researches foundation model applications, both AI for software engineering and software engineering for AI systems, and does it as academic and product work at once. I joined from Kingston and eventually moved to Montreal.
Some of the fun stuff I worked on while I was there: Watson is a cognitive observability framework for the reasoning of LLM-powered agents: an execution trace records what an agent did, not the reasoning that got it there, which is the part you want when it goes wrong. Software Engineering for Software Makers and From Vibe to Verifiable argue for treating the specification as the durable artifact once a model is writing the code, and Beyond Correctness labels architectural reasoning in code models with agentic judgement, since whether the code runs is what they get evaluated on and whether it was built sensibly is not.
The Hitchhiker's Guide to production-ready trustworthy FMware and a tutorial on software engineering for FMware cover what shipping software built on foundation models actually takes, and I taught bootcamp sessions on AIware observability and prompting with DSPy.
2020 to 2022
M.Sc. in Computing, Queen's University, Software Analysis & Intelligence Lab. Kingston, Ontario.
I did my master's at SAIL with Ahmed E. Hassan. The lab works on the practical side of building and maintaining large, complex software systems: mining software repositories for the actionable information sitting unused in software data, studying how systems evolve and how their architecture grows, and performance testing, debugging and monitoring at the scale of a real data centre. Much of that happens in close collaboration with industry, so the questions come from problems practitioners already have, and the answers get validated on their systems rather than on toy examples.
My own research was on dependency management bots, the tools that watch your project's dependencies and open a pull request every time one of them releases a new version. The pitch is that they take the upkeep off your hands. The first paper, There's no such thing as a free lunch, asks what that automation costs the npm projects that adopt it. Every bot pull request still has to be reviewed, built and either merged or closed, and a good share of them never lead to an upgrade at all: they get superseded by a newer release, closed unmerged, or reverted afterwards. The bot moves the work rather than removing it, and some maintainers respond by configuring it down or turning it off.
That leaves the question the second paper is about: if reviewing every upgrade yourself is the expensive part, can you borrow the judgement of everyone else who already ran it? Dependabot tries exactly this with its compatibility score, which reports how other projects' test suites fared on the same version bump. Leveraging the crowd for dependency management is an empirical study of how well that signal actually works, and the answer is that it is thinner than it looks: it is missing for a large share of upgrades, it rests on few enough observations to be fragile when it is present, and it cannot know anything about how your project in particular uses the dependency.
Those two papers make up my thesis.
2018 to 2020
Full Stack & Systems Development, Eigen Innovations. Fredericton, New Brunswick.
I started at Eigen as a front-end co-op student and came back after graduating as a full stack and systems-level developer. Eigen builds industrial machine vision for manufacturing, so the software sits between cameras on a factory floor and the people who need to know when a part came out wrong. That gave me an unusually wide surface for a first real job: the front end, the back end and the database, and then down at the systems level, multithreading and computer vision techniques.
2014 to 2019
B.Sc. in Software Engineering, co-operative education program, University of New Brunswick. Fredericton, New Brunswick.
Software engineering at UNB is a joint degree between the Faculty of Computer Science and the Department of Electrical and Computer Engineering, so the coursework came from both sides. I took the co-op stream, so the five years were split between terms on campus and terms working.
The placements took me through a few different companies, from IT support to quality assurance to development, and also into academic research. One of those terms was a research assistantship in UNB's Human-Computer Interaction Lab, working on a "Smart Cane" for walking gait analytics.
For the senior design capstone my team took the Technology Management and Entrepreneurship track, which meant two semesters building a product rather than a term project: not just the engineering, but the marketing, the branding, and the work of standing up something that was meant to behave like a company. We competed with it at the final engineering design symposium.