who am i
Canadian forged, globally honed.
Ten years inside a Canadian financial institution, then two years turning the same method on my own problems — in software, on terrain, and through a camera. The domains changed. The method did not.
Canadian forged
I spent a decade inside a top-five Canadian financial institution, ending as Product Owner for Commercial Lines transformation. The work reached roughly 3,000 independent agent businesses and up to 850 employees nationally, across five product lines and three distribution channels. Bilingual throughout, in English and French.
The habits I still run on were set there: run analysis, proposal and development on a rolling four-week cadence; refuse to build until the proposal has agreement; validate against data rather than sign-off; and route remedial action to a named owner when a number misses. About 90–150 initiatives went through that process.
Globally honed
I left in March 2024 and have been independent since. Two years, twenty-plus countries, and a small estate of systems built end to end — plus the mountains, the camera, and the field logs that came with them.
What I took from the institution was a method rather than a job title. What the last two years proved is that the method does not need an institution to work.
One method, three substrates
The same four moves — diagnose what is actually true, specify a buildable target, build it, then close the loop against data — turn up in every domain below. A multi-week self-supported traverse is a capacity-planning problem with stages, gates and a lag consequence. A film archive is a stage-gated pipeline with quality control. The software estate runs sprint gates and measures plan against actual. Different substrates, one operating habit.
Independent builds
Software I designed, built and operate alone.
165,861 lines across 14 repositories, built alone. The estate's internal projects are not described here.
Senna
54,254 lines · 104 commits · 618 tracked items across 63 epicsA local-first capacity-planning system that models a week as weighted capacity blocks and then measures what was actually completed against what was planned.
It runs on a deliberate 60% floor rather than a 100% target, because a benchmark you keep missing gets abandoned.
RCS — a generalised idea-capture system
14,299 lines · 14 mapped flows · 280 code-traced stepsRecords not just what I believe but what would falsify it, how likely that is, and how much warning it would give — as an append-only log of when a position changed and what changed it.
The subject matter is private. The pattern is general: most note tools store conclusions; this one stores the terms on which a conclusion expires.
The Anzu → Ashurbanipal pipeline
13,037 lines capture · ~690 catalogued documents · ~3,800 concepts · 30k typed relationsAn ambient capture extension feeding a private library that identifies a document by the hash of its contents rather than its filename, so files can move and be renamed without breaking the record.
Everything reads through connections opened read-only at the driver, proven by a test that tries to write and expects to fail.
Film photography — the practice behind the images
Twenty rolls shot across roughly twenty countries, from Tanzania and Beirut to Langtang, Kyrgyzstan and Ladakh. The images are the visible output. The reason I lead with the practice is that the practice is the interesting part: film cannot be checked, corrected or re-shot in the field, so the record has to be right the first time, in places with no signal.
So I built the instrument. An offline-first field log — a Kotlin Android client with a read cache and an outbox of events, paired with an event-sourced sync server. Writes succeed locally first and reconcile later; every event carries a UUID so a sync retried into a flaky connection cannot double-count a frame; conflicts resolve last-write-wins.
9,681 lines · 39 Kotlin files · 9 test classes · 20 rolls · 738 files · 86 exports
Film cannot be checked, corrected or re-shot in the field. The record has to be right the first time, in places with no signal — which is why the practice is the instrument, not the pictures.
It is measured, not decorated. On-device work found the exposure dial pair eating 43% of the screen because a weighted child made a 120dp cap inert. The profiler was cheaper than the argument.
It is a stage-gated pipeline. Originals → masters → curated → edits → resources, 738 files, 86 curated exports. Same shape as any production process.
It is honest about defects. The README records the ones it found and fixed, including an offline banner that claimed to show cached frames while listing only queued ones. Write down what you got wrong.
It is designed for the conditions it runs in — offline by default, because the places worth photographing are the places without signal.
Selected frames
1 / 10
Ten frames from twenty rolls. Scroll or swipe; the counter tracks position.
Physical pursuits
Trekking and high-pass traverses in six countries, a martial-arts intensive, surfing, and a residential training. Each one logged the same way the software is.
The planner records every one of these the way it records a work item: dates, altitude, distance, completion. Memory is a poor instrument.
Why the breadth
Multifaceted is a differentiator only for a buyer whose problem is genuinely cross-domain: document-heavy, decision-heavy operations where the constraint is not effort but where the decisions sit. If that is the problem, breadth is what you are short of, and the range above is the evidence.
It is not a claim to be good at everything. It is a claim that the same method holds on code, terrain and archives — and that the operating discipline is the constant, not the subject.