Every codebase has deep water.

Isobath charts the code that is slow and risky to change, so your team can plan around it before it sinks a sprint.

Ports of call2,400 codebases charted, from seed stage to public companies.

  • Kestrel
  • moraine
  • Tallis&Co
  • HALYARD
  • ferrous
  • Quillon

Most teams navigate by memory.

Ask where the risky code is and you get folklore: a name, a warning, a shrug. Here is what one team said about three modules, next to what Isobath measured.

  1. auth/Here be dragons.

    12.0 mMuch safer than its reputation

  2. payouts/Probably fine?

    29.8 m0.2 m short of the redline

  3. ledger/Ask Priya first.

    41.3 mThe deepest water, and one owner

On a scale of 0 to 50 metres with a redline at 30: the team calls auth "here be dragons", but it measures 12.0 metres. Payouts is "probably fine", but measures 29.8 metres, just short of the redline. Ledger is "ask Priya first", and measures 41.3 metres with one owner, the deepest module.

Every module, sounded.

Isobath drops a line into every part of your code and measures how deep it goes. Depth is the cost of changing that code safely.

Sheet 1 of 4 · Soundings Line marked every 10 m Weight: commits in 90 days Redline: review below 30 m

Five signals. One number.

Why does ledger/ read 41.3 m? Depth is a weighted blend of what your repository already records. Hover a signal to follow it.

Sheet 2 of 4 · Formula Weights are tuned for each repository and printed in every report.

Read it like a chart.

Six symbols carry everything Isobath knows about your code. Here they are one at a time, all on ledger/, the deepest water in kestrel/platform.

  1. 01

    Isobaths

    Lines of equal depth, like contours on a hiking map. The closer they bunch, the faster the code gets risky. Inside the red 30 m line, every change needs a careful review.

  2. 02

    Soundings

    The measured depth of a single file, printed where it sits. 387 means ledger/entries.ts is 38.7 m deep.

  3. 03

    Hazards

    Code tied to recent incidents. ledger/ caused two in the last 90 days, so it stays marked until the fix ships.

  4. 04

    Currents

    Knowledge that runs through one person. Every change to ledger/ flows through Priya: your bus factor, on the map.

  5. 05

    Courses

    A planned refactor, drawn as a route around the deep water: six pull requests to bring ledger/ up to 25 m.

  6. 06

    Notices

    What moved since last week. ledger/ went 3.1 m deeper, so Monday's notice flags it.

Every pull request, in section.

Cut the chart along the files a change touches and you get its section. Isobath draws one for every pull request and redlines the deep water before review starts.

  1. api/payouts.ts9.4 m
  2. payouts/retry.ts26.4 m
  3. ledger/entries.ts43.1 m
  4. ledger/balance.ts38.6 m
  5. notify/email.ts7.9 m

Revision 1. Two files sit below 30 m. Review with Priya Raman, who wrote 71% of ledger/.

The chart comes to where you work.

Follow one change to ledger/ through a week. The same depth turns up in Slack, in planning, in your editor and in review.

  1. Mon 09:00 · Notice

    In Slack

    A weekly notice of what moved. This week ledger/ got 3.1 m deeper and a new hazard appeared.

    #eng-platform

    Isobath App

    Notice 41 · kestrel/platform

    • ledger/+3.1 mdeeper
    • auth/−4.0 msafer
    • payouts/retry.tshazardnew
  2. Mon 11:30 · Course

    In planning

    Set a course that steers around the deep water, then watch the depth fall with each pull request.

    Course · ledger/6 PRs · 9 weeks
    41.3 m todayTarget 25 m
    1. Split reconcile.ts
    2. Tests around fx.ts
    3. Second owner for balance.ts
  3. Wed 15:10 · Editor

    In your editor

    Depth in the gutter while you type, so you know you are over deep water before you change a line.

    ledger/entries.ts43.1 m
    1. export function post(entry: Entry) {
    2. const fx = rateFor(entry.currency)
    3. if (entry.reversal) {
    4. return reverse(entry, fx)
    5. }
    6. const balance = reconcile(entry, fx)
    7. emit('ledger.posted', balance)
    8. }

    reconcile()

    43.1 m · 2 incidents · 1 owner

    Isobath · last changed 3 days ago

  4. Thu 10:02 · Review

    In review

    A depth check on every pull request, and the reviewer who knows that water.

    OpenRetry failed payouts#8812
    • buildPassed in 2m 14s
    • test418 passed
    • isobath / depthDeep water: 2 files below 30 m

    Suggested reviewer Priya Raman
    wrote 71% of ledger/

Every day · Your CI

Your source never leaves your CI.

Everything above is drawn from a runner that reads code where it already lives. Only depth scores cross the boundary.

  • SOC 2 Type II
  • SSO and SCIM
  • EU or US hosting
  • Read-only access
  • Hashed paths
Your CI
Repositorykestrel/platform
Isobath runnerparses, scores
scores only
Isobath cloudcharts, checks, notices
Source code moves only between your repository and the runner inside your CI. Code that reaches the boundary stays inside. Only numeric depth scores pass through to Isobath cloud.

Teams that charted their deep water.

“We always knew ledger was painful. Isobath showed us exactly where, and then showed the board it was getting better.”

Hannah LoweVP Engineering, Kestrel ledger/47.0 → 18.2 m
  1. Entry 11203 Feb 2026moraine/core

    “We stopped arguing about which refactor matters most. The chart settles it in one screen.”

    Oskar LindHead of Engineering, Moraine

    sync/33.4 → 21.0 m

  2. Entry 08721 Nov 2025tallis/api

    “Our auditors asked which code touches card data and how risky it is. I sent them the chart.”

    Nadia FaroukSecurity Lead, Tallis&Co

    payments/28.9 → 19.5 m

  3. Entry 06402 Sep 2025halyard/mono

    “New engineers read the chart on day one. They know where to be careful before anyone has to tell them.”

    Wen LiuStaff Engineer, Halyard

    core/36.2 → 22.9 m

  4. Entry 04114 Jun 2025ferrous/platform

    “Depth checks caught two risky merges in the first week. Both touched code with a single owner.”

    Mateo RuizPlatform Lead, Ferrous

    platform/31.7 → 20.4 m

  5. Entry 02930 Mar 2025quillon/app

    “We put the depth chart in our board deck. It was the first tech debt slide anyone understood.”

    Amara OkoyeCTO, Quillon

    billing/39.1 → 24.7 m

Notes on measuring code.

Field notes from the team, and from the teams who chart with us.

Priced by the people who commit.

Managers, designers and anyone who only reads the chart are free.

60

Coastal

$1,080per month

60 engineers × $18, billed yearly

  • Unlimited repositories
  • Depth checks on pull requests
  • Courses and weekly notices
  • Slack, SSO and audit log
Start a 30-day trial

Before you connect a repository.

Does Isobath read our source code?

The runner parses your code inside your own CI to build syntax trees and the import graph. Only file paths and numeric scores are sent to Isobath, and paths can be hashed.

Which languages are supported?

TypeScript, JavaScript, Python, Go, Java, Kotlin, Ruby, PHP, C# and Rust. Other languages still get depth from history, ownership and incidents.

How long until the first chart?

Usually under 20 minutes for a repository with a few years of history. The chart then updates on every merge to your main branch.

Can a team game its depth?

Depth blends five signals, so pushing one in isolation barely moves it. Simpler, tested code that more than one person understands does.

Do you support monorepos?

Yes. Charts can be split by package, by service or by the teams in your CODEOWNERS file.

Take your first sounding.

Type a repository name to see what its chart could look like. Connect GitHub or GitLab for the real one.

Illustrative preview, generated from the name.