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

    /

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.

a3f9c21

a3f9c21

plumbline: retry policy now fits on one screen

2 Sep

7be04d8

7be04d8

quire: run the cable test in CI every night

24 Aug

c91e7fa

c91e7fa

tern: refuse to create a flag without an expiry date

30 Jul

1d5a802

1d5a802

lantern: table view for every chart

11 Jul

f40b6e3

f40b6e3

dovetail: 3.1, no change to the output

19 Jun

92cc1a0

92cc1a0

harbor-desk: hand the runbook to the night shift

3 Jun

5e8d377

5e8d377

plumbline: timeouts per call, not per client

14 May

0ab4c66

0ab4c66

notes: explain why the cable test exists

2 May

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

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.

2024 to now

2024 to now

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

2020 to 2024

2020 to 2024

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

2018 to 2020

2018 to 2020

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

2016 to 2018

2016 to 2018

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

2014 to 2016

2014 to 2016

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

2015 to now

2015 to now

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.

A README file describing Iri Halvorsen in a code editor window

10 / mail iri

Have something that needs to work quietly?

$ subscribe --notes

New notes by email, when there are any. About one a month.

Iri Halvorsen

Software engineer

Bergen, Norway

Open to work from January 2027

Colophon

Set in Geist and Geist Mono

Built in Framer

No tracking, no cookie banner

buildlog_

© 2026 Iri Halvorsen. All demo work is fictional.

exit 0

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