
featuredhow we work · team · 3 min read
Hello, world. We are death.tech
Every engineer’s first program says hello. This is ours, from the team that builds software for one of the few certainties in life.
Leehead of technology ·
We’d like to use PostHog to see how this site gets used, and Spotify to play the team’s funeral songs. Both set cookies, so they stay off until you allow them; everything else works without them. Privacy notice
We’re death.tech, the engineering team at Octopus Legacy. We don’t sell tools to lawyers. We build the service itself: a will that says what someone means, or probate handled when a family needs it. Software handles the rules, our specialists make the judgement calls, and every time the models improve, so does what families get.
Command: whoami
guest — curious engineer, probably.
Command: ls roles --open
[1] senior-software-engineer python hybrid
[2] software-engineer python hybrid
[3] design-engineer react hybrid
[4] engineering-manager people hybrid
Command: explain s.33
A gift to a child who died first usually passes
to their children. We model this. Carefully.
Most of what we model comes from the Wills Act 1837 and the intestacy rules. A lot of it is rules: complex, but rules, and software handles those well. The rest is judgement, and that stays with our legal specialists. As we learn, some of those calls turn out to be rules after all, and the line moves. We only move it when we’re sure. Below is a simplified example. Two rules we model, and two calls we leave to a specialist:
beneficiaryWills Act 1837 · s.15predeceasedWills Act 1837 · s.33capacity_in_doubtBanks v Goodfellow · 1870leaves_out_dependantInheritance Act 1975 · s.1@dataclass(frozen=True)class Gift: : Person share: Fraction : Person | None = Nonedef resolve(gift: Gift, : Estate) -> Recipient: # Beneficiary died before the will-maker. # Lapse? Pass to their children? It depends. if gift.beneficiary.(estate.): # TODO(you): s.33 Wills Act 1837 return gift.substitute or estate. return gift.beneficiaryWe work in pods: small, long-lived teams that each own a product area, from the first idea to production. Each one has a pod lead.
pod01
Wills, lasting powers of attorney and planning ahead. Helping people get their affairs in order while they can.
pod02
Helping families deal with an estate after someone dies, and turning a pile of admin into steps they can get through.
pod03
Our websites, front-end foundations and the shared components every pod builds on.
pod · not public yet
not public yet
A new product, built from scratch. We can’t say much yet, so ask us about it in your first call.
Agents take a lot of the typing. The job is the judgement: what to build, where the rules run out and when it’s right. Here’s what a normal week looks like, and what we expect of each other.
There aren’t many of us, so nothing sits in a queue. You’ll talk to the lawyers, advisors and consultants who use what you build, and hear how it’s going within days.
Each pod owns its area end to end: what to build, how to build it and when to ship it. You’ll make real decisions early, and see them through.
We’d rather put something simple in front of people this week than spend a month polishing the wrong thing. The legal rules get the care they need; everything around them can start rough and improve once we’ve seen it used.
Around 115 pull requests merged a week across the team, most of them small. Small changes are easier to review, easier to undo and quicker to learn from.
Agents work at every step of a change, from the spec to production, and you make the call at each one. You spend more of your day on the interesting problems.
You watch the problem with the probate team, then write the spec: what it does and the edge cases, with a test for each. Claude pokes holes in it until an agent could build from it without guessing.
You lay out the modules and name the tests. Claude Code or Cursor writes the first pass inside that structure, and you read it line by line. You know why the code is shaped that way, because you shaped it.
Greptile reads the pull request within minutes and flags what it finds. A teammate reads it next, for the things a model can’t weigh, and the teammate has the final say.
Front-end changes get a preview to try first. Merged changes reach production in minutes, 20+ times a day. Sentry and CloudWatch show how they’re doing, and if something you shipped throws errors, Claude reads the trace and drafts a fix. You decide whether it’s the right one.
01 · shapeClaude
You watch the problem with the probate team, then write the spec: what it does and the edge cases, with a test for each. Claude pokes holes in it until an agent could build from it without guessing.
02 · buildClaude CodeCursor
You lay out the modules and name the tests. Claude Code or Cursor writes the first pass inside that structure, and you read it line by line. You know why the code is shaped that way, because you shaped it.
03 · reviewGreptileGitHub
Greptile reads the pull request within minutes and flags what it finds. A teammate reads it next, for the things a model can’t weigh, and the teammate has the final say.
04 · shipVercelSentryClaude
Front-end changes get a preview to try first. Merged changes reach production in minutes, 20+ times a day. Sentry and CloudWatch show how they’re doing, and if something you shipped throws errors, Claude reads the trace and drafts a fix. You decide whether it’s the right one.
Some of the team, in their own words. Swipe for more.





Pick someone to meet them
Who they are, when they joined, why they’re here and the song they’d want at their funeral.
Arrow keys move between people and open their cards. Enter opens or closes one.
A few changes and the reviews that shaped them. Comments come from other engineers, an AI reviewer and the people who’ll use the change. Open one to see the diff and the conversation.
Illustrative, based on real changes
3a8d893feat(probate)Read VAT and copy counts from court fee statements, see the diff and its review3c936ebfeat(amendments)Let advisors assign a new will amendment case to themselves, see the diff and its review054a6f9fix(orders)Scroll long customer search results, and keep the dialog usable on short screens, see the diff and its reviewb64db27fix(customers)Make optimistic locking work: ETags follow the record version, see the diff and its reviewb1cb46ctest(appointments)Stop a travel-time mock failing the appointment API tests, see the diff and its reviewPython and FastAPI on AWS Lambda, PostgreSQL, Next.js and Swift. We define our cloud infrastructure in Terraform, and coding agents are part of everyday work. The radar shows what we’re adopting, what we’re trying and what we’re moving away from.
Our backend language. New services are Python, with types checked by mypy.
why it’s on adopt
One backend language keeps reviews and tooling simple, and it’s the natural home for anything involving data or LLMs.
Use the arrow keys to move between items, Home and End for the first and last.
What we learned building software for wills and probate, written by the people who built it.

featuredhow we work · team · 3 min read
Every engineer’s first program says hello. This is ours, from the team that builds software for one of the few certainties in life.
Leehead of technology ·
Now hiring
Four stages, about two weeks end to end. You’ll hear back within two working days of each one, whatever the outcome.
01 · 30 min · video
A relaxed conversation with the hiring manager about what you’ve worked on and what you’re looking for. Ask us anything.
02 · 30 min · video
A conversation about how you like to work, what you need from a team to do your best work, and the practical stuff: start dates, adjustments, anything you’re unsure about.
03 · ~2–2.5 hours · on site
04 · 45 min · video
Meet our founder. Talk about where Octopus Legacy is going, where you’d fit in it, and anything you still want to know. It runs both ways.
Leave your email and one of us will write when a role comes up that fits your experience. No newsletter.