The product lifecycle, read from the code

Every feature starts with three weeks of reading code.

Nobody can scope, estimate or review anything until someone works out what the system already does. ByteBell answers that from the code in minutes, with the file and the line attached.

First 1,000 files indexed free · read only access · runs on your own servers if you need it to
What a feature actually costs

The three weeks nobody puts on the roadmap.

Where a nine week feature actually goes
reported by engineering teams on Blind and r/ExperiencedDevs
W1
Scoping
W2
Design doc
W3
Comments
W4
Coding
W5
Coding
W6
Surprises
W7
New scope
W8
Rollout
W9
Shipped
3 weeks

spent working out what the system already does, before any code gets written.

2 to 3 times

the estimate they gave at the start, which is where teams report finishing.

plus 40%

extra scope found mid project, where a list of 120 items finished at about 170.

Sources: engineer estimate threads on Blind and r/ExperiencedDevs; “Tackling the Big, Impossible Project”, Michele Titolo, Capital One.
How it works

We read the codebase once, and everything else reads that.

One indexing pass, then every question is a lookup
figures from a single traced run
20 min

To scope a feature.

32 files

Across four repositories, in one answer.

4m 9s

To trace a change end to end.

$0.89

That run, against about $30 without it.

01 · Read once, not on every question

Cheap open source models read every file in your repositories, one time, at indexing.

02 · Turn the code into one layer

Intent, contracts and cross repository dependencies, written in plain English with the file and line kept.

03 · Serve it to every tool at once

The extension in VS Code, plus Cursor, Claude Code and Windsurf over MCP.

04 · Check every change against it

What an agent writes gets compared to what the code promised, before it merges.

Six stages, six screens

The whole product lifecycle, answered from the running code.

Six places a release loses time, and what each one looks like inside the extension.

Find out whether it already exists.

Teams rebuild things they already have. The code is usually there, behind a flag or in a closed pull request, and the person who knew about it has left. ByteBell checks the code, the pull requests and the docs before you spend a sprint on it.

“They may not be aware that the documentation exists in some cases.”
on wikis going stale, CodeX
WHAT PRODUCT GETS An answer in the first meeting, instead of a week of asking three engineers what already exists.
WHAT ENGINEERING GETS The flag state, the closed pull request and the wiki page that stopped being true, all in one place.
BYTEBELL
ByteBell
GROUNDED CHAT
SPEC
CROSS REPO
TESTS
CODE GEN
PR REVIEW
Do we already support bulk export of saved filters?
3 MATCHES IN THIS WORKSPACE
exports/csvWorker.ts SHIPPED
Full worker, queue and retry path already in production. Gated by bulk_export_v2, which has been off in every environment since March.
PR #2841 CLOSED
The interface for the same feature, abandoned after review, because two reviewers flagged the pagination limits.
docs/exports.mdx STALE
Describes a limit on CSV only exports that the code stopped enforcing eleven commits ago.
Verdict. Roughly 70 percent of this is already built. What is left is the interface and the pagination question that stopped PR #2841, and not the export engine itself.

The estimate starts from a file list.

Scoping happens in meetings because nobody in the room has the files open. Cross repository analysis gives you the list instead: every file the change touches, across every repository you have indexed, the team that owns each one, and the decisions it will not guess at.

“People don’t suck at estimates. They suck at scoping the work.”
TPM, Blind estimates thread
WHAT PRODUCT GETS A defensible estimate on the day of the request, with the owning teams named on it.
WHAT ENGINEERING GETS Cross repository impact that a static analyser cannot see, because it reads intent and not only symbols.
BYTEBELL
ByteBell
GROUNDED CHAT
SPEC
CROSS REPO
TESTS
CODE GEN
PR REVIEW
If we change the shape of the writer contract, which files have to change with it?
32
IMPACTED FILES
4 of 15
KNOWLEDGE BASES
3
TEAMS INVOLVED
4m 9s
TIME TO ANSWER
BREAKING CHANGE CURRENT BEHAVIOUR AND CHANGED BEHAVIOUR, SIDE BY SIDE
api/filters/schema.ts Platform SHARED
exports/csvWorker.ts Data WILL BREAK
reporting/queryBuilder.ts Reporting NEEDS REVIEW
web/SavedFilterBar.tsx Growth NEW WORK
billing/usageMeter.go Billing ASK FIRST
Two things ByteBell will not guess
Whether exports should count against the metered plan, and whether row limits are enforced for each workspace separately.

Read your own system in plain English.

Most people will not read code to find out what it does. So ByteBell writes it out in plain English, file by file, with the line number on every claim. A product manager can read a service without opening an editor. An engineer can check any line of it in ten seconds.

“Lacking documentation can inflate a feature’s scope.”
CodeX, on wikis vs. repositories
WHAT PRODUCT GETS The behaviour of any service in language you can put straight into a requirements document.
WHAT ENGINEERING GETS A specification derived from the running code, so review argues about decisions instead of correcting the document.
BYTEBELL
ByteBell
GROUNDED CHAT
SPEC
CROSS REPO
TESTS
CODE GEN
PR REVIEW
zustand / src / traditional.ts
TYPESCRIPT · 2565 BYTES · 3 UNITS · 3 IMPORTS
SUMMARY

This module adapts the vanilla store interface to React. It exposes one overloaded hook for the whole store or a selected slice, a bound store type, and a factory that supports default equality functions traditional.ts:1.

BUSINESS CONTEXT

It supports reactive state management inside React applications. If it fails, components stop subscribing efficiently to shared state, and users see stale or excessive renders traditional.ts:22.

SYSTEM CAPABILITIES
SUBSCRIBE TO EXTERNAL STORES SELECT SLICES WITH CUSTOM EQUALITY PRESERVE IMPERATIVE ACCESS
EDGE CASES

Identity is used as the default selector and the complete store state comes back. Undefined passes through the hook, or the factory applies its own default equality function traditional.ts:41.

Potential code break
Which equality function applies when neither a per call nor a default one is supplied, because that decides the equality semantics.
CODE UNITS · 3
useStoreWithEqualityFn — hook
createWithEqualityFnImpl — factory, 15 lines
createWithEqualityFn — public export
Contracts provided · 4. Preconditions: createState is a valid StateCreator. Called by one caller in this workspace, and calls one downstream unit.

Your agents write against the real contracts.

An agent without this layer reads whatever files it can reach and guesses at the rest. That is where the wrong code comes from. With the layer connected, it writes against the contracts your repositories already have, which is where the accuracy above 93 percent comes from. You keep your own keys and your own choice of model.

Outsiders estimating a system they haven’t read “assume that the system they are dealing with has zero technical debt.”
Remote Manager, on the surprise factor
WHAT PRODUCT GETS Work that lands in the sprint it was planned for, because the surprises were found before it started.
WHAT ENGINEERING GETS Generated code that respects the contracts your system already depends on, at roughly 80 percent less token spend.
BYTEBELL
ByteBell
GROUNDED CHAT
SPEC
CROSS REPO
TESTS
CODE GEN
PR REVIEW
Add a nullable canceled_at field to the subscription model, and stop counting cancelled subscriptions in monthly revenue.
GROUNDED BEFORE A LINE IS WRITTEN
billing/mrr.go:212 CONTRACT FOUND
Monthly revenue is summed from active subscriptions only, and the definition of active already lives here rather than in the API layer.
api/subscriptions/schema.ts:64 SHARED SHAPE
The subscription shape is read by the reporting service as well, so a new field changes both surfaces at once.
mobile/SubscriptionCard.kt OTHER TEAM
Mobile decodes the same payload strictly, so an unknown field there fails the parse unless it is added deliberately.
Written against three real contracts, not against a guess. The change lands in four files, and the fourth is the one an agent working without the layer would have missed.

Nothing merges until it has been checked.

ByteBell traces what the change touches, writes tests for it, runs them, and then reviews each changed file against what that file promised before the change. Your senior engineers read the problems instead of the whole diff. The run below cost eleven cents.

“latest push of his to our main branch breaks some other features that were dependent on that messaging”
engineer, Blind
WHAT PRODUCT GETS Fewer weeks lost to bug fixing that was never in the plan for that sprint.
WHAT ENGINEERING GETS Review by exception, with tests that prove the break instead of describing it.
BYTEBELL
ByteBell
GROUNDED CHAT
SPEC
CROSS REPO
TESTS
CODE GEN
PR REVIEW
GENERATE AND RUN BY TYPE
Smoke Is it alive at all
Unit Values, edges, degenerate input
Functional A whole handler end to end
Regression Red before the fix, green after
End to end A full user journey
7 total tests · packages/db/src/deferred.test.ts 7 PASSED · 0 FAILED
THEN THE REVIEW
packages/system/src/filter.ts MODIFIED
Reviewed against what this file promised at the indexed base, and not only against what the diff says it changed.
packages/system/src/utils.ts MODIFIED
Collateral damage checked across the other repositories that read this helper, before anyone approves it.
87,001 tokens, $0.1133 for the run. Two files generated, seven tests passed, nothing changed without a test behind it.

The notes get written from what actually merged.

Release notes get written from tickets, so they do not match what shipped. The wiki drifts out of date one commit at a time, and the next feature gets scoped from a document that is wrong. ByteBell writes the notes from the merged pull requests and flags the pages that are now untrue.

“Developers work in code repositories, not Confluence. Unless they update documentation on every change, a single user story could make it stale.”
CodeX
WHAT PRODUCT GETS Notes that describe the release rather than the plan for it, on the day it goes out.
WHAT ENGINEERING GETS The pages the release just made untrue, listed with the reason, before the next feature is scoped from one.
BYTEBELL
ByteBell
GROUNDED CHAT
SPEC
CROSS REPO
TESTS
CODE GEN
PR REVIEW
RELEASE 2026.8.1 · WRITTEN FROM 9 MERGED PULL REQUESTS
Saved filters can now be exported in bulk, up to 50,000 rows for each job. PR #3040
Failed exports now show a retry state instead of disappearing quietly. PR #3051
Filter schema gained an exportFormat field. Reporting API consumers should redeploy.
3 pages now contradict the code
docs/exports.mdx CSV-only limit
Confluence / Reporting API Old schema
support/macros/export-fail Says silent failure
OPEN SUGGESTED EDITS
From the newest person on the team

Nobody taught me how to read a codebase. I was expected to already know.

The hard part of my first year has not been writing code. It is reading two hundred thousand lines of somebody else’s.

01 / Day one
My first ticket was inside a 2,000-line file.

I read it for two days and still could not say whether changing line 400 breaks checkout. Nobody sat me down and taught me how to do this. It was assumed I arrived knowing.

02 / The fifth question
I stopped asking, because asking started to feel like admitting.

The first four questions of the day are fine. The fifth one I swallow and guess instead, and the guess is what ends up in my PR. Nobody is keeping count. It feels like somebody is.

03 / git blame
The commit message said “fix”. The author left two years ago.

The actual reason is in a PR thread, a review comment and a ticket nobody linked. The diff tells me what changed. It has never once told me why.

04 / The wiki
The doc said one thing. The code did another.

I usually find out which one is true in review, in front of everybody. The page stopped being true eleven commits ago and nothing about it says so.

05 / Pattern matching
I copied the file next to mine. It was the deprecated one.

Three implementations exist. One is live, one sits behind a flag that never turned on, one is waiting to be deleted. Nothing in the repository marks which is which.

06 / The AI answer
It sounds confident. I can’t tell whether it’s right.

Checking the answer needs exactly the knowledge I was asking for. So I either trust it, or I go and read the code, which is the thing I was trying to avoid.

Nine weeks of work, three of them spent finding out what we had already built.

So we built it

We got tired of it and built one index over our own code.

Every answer carries the file and the line it came from, so checking it takes ten seconds instead of trust. We point it at our own repositories first.

ByteBell demo — Blast Radius explained Play the demo: Why AI coding agents keep breaking production
Why AI coding agents keep breaking production · Blast Radius explained

“Scoping used to be three weeks of meetings. Now the first meeting starts from a file list, and we argue about the two decisions that actually matter.”

SA
Sofia Almeida
Director of Engineering, marketplace
What we would want to know before booking anything
so the call can be about your repository instead of ours
Freshness

The index updates on every commit. An answer reflects the branch as it stands right now, not last night's snapshot, which is the whole reason we trust it over our wiki.

Languages

Every language in common use. The gaps are the genuinely new and genuinely rare ones. Mojo, for example, is not supported yet.

Models

Bring your own key. Anthropic, OpenAI Codex, Gemini, DeepSeek, Qwen, Z.ai, or anything reachable through OpenRouter. Your keys, your spend, your choice of model per workspace.

Deployment

Hosted, on dedicated hardware, or fully on-premise inside your own network. On the second two, your source never leaves your infrastructure. Access is read-only in all three.

Pricing

Index a thousand files before you decide anything.

Same index, same citations, same MCP connection on every plan. What changes is how many files it holds and whose hardware it runs on.

Free
1,000files indexed

Enough for a service or a mid-sized repository. No card, and no feature held back.

  • Every answer cited to a file and a line
  • MCP connection to Cursor, Claude Code and Windsurf
  • Your own model keys
On-premise
Dedicatedhardware or your own

Runs inside your network. The index, the models you point it at, and your source all stay on infrastructure you control.

  • Dedicated hardware or fully on-premise
  • Anthropic, Gemini, Codex, DeepSeek, Qwen, Z.ai, OpenRouter
  • Scoped to your repository count, not per seat