iri@bergen
~ % whoami
I build software that stays out of the way.
I’m Iri Halvorsen, a software engineer in Bergen. I make libraries, command-line tools and internal apps for small teams, and I write down what broke and how it got fixed.
profile.ts
export const iri = {
role: “Software engineer”,
based: “Bergen, Norway”,
focus: [“APIs”, “CLIs”, “sync”],
shipping: “Plumbline 2.4”,
status: “open to work, Jan 2027”,
}
$
npm i plumbline
38 kB
Based in
Bergen, Norway
Working since
2014
Open source
9 packages, 4.2M installs
Availability
From January 2027
TypeScript
/
Rust
/
Go
/
SQLite
/
Postgres
/
React
/
OpenAPI
/
Kotlin
/
Swift
/
Node
/
01 / ls ./work
Things I’ve built, and still maintain.
02 / how I work
Four habits that keep the code quiet.
None of them are clever. All of them are written down, so the next person can keep them going.
01
Read before writing
Twenty minutes with the history and the tests before the first edit. Most bugs were already explained by someone.
git log
$ git log --stat -n 3
a3f9c21 retry: cap total time, not attempts
7be04d8 client: add per-call timeout
c91e7fa docs: explain the backoff
02
Write the failing test
For a bug, the test comes first. If it does not fail, I have not found the bug yet.
retry.test.ts
test(“retries on 503”, async () => {
const res = await api.orders.get(“ord_88”)
expect(res.attempts).toBe(3)
})
03
Ship small
One idea per change, small enough to review over a coffee. Big changes wait in a branch until they are boring.
terminal
$ git push
1 file changed, 12 insertions(+), 2 deletions(-)
review requested from 1 person
04
Write it down
Every decision gets three lines: what, why, and what I would revisit. Future me is a stranger with a deadline.
CHANGELOG.md
## 2.4.0
- Retry policy is now one readable function
- Revisit: jitter range if servers get busier
03 / git log --oneline
Recently, in the log.
Small changes, honest messages. This is what a normal month looks like.
plumbline: retry policy now fits on one screen
quire: run the cable test in CI every night
tern: refuse to create a flag without an expiry date
lantern: table view for every chart
dovetail: 3.1, no change to the output
harbor-desk: hand the runbook to the night shift
plumbline: timeouts per call, not per client
notes: explain why the cable test exists
04 / wc -l
In numbers, all of them checked.
11
years of shipping software for other people
9
open-source packages I still maintain
4.2M
installs a month across those packages
2 days
the longest anyone waits for an answer to an issue
05 / ls ./writing
Notes on what broke.
06 / cat stack.toml
The tools I reach for.
[languages]
TypeScript
Rust
Go
SQL
[web]
React
Node
Plain CSS
Accessible HTML
[data]
Postgres
SQLite
Plain files
A good index
[habits]
Small commits
Written decisions
Boring deploys
No Friday releases
07 / history
Where I’ve worked, and what I left behind.
Independent software engineer
Self-employed
Building and maintaining open-source libraries, plus contract work on internal tools for small companies. Currently shipping Plumbline 2.4.
TypeScript, Rust, Postgres
Staff engineer, developer platform
Fjordline Systems
Led a team of six that owned build tooling, the API client and the design-token pipeline for 90 engineers. Cut the median build from 14 minutes to 3.
TypeScript, Go, Kubernetes
Senior engineer
Nettskap Labs
Built the sync layer for a mobile note-taking product used by 400,000 people. First time I met a conflict I could not merge, which led to Quire.
Kotlin, Swift, SQLite
Full-stack engineer
Kaldera Studio
Shipped websites and small web apps for museums, festivals and a ferry company. Learned to estimate by being wrong out loud.
Node, React, Postgres
Junior developer
Vestland University IT
Timetables, room bookings and the student portal. My first code review was a ten-page essay and I am still grateful for it.
PHP, JavaScript, MySQL
Open-source maintainer
Plumbline, Quire, Tern, Lantern, Dovetail
Nine packages, about 4.2 million installs a month, and a rule that every issue gets a human answer within two days.
Everything above
README.md
The best code I ever wrote is the code I got to delete.
08 / grep -r thanks
What people I’ve worked with say.
Iri’s pull requests read like short essays. You always know why a change exists before you read the code.
Marta Solheim
Engineering manager, Fjordline Systems
We asked for a support console and got one that our night shift stopped complaining about. That has never happened before.
Joakim Reinsnes
Operations lead, a port co-operative
Plumbline’s error messages are the best I have used. They tell you what to do next.
Devi Anand
Senior engineer, open-source user
Iri estimated three weeks, took three weeks, and left a handover document I still open every month.
Camille Ferrand
Founder, a design studio
The first colleague who said no to a feature and made us glad about it.
Tobias Lund
Product manager, Nettskap Labs
I learned more from one review by Iri than from a year of tutorials.
Ada Kwesi
Junior developer, mentored 2023
09 / whoami
A quiet engineer with loud opinions about error messages.
I grew up in a house full of radios and never stopped taking things apart. These days I take software apart, mostly to work out why it broke and how to make it break less.
Outside work: skiing, sourdough, and a second-hand synthesiser that only plays one note. I answer every email myself.

