Senior software engineer focused on product, UX, and developer experience.

I take on difficult product problems and stay with them from the first technical decisions through rollout and real use.

The interface is only half the work

A change-review flow, live captions or a map editor depends on far more than the interface. Getting the interaction right often means working on the data, services and shared foundations behind it.

That is where I do my best work: moving between the product and its foundations, taking on the awkward technical parts and making the next change easier to deliver.

Selected work

Structured-document change review

Authors and reviewers needed to understand changes in rich, structured documents without comparing versions by hand, losing their place or breaking the document’s reading flow.

I designed and built the comparison experience, turning raw change data into additions, removals and edits that reviewers could scan in context. We tested it first across product teams, then with the wider company.

Fine-grained matching made small edits easy to follow but confused larger changes. I paired detailed comparisons with explicit replacement states, preferring an honest result to a misleading match. The interface also had to preserve the document’s reading flow as those states changed.

Reviewers could scan and judge changes without leaving the document. Early monitoring showed that reviews finished faster and that people used the review workflow more often.

Real-time meeting UX and accessibility

Room calls lacked the accessible captions available on other clients, and their layouts needed to stay legible on different displays and as the call state changed.

I was technical lead for a four-engineer workstream. I built Workplace Rooms’ first captions experience, shaped the pre-call and in-call layouts, and led the meeting-UX part of the move from C++ to React Native.

Caption fragments changed before becoming final, so the interface assembled and revised them in real time. The C++ and React Native implementations also had to coexist during the migration.

Captions reached Meta’s global rooms, made meetings easier to follow and drew positive feedback. The migration also produced the first room call on the React Native foundation; later, my rendering and caching work achieved a double-digit reduction in frame latency.

Geospatial drawing platform

Property teams needed to draw, measure and annotate maps, but only had a hard-to-find radius tool or a heavyweight, site-specific workflow.

I led a four-engineer team through an initial release in roughly one quarter. I designed and built the PostGIS/Node.js storage and retrieval service and a framework-independent TypeScript library.

Interactive browser geometry had to work with tiled spatial queries. We prefetched beyond the visible map, cached results and invalidated only dirty tiles after edits. Early user testing also changed how text labels behaved at different zoom levels.

We shipped drawing, measurement, transformations and text incrementally rather than waiting for one large release. Property teams gained one coherent toolset, and the common spatial foundation was later reused across multiple products.

Where I’m strongest

  1. Product and interface engineering

    I build accessible interfaces for real-time, spatial and structured data.

  2. Full-stack and platform work

    I build browser and mobile products, along with the services, data and infrastructure they rely on.

  3. Developer experience

    I build the tools and shared foundations that help engineers develop, test, ship and operate software.

Most of my recent work has used TypeScript across React and Node.js, with GraphQL, Postgres and AWS.

Experience, in brief

  1. B2B software company

    Product engineer

    2025 to present

  2. Meta

    Senior Software Engineer

    2020 to 2025

  3. LandTech / LandInsight

    Lead Software Engineer

    2017 to 2020

  4. SG Digital / OpenBet

    Software Engineer

    2016 to 2017

  5. Torquing Robotics

    Software Developer

    2015

  6. Griffiths Waite

    Software Engineer

    2014 to 2015

Explore my experience

Start a conversation

If my experience fits the work your team is taking on, I’d be glad to talk.

I’m happy to share a full résumé and further project detail directly.