How it works
GutCheck Matrix is for the small-to-medium decisions you keep circling. It asks a few
fast questions, times how long you take to answer, and shows you which option sits closest
to what you actually want — plus how far you should trust that answer.
The fast path
- Name your options. Two to four. Press Enter in a name to add another.
- Check what matters. Every decision starts with three criteria that fit anything:
Want it, Costs me and Regret. Keep them, rename them, or pick a category
— Travel, Buying, Weekend, Game night, Work — from the line under the criteria.
- Run the Gut Sprint. One question at a time: rate each option 1–5 on each
criterion. Go with your first instinct; the clock is running.
- Reveal. Three seconds of drama, then the verdict.
- Gut check. If it feels right, accept it. If it stings, say so, and tell it which
option you were secretly hoping for.
For a coffee order that is six taps. Nothing else is required —
every other control on the page is optional.
The arrows: which way is good
Each criterion has an arrow. ↑ more means a higher rating is better, like
Want it. ↓ less means a higher rating is worse, like Costs me, where a 5
means very expensive. Always rate how much of the thing an option has, and let the
arrow decide whether that is good or bad.
The app guesses the direction from the name; tap the arrow if it guesses wrong. Some
criteria genuinely depend on your mood — Pace in Game night treats fast as good by
default, so flip it on a night you want something slow.
Weights: what counts more
Low ×1, Med ×1.5 and High ×2 set how much each criterion counts.
Or choose Weigh what matters first before the sprint: the app shows two criteria at a
time and asks which matters more, and by how much. It works the weights out from your
answers and checks whether they contradict each other. It is optional — skip it and your
Low/Med/High settings stand.
Reading the verdict
- Close to ideal
- How near the winner is to a perfect option — one with the best score on every
criterion. 100% means it beats or ties the others on everything.
- Holds up
- The app re-runs the decision 2,000 times with every rating and weight nudged slightly,
and counts how often the same option still wins. Above 75% is solid. Below 60% is close to
a coin flip, and the verdict will tell you so.
- Inconsistency
- Shown only if you ran the weight duel. Under 10% means your priorities hang together.
Over 10% means that somewhere you said A beats B, B beats C, and C beats A.
The clock
Every snap call is timed. A stall only counts when it is longer than 2.5 seconds
and well beyond your own usual pace — 1.8× your median — so careful, deliberate
people are not penalised for being careful. If you stalled longest on an option that did
not win, the verdict points it out. That pause is often the real answer.
Everything else
- Surrender to Chaos — the same show with the maths inverted: it picks the
worst option. Useful for finding out how you would feel about losing.
- Quick Chaos — fills in random options and scores, for when you cannot even name
the choices.
- Adjust the grid by hand — change any rating directly after the sprint.
- Receipt of Destiny — a copyable record of the decision, or a downloadable stamp
image.
- Retro Mode, Sound, Voice of Fate — a dark theme, synthesised sound effects,
and a spoken countdown.
Keyboard
| Where | Key | Does |
| Anywhere | ? | Open this guide |
| Option name | Enter | Add another option |
| Weight duel | ← → | Pick the side that matters more |
| Weight duel | 1–5 | Equal, A bit more, Clearly more, Far more, No contest |
| Weight duel | Esc | Stop duelling — answers so far are kept, the rest count as equal |
| Gut Sprint | 1–5 | Answer the current question |
| Gut Sprint | ← | Back one |
| Gut Sprint | Esc | Stop early; unanswered ratings keep their current value |
| This guide | Esc | Close it |
Opening this guide in the middle of a sprint pauses the clock, so reading it never counts
as hesitating.
Your data
Everything you enter is kept in this browser’s local storage, on this device. There are
no accounts and no analytics, and nothing you type is sent anywhere — the only time it
leaves the page is if you press Share on the receipt. Reset Everything wipes it.
Why it exists
Most decision tools make you fill in a spreadsheet, and filling in a spreadsheet is the
opposite of listening to your gut. Pure gut feel has the reverse problem: it is fast but
unexamined, and it is easy to confuse what I want with what I am anxious about.
GutCheck Matrix sits between the two. It keeps the input fast and instinctive, then uses
established decision-analysis maths to show what those instincts add up to — and it treats
your reaction to the answer as evidence too. That is why the override exists: if the
verdict disappoints you, the disappointment is telling you something the numbers could not.
The matrix is the output, not the input. You never fill in a grid; the grid is what the
sprint leaves behind.
How it got here
An earlier version simply added up rating × weight. Because the app asks how
much of something an option has, a 5 on Cost counted as five points in favour, so
the expensive, exhausting option routinely won. The engine was rebuilt around criterion
direction and standard multi-criteria decision analysis methods to fix that properly.
The core algorithm
Ratings + direction→
Weights→
TOPSIS score→
Monte Carlo→
Verdict
1 · Direction: benefit or cost
Every criterion is either a benefit, where more is better, or a cost, where more
is worse. It is the simplest step and the most important one: get it wrong and every later
step optimises for exactly the wrong thing.
2 · TOPSIS: closeness to the ideal
TOPSIS — the Technique for Order of Preference by Similarity to Ideal Solution (Hwang
& Yoon, 1981) — scores each option by how close it is to an imaginary perfect option and
how far it is from an imaginary worst one.
1 normalise r_ij = x_ij / sqrt( sum_i x_ij^2 ) per criterion column
2 weight v_ij = w_j * r_ij weights sum to 1
3 ideal A+_j = best v_ij (max if benefit, min if cost)
A-_j = worst v_ij (min if benefit, max if cost)
4 distance d+_i = sqrt( sum_j (v_ij - A+_j)^2 )
d-_i = sqrt( sum_j (v_ij - A-_j)^2 )
5 closeness C_i = d-_i / ( d+_i + d-_i ) from 0 to 1
C is the Close to ideal number. A weighted sum only rewards what an option piles up;
TOPSIS also measures how far it is from the worst case, so one lopsided high score cannot
carry an option on its own.
A worked example, using the default criteria with equal weights:
| Option | Want it ↑ | Costs me ↓ |
Regret ↓ | d+ | d− |
Close to ideal |
| Cappuccino | 4 | 2 | 2 |
0.052 | 0.211 | 80% |
| Mocha | 5 | 4 | 4 |
0.211 | 0.052 | 20% |
Mocha wins Want it by one point but loses Costs me and Regret by two each,
so Cappuccino sits far nearer the ideal.
Two edge cases are handled explicitly. A criterion that every option scores identically
carries no information, so it is left out of the distances. And if nothing differs at all,
the app falls back to a plain direction-aware average rather than inventing a 100%.
3 · AHP: weights from pairwise duels
The optional weight duel uses the Analytic Hierarchy Process (Saaty, 1980). Each answer
fills one cell of a pairwise comparison matrix on Saaty’s 1–9 scale — Equal, A bit
more, Clearly more, Far more and No contest map to 1, 3, 5, 7 and 9 — with the reciprocal
in the mirrored cell.
weights w_i = gm_i / sum_k gm_k, gm_i = ( prod_j a_ij )^(1/n)
consistency CI = ( lambda_max - n ) / ( n - 1 )
CR = CI / RI RI: n=3 0.58 n=4 0.90 n=5 1.12
The geometric mean of each row closely approximates the matrix’s principal eigenvector,
which is Saaty’s own method, without needing a linear-algebra library. A consistency ratio
above 0.10 is Saaty’s threshold for judgements that contradict each other; that is the
Inconsistency figure. Comparisons you skip count as equal.
4 · Monte Carlo: does it hold up?
Borrowing the idea behind Stochastic Multicriteria Acceptability Analysis (Lahdelma,
Hokkanen & Salminen, 1998): after scoring, the app rebuilds the decision 2,000 times. In
each run every rating shifts by a random amount of up to ±1 (kept within 1–5) and every
weight is scaled by a random factor between 0.75 and 1.25. TOPSIS runs again and the winner
is recorded. Holds up is the share of runs in which your winner still wins.
It answers the question a single score cannot: had you been in a slightly different mood,
would the answer have changed?
5 · The behavioural layer
Alongside the maths, every snap call is timed. The slowest answer is flagged only when it
is over 2.5 seconds and more than 1.8× your own median, so the threshold adapts to how fast
you are. It feeds the roast banner, the verdict note and the gut-check list — as a prompt
to reflect, not a lie detector.
Honest limitations
- Criteria are assumed independent. If two criteria really measure the same thing
— say Costs me and Regret both come down to money — that concern is
counted twice.
- Ratings are coarse. 1–5 is an ordinal scale treated as though the gaps between
steps were equal.
- Rankings can shift when the option list changes. Normalisation and the ideal
points depend on which options are present, so adding or removing one can occasionally
swap two others. This is a known property of TOPSIS, called rank reversal.
- The robustness jitter is a heuristic. ±1 and ±25% are reasonable
defaults, not a measurement of your actual uncertainty.
- It will not decide for you. That is what the override is for.
Technical details
- One file
- A single HTML file of HTML, CSS and vanilla JavaScript. No framework, no dependencies,
no build step, no server.
- All the maths runs in your browser
- TOPSIS reruns on every rating change. The 2,000-run Monte Carlo takes a few
milliseconds on a laptop, runs once per reveal and is cached, so it never slows typing.
- Sound is synthesised, not recorded
- Every tick, chime, fanfare and record scratch is built live with the Web Audio API from
oscillators, filtered noise and volume envelopes. There are no audio files.
- Voice and images
- Voice of Fate uses the browser’s built-in Web Speech API where available. The receipt
image is drawn on a canvas and saved as a PNG.
- Storage
- One
localStorage key. Saves from older versions are migrated when they load
— criteria without a direction get one inferred from their name.
- Design
- An old-ticket palette in flat colours with no gradients. The perforated edges are drawn
with CSS masks on layers behind the text, so text is never masked, filtered or rotated
— which is what keeps it sharp. Bungee for display type, Karla for reading, Courier Prime
for the printed-ticket details.
- Accessibility
- Every text and background pair meets WCAG AA contrast in both themes, everything works
from the keyboard, and reduced-motion preferences are respected.
- Network
- The only outside requests are for the page itself and its web fonts from Google Fonts.
- Browsers
- Current Chrome, Edge, Firefox and Safari.
Further reading
- Hwang, C.-L. and Yoon, K. (1981). Multiple Attribute Decision Making: Methods and
Applications. Springer. — TOPSIS
- Saaty, T. L. (1980). The Analytic Hierarchy Process. McGraw-Hill. — AHP
- Lahdelma, R., Hokkanen, J. and Salminen, P. (1998). SMAA — Stochastic multiobjective
acceptability analysis. European Journal of Operational Research 106(1), 137–143.
Source code:
github.com/Karthikeyan-2001/gutcheck-matrix