A small team, building
for the end of life
We’re death.tech, the engineering team at Octopus Legacy. We build the software behind wills, probate and later-life planning, and we build it alongside the people who use it: customers, our legal team, and the consultants who visit people at home. We’d rather ship something simple this week and improve it than wait for perfect.
Command: whoami
guest — curious engineer, probably. type `help`.
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
[5] product-owner product hybrid
Command: explain s.33
A gift to a child who died first usually passes
to their children. We model this. Carefully.
The law behind the code
Most of what we model comes from the Wills Act 1837 and the intestacy rules. They were written for lawyers and judges, so much of the work is pinning down cases the law leaves vague, and knowing when the software should hand over to a specialist. Below is a simplified example. A few of the terms we model:
- Hover or tap an underlined term to see the rule behind it
- The intestacy.py tab covers what happens when there’s no will
beneficiaryWills Act 1837 · s.15- Anyone the will leaves something to. One catch: if they, or their spouse or civil partner, witnessed the will, their gift fails.
predeceasedWills Act 1837 · s.33- If a gift is to a child who died first but left children of their own, it usually passes to those grandchildren instead — unless the will says otherwise.
residueFailed gifts- A gift that fails falls into the residue: whatever’s left once debts, costs and other gifts are paid. If the residue fails too, that part passes under the intestacy rules.
per_stirpesAdministration of Estates Act · s.47- If a child died first, their own children step into their place and share what that child would have had.
@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.beneficiaryHow we’re organised
We work in pods: small teams that each own one area, from the code to the on-call rota. People move between pods when the work needs them.
pod
Estate Planning
Wills, lasting powers of attorney and planning ahead. Helping people get their affairs in order while they can.
pod
Probate
Helping families deal with an estate after someone dies, and turning a pile of admin into steps they can get through.
pod
Web
Our websites, front-end foundations and the shared components every pod builds on.
pod · not public yet
Stealth Fintech Product
not public yet
A new product, built from scratch. We can’t say much yet, so ask us about it in your first call.
How we work
What a normal week looks like here, and what we expect of each other.
Small team, short feedback loops
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.
You own what you build
Each pod owns its area end to end: what to build, how to build it, shipping it and being on call for it. You’ll make real decisions early, and see them through.
Fast-paced, simple first
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.
Small changes, often
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.
Who you’d work with
Some of the team, in their own words. Hover or tap a photo. Swipe for more.
Meet the team
Hover over a photo, or tab to the photos and use the arrow keys, to see who they are, when they joined and the song they’d want at their funeral.
Use the arrow keys to move between people.
Small changes, shipped often
A few recent 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.
3a8d893feat(probate)Read VAT and copy counts from court fee statements1d ago, see the diff and its review3c936ebfeat(amendments)Let advisors assign a new will amendment case to themselves2d ago, see the diff and its review054a6f9fix(orders)Scroll long customer search results, and keep the dialog usable on short screens3d ago, see the diff and its reviewb64db27fix(customers)Make optimistic locking work: ETags follow the record version5d ago, see the diff and its reviewb1cb46ctest(appointments)Stop a travel-time mock failing the appointment API tests6d ago, see the diff and its review
Our stack
Python and FastAPI on AWS Lambda, Postgres, Next.js and Swift, all of it defined in Terraform. 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.
- python46%
- typescript28%
- php11% · shrinking
- hcl4%
- vue3%
- swift2%
- other6%
- adopt
- Python 3.12 · FastAPI · SQLAlchemy & Alembic · Next.js & React · Tailwind & shadcn/ui · Swift & SwiftUI · AWS Lambda · PostgreSQL · Terraform · GitHub Actions · uv · ruff & mypy · bun · pytest & Vitest · Playwright · Sentry · Bruno · Coding agents · Structured logs, no PII · Infrastructure as code, always
- trial
- Vercel AI SDK · Vercel · Supabase · AI code review · Stacked pull requests · Feature flags · LLM evals
- assess
- MCP servers
- hold
- PHP, Laravel & Vue · DigitalOcean Droplets · npm & pnpm
PHP, Laravel & Vue
Some older products still run on Laravel, with Vue on the front end. We look after them properly.
why it’s on hold
New services are written in Python and new front ends in Next.js. Laravel code moves when there’s a real reason to touch it, not for the sake of it.
Use the arrow keys to move between items, Home and End for the first and last.
PHP, Laravel & Vue: Some older products still run on Laravel, with Vue on the front end. We look after them properly.
languages & frameworks
- 01 Python 3.12, adopt
- 02 FastAPI, adopt
- 03 SQLAlchemy & Alembic, adopt
- 04 Next.js & React, adopt
- 05 Tailwind & shadcn/ui, adopt
- 06 Swift & SwiftUI, adopt
- 07 Vercel AI SDK, trial
- 08 PHP, Laravel & Vue (new work), hold
platforms
- 09 AWS Lambda, adopt
- 10 PostgreSQL, adopt
- 11 Terraform, adopt
- 12 GitHub Actions, adopt
- 13 Vercel, trial
- 14 Supabase, trial
- 15 MCP servers, assess
- 16 DigitalOcean Droplets, hold
tools
- 17 uv, adopt
- 18 ruff & mypy, adopt
- 19 bun, adopt
- 20 pytest & Vitest, adopt
- 21 Playwright, adopt
- 22 Sentry, adopt
- 23 Bruno, adopt
- 24 Coding agents, adopt
- 25 AI code review, trial
- 26 npm & pnpm, hold
techniques
- 27 Stacked pull requests, trial
- 28 Structured logs, no PII, adopt
- 29 Infrastructure as code, always, adopt
- 30 Feature flags, trial
- 31 LLM evals, trial
Open roles
Live from Greenhouse · press 1–5 to open
How hiring works
Four conversations, usually about two weeks from first call to offer. You’ll meet the people you’d be working with.
01 · 30 min
Intro call
A chat with the hiring manager about your experience and what you’re looking for. Bring questions.
02 · 30 min
Culture
A conversation with our People team about how we work and what you need from a team.
03 · 2 hours
Onsite
Whiteboard a system together, then build a small MVP of it. Using an AI agent is encouraged.
04 · 30 min
Final with the founder
A conversation with our founder about where the company is going. You’ll get a decision within 48 hours, with written feedback either way.
Not looking right now?
Leave your email and one of us will write when a role comes up that fits your experience. No newsletter.










