What it is
You give The Tiebreaker a real dilemma — a career move, an architecture choice,
a financial decision — and it runs a structured evaluation instead of a
conversation:
- Dynamic weighted pros and cons, scored +1 to +5 and −1 to −5, recalculating
live as you add or adjust points
- A multi-factor criteria matrix comparing every option across weighted
criteria like financial ROI, reversibility, effort and peace of mind
- A SWOT quadrant separating internal strengths and weaknesses from external
opportunities and threats
- A verdict: a recommended option, a confidence score, an executive
rationale, and the single decisive factor that tipped it
The part that makes it useful
Anything that gives you a recommendation is also giving you a way to stop
thinking. So 3 features exist specifically to make the verdict harder to
accept uncritically:
The Devil’s Advocate. After the recommendation, the system argues against
its own winner. Not a disclaimer — an actual case for the other option, aimed
squarely at confirmation bias.
The 10-10-10 rule. Every option is evaluated at 3 time horizons: how you
will feel in 10 minutes, in 10 months, and in 10 years. Most bad decisions are
made by weighting one of those three at the expense of the others, and seeing
them side by side makes the trade explicit.
The blind spot detector. Surfaces assumptions the user has made without
stating them, and risks neither option accounts for.
There is also a what-if stress test — simulate a budget cut, a black swan,
a life pivot — to see whether the recommendation survives conditions the user
did not consider.
Why structured output mattered more than the prompt
A tool like this fails in a specific way: the model returns something shaped
slightly differently each time, the UI half-renders it, and the user loses
confidence in the analysis rather than the plumbing.
Using Gemini’s responseSchema with responseMimeType: "application/json"
enforces a type-safe contract on every response. The matrix always has the same
fields; the SWOT always has 4 quadrants; the verdict always has a confidence
number. Parsing bugs and shape drift both disappear, and the UI can be written
against a guarantee instead of a hope.
Staying up through rate limits
The backend routes through a model cascade — a fast lite model first, then a
stronger one, then a stable alias — with backoff logic, so a 503 or a rate limit
during a traffic spike rotates rather than fails. A decision tool that is
unavailable when you are stuck is not a decision tool.
Stack
React 19 and Express with Vite middleware in development and esbuild bundling
for production. @google/genai with strict structured outputs. Tailwind for the
interface. Local history persistence and one-click markdown export, so a
decision can be shared or filed rather than trapped in a browser tab.
What I learned
An opinionated framework beats a general assistant. The value is not that a
model can discuss your dilemma — it is that SWOT, 10-10-10 and a weighted matrix
turn unstructured anxiety into something with shape. The frameworks are the
product; the model is the engine.
Build the counter-argument into the output. A confident recommendation is
persuasive whether or not it is right. The Devil’s Advocate is there because I
did not trust the verdict, and neither should the user.
Schema enforcement is a UX feature. Every parsing failure the user never
sees is a moment they do not spend wondering whether the tool works.