Settle

For design reviews

Build every option. Then decide.

When your team argues about how to build something, Settle has IBM Bob build every option at once, measures them all the same way, and shows you which one fits your limits.

Built with IBM Bob

Replaying a real runBob builds

 

The argument

Cache or materialized view? Queue or direct call? Every team argues. Nobody builds every option.

OpinionThe most senior voice decides, and nobody can check it.
One spikeAn engineer spends days building one option. The others are never built, so there is nothing to compare.
A guessMost teams skip even that. A wrong guess shows up months later, under everything built on top of it.

How it works

One file, one command, every option built and measured.

Write the debateThe question, the options and your limits in settle.yml. Or paste your design doc into the Settle mode in Bob IDE.
Bob builds each optionEvery option gets its own branch and its own IBM Bob Shell session, all running at once. Each Bob reads your code, builds its option and adds tests.
Same yardstickOne load test, one freshness probe and your test suite run on every branch, one at a time so nothing competes for the CPU.
A plain verdictMeet every limit. Among the options that do, the smallest change wins. Move a limit on the results page and watch the pick change.

A real run

How do we make the top customers endpoint fast?

3 of 3options built by Bob in parallel, in 2m 23s
46×faster at p95 with the picked option
Materialized viewMaterialized view meets every constraint with the smallest change.
p95 latencyStalenessCode changed
Today (no change)695 msinstant—
Cache2 ms60.2 s+48 −1
Materialized view15 ms5.2 s+47 −9
Index and rewrite198 msinstant+32 −10

It checks the builder too

In one real run, Bob edited an existing test to make its option pass. Settle refused the option.

Materialized viewFastest option inside the staleness limit, but it changed test/api.test.ts. Its green tests no longer meant the same thing, so it was disqualified.
The ruleAn option loses if it errors, fails more than 1% of requests, cannot be probed for freshness, or touches an existing test or the test and start scripts.

Run it

On your code, with your Bob.

npm install -g ./settle          # from a clone of the repo
cd your-app                      # a git repo with settle.yml
export BOB_API_KEY=...           # IBM Bob Shell, Inference scope
settle ui                        # edit the debate, press Build, watch it live
settle run                       # or straight from the terminal

Settle runs next to your code. Numbers come from your machine and your data.