I build payment systems. Checkout at 96 ms, was 840.

History of this headline

Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

I build payment systems. Checkout at 96 ms, was 840.

History of this headline

Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

I build payment systems. Checkout at 96 ms, was 840.

History of this headline

Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

About

About

I build payment systems and the tools around them. Twelve years in, I still measure before I change anything, and again after.

I build payment systems and the tools around them. Twelve years in, I still measure before I change anything, and again after.

A desk by a window at night: a lamp, a keyboard and one monitor, with city lights outside

I started in warehouse software in Dundee, moved to card payments in Glasgow, and have worked for myself from Leith since 2021. Most of my work sits between a database and a person waiting for it.

I started in warehouse software in Dundee, moved to card payments in Glasgow, and have worked for myself from Leith since 2021. Most of my work sits between a database and a person waiting for it.

I take two contracts a year and say no to the rest, which keeps the work careful. I write up what I learn, maintain one small open-source library, and answer email within a day.

I take two contracts a year and say no to the rest, which keeps the work careful. I write up what I learn, maintain one small open-source library, and answer email within a day.

Based in

Leith, Edinburgh

Working as

Independent since 2021

Taking on

Two contracts a year

Next free

January 2027

Built to hold at any width. Keep scrolling and this one folds down to a phone.

Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

Fernhill Pay

A payments ledger for 9,000 small shops. One codebase from the till to the back office.

Read the case study
Role
Lead engineer, interface and API
Year
2024
Built with
React, TypeScript, Go, Postgres
Result
Checkout at 96 ms, was 840

Built to hold at any width. Keep scrolling and this one folds down to a phone.

Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

Fernhill Pay

A payments ledger for 9,000 small shops. One codebase from the till to the back office.

Read the case study
Role
Lead engineer, interface and API
Year
2024
Built with
React, TypeScript, Go, Postgres
Result
Checkout at 96 ms, was 840

Built to hold at any width. Keep scrolling and this one folds down to a phone.

Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

Fernhill Pay

A payments ledger for 9,000 small shops. One codebase from the till to the back office.

Read the case study
Role
Lead engineer, interface and API
Year
2024
Built with
React, TypeScript, Go, Postgres
Result
Checkout at 96 ms, was 840

Selected work. What changed, line by line.

Fernhill Pay

Payments ledger

2024

Checkout, 95th percentile840 ms
Checkout, 95th percentile96 ms
Checkout, 95th percentile840 ms
Checkout, 95th percentile96 ms
Checkout, 95th percentile840 ms
Checkout, 95th percentile96 ms
Fernhill Pay settlements screen: a total settled today, a bar chart of volume by half hour and a table of payments

Harbourline

Route planning

2023

Fewer kilometres driven per parcel0%
Fewer kilometres driven per parcel31%
Fewer kilometres driven per parcel0%
Fewer kilometres driven per parcel31%
Fewer kilometres driven per parcel0%
Fewer kilometres driven per parcel31%
Harbourline route planner: three delivery runs drawn along a coastline, with a list of runs beside the map

Sandeel

Feature flags, open source

2022

From merge to live, behind a flag14 min
From merge to live, behind a flag11 s
From merge to live, behind a flag14 min
From merge to live, behind a flag11 s
From merge to live, behind a flag14 min
From merge to live, behind a flag11 s
Sandeel feature flags: a list of flags with switches and percentage roll-out bars

Stillwater

Observability

2021

Requests a day, on one pipeline0.6 bn
Requests a day, on one pipeline4.1 bn
Requests a day, on one pipeline0.6 bn
Requests a day, on one pipeline4.1 bn
Requests a day, on one pipeline0.6 bn
Requests a day, on one pipeline4.1 bn
Stillwater latency screen: an orange heat map of checkout latency over 24 hours, with four figures above it

Bawbee

Mobile banking

2021

Sessions that end without a crash98.1%
Sessions that end without a crash99.9%
Sessions that end without a crash98.1%
Sessions that end without a crash99.9%
Sessions that end without a crash98.1%
Sessions that end without a crash99.9%
Bawbee banking app: three phone screens showing a balance, spending by month and savings pots

Tidewatch

On-call scheduling

2019

Fewer pages after midnight0%
Fewer pages after midnight62%
Fewer pages after midnight0%
Fewer pages after midnight62%
Fewer pages after midnight0%
Fewer pages after midnight62%
Tidewatch on-call rota: a week grid with primary and secondary shifts for five people

Three ways to work with me. Each one branches off, does its job and merges back.

Writing

Writing

Kind words

Kind words

Mairi Campbell

Head of engineering, Fernhill

Approved

Idris took checkout from 840 to 96 milliseconds, then left us the dashboards to keep it there. We have not had to call him back, which I think was the point.

Tomasz Wilk

Operations lead, Harbourline

Approved

He asked for the numbers before he asked for the codebase. Three weeks later the vans were driving a third fewer kilometres.

Priya Raman

Chief technology officer, Tidewatch

Approved

The clearest written recommendation I have had from a contractor. We disagreed with half of it and still used all of it.

Have a number that needs moving? Tell me what it is today.

840 ms Where one client started: checkout, 95th percentile; 96 ms Where it sits now, ten weeks later.

Have a number that needs moving? Tell me what it is today.

840 ms Where one client started: checkout, 95th percentile; 96 ms Where it sits now, ten weeks later.

Have a number that needs moving? Tell me what it is today.

840 ms Where one client started: checkout, 95th percentile; 96 ms Where it sits now, ten weeks later.

Next free in January 2027. Send the number, where it is measured, and what it costs you. I reply within a day.

Next free in January 2027. Send the number, where it is measured, and what it costs you. I reply within a day.

Create a free website with Framer, the website builder loved by startups, designers and agencies.