How Gadfly works
What the product actually does, and — where it matters — what it does not do yet. Every number here is either read from your own data or checked against the code. If something on this page turns out to be untrue, that is a bug in the page.
Three ways to run one problem
Every problem can be opened three ways, and the difference is how much of the teacher is in the room. The problem does not change; the amount of help does.
- Solo — you alone. The teacher does not talk and does not listen. He picks a few slides for the board beforehand, and you page through them if you get stuck.
- Guided — a real conversation. He asks, argues, draws on the board and refuses to hand over the answer. This is the mode the rest of this page is about.
- Mock — an interviewer, not a tutor. Neutral, no teaching, no praise along the way; hints are off and you get a report at the end that you can argue with.
Guided and Mock open with a meeting card in the chat panel: the teacher and his credo, what this problem trains, your call before you start — alone or with help, and in how many minutes — and the rules of the mode. It shows on problems that have a place on the skill map, and it is read once: reload the page and the session simply goes on without it.
System design has the same three, and one extra: design it yourself, where the chat panel is gone entirely and only the board is left.
The phase timers you see are indicators, not limits. Nothing cuts you off when a phase runs over: the session moves to the next phase only when you press Next. A mock shows the overrun and keeps going, the way a real interviewer would notice the clock without ending the conversation mid-sentence.
How help is rationed
The complaint every AI tutor earns is that it hands you the answer the moment you hesitate. Here the depth of a hint is decided by rules, not by the model's mood: six steps, from an orienting question down to pseudocode, and “I’m stuck” moves you exactly one step — never two.
- 0 · orientation — a question that points at the right part of the problem.
- 1 · focus of attention — where to look, still without naming anything.
- 2 · pattern or analogy — the technique, or something shaped like it.
- 3 · structure — the shape of the solution.
- 4 · implementation detail — the part you were missing.
- 5 · pseudocode — almost the answer, and the last step there is.
The rationing has three settings: plain (the teacher answers as he sees fit), laddered (the six steps above) and laddered + course (the steps come from the written ladder for that problem).
What a session looks like
You can always tell whether you are being heard. One line in the session bar says where the conversation is, and it has exactly four values: listening · hearing you · speaking · your turn. Each one comes from an event the page actually receives from the voice engine running inside this browser tab. Thinking is not among them — the server sends no such event, so the pause before an answer is three quiet dots that go out on a timer after a few seconds, not a claim about what the teacher is doing.
Next to the line, five bars move with your actual microphone signal — the same audio frames that go to recognition, not an animation. While you speak, a dashed grey bubble captioned hearing you… shows the fast draft of what was recognised, and the accurate text takes its place. When the teacher speaks, a ring runs around his portrait for exactly as long as the utterance lasts. The same presence stands on all three tracks; the behavioral screen has no portrait, so there the reply being spoken is marked in the chat instead.
If voice drops mid-session, the screen says so. A red bar under the session bar names which piece went and why — the voice is not downloaded to this browser yet, the download failed, this browser cannot run it, the voice worker stopped answering, the recognition model did not load, or the browser took the microphone away — with the one button that fits: Download the voice, Reconnect or Reload. The bar waits a few seconds before appearing, so a worker restarting itself does not flash red, and it goes the moment voice is back. Two short tones — voice lost, voice back — are the only sounds the product makes: the bar appears exactly where you are not looking while you talk. The header outside a session says plain online, because outside a session there is no voice engine to observe.
The voice downloads once. About a gigabyte of speech models — voice activity, end of turn, recognition, the speaking voice — lands in this browser's private storage on the Voice step of the first run, or from the red bar in a session. While it downloads, a calm blue bar in the same place shows how far it is, and the session works in text meanwhile. The same bar tells you when this computer is too slow for the voice: nothing is switched silently.
Why a problem comes back
A solved problem is not finished. It comes back on a schedule, and how soon depends on how it went: a shaky solve returns tomorrow, then in three days, then in a week, then in two. A clean one skips straight to a week. Fail the review and the ladder resets to tomorrow.
Mistakes are tracked separately from problems. When the same class of error shows up, it opens a drill, and the drill closes only after 3 clean runs in a row. One good day does not close it. Those drills are the Kata screen: five-minute forms built from your own mistakes, not a library of somebody else's puzzles.
So an empty Due today is not a bug and not a gap in the plan — it means nothing has come due. A day off is part of the schedule.
The schedule lives with your plan, not with the grading: it keeps working for problems you added yourself, even though those cannot fill the skill map.
Two calendars, two places. The receipt at the end of a session says when the facets of the pattern come back — that is the skill map's own schedule. The problem itself repeats on the intervals above, and that date stands on the plan, not on the receipt.
The program for your target
Pick a company and a rung of its ladder, and Program answers one question: what is the minimum to get through that loop. Programs are written for 7 companies, each with its own ladder and its own lists per grade. Change the target and the page follows; ask for a company that has no program and the page says so and sends you to the catalogues rather than inventing a list.
The top of the page is the loop — the rounds you would actually sit, each with how many of them and how long they run: coding, system design, behavioral, and the domain deep dive where that company runs one. Rounds are filtered by grade, so a round that only starts a rung above yours is not drawn at yours.
Underneath are two lists: the coding problems for that grade and the system-design questions, each with a counter and a bar. Where a grade has no design round, the list is empty on purpose and says so — filling it with questions you will not be asked would cost you evenings. The counters read the same records as everywhere else: your attempts for problems, your design attempts for questions. Nothing on this page keeps a private idea of your progress, and you start a problem from here exactly as you do from any other list.
Where the markup comes from. It is a summary of public frequency datasets, question banks and candidate reports — not a list any company published. The page says that where you hover it, and it is worth taking literally.
The program is a checklist, not a queue. It picks nothing for tonight and schedules nothing: repeat dates come from the plan, and the plan works from how your sessions actually went. You can ignore the program for a week and nothing punishes you — the counter simply stays where it was. Two questions, two answers: what is due today is the plan; how much of this loop have I covered is the program.
The receipt, the diagnosis, and why you can trust them
On the algorithms track a session closes on your own 0 / 1 / 2, and the answer to it is a receipt, not a green “Recorded” line: turns in the conversation, hints taken and the deepest one, test runs and the last result (no cell at all when nothing ran), the times you named the invariant. Under the numbers, each facet of the pattern this session touched as before → after on the skill map's own scale — a facet with no past reads “— → 48”, not a zero from nowhere — and when those facets come back. A problem with no address on the map keeps the numbers and the next step and says so, instead of drawing facets it does not have. System design closes on the same 0 / 1 / 2 with a plain confirmation, and behavioral ends with its report: neither has a receipt.
Every session is written down as a journal of timestamped events: who spoke, what was said, when a hint was taken, when the code first ran. The diagnosis and the scorecard are computed by rules over that journal — the model does the talking, it does not do the grading. That is why every number can point back at the moment it came from.
You rate yourself first. The scorecard stays locked until you submit your own read of the session. This is deliberate: seeing the verdict first quietly rewrites your memory of what happened, and the gap between the two ratings is itself the thing worth measuring.
A session can end with no diagnosis at all. If nothing slipped, there is nothing to say — a tutor that finds a flaw every time is a tutor you stop believing. Silence is a result, not a missing feature.
What the skill map shows
One number per pattern and facet, from 0 to 100, built from sessions on the built-in catalogue. Red is where to stretch, green is what you can stand behind; a hatched tile means the number exists but the evidence behind it is thin, a grey dash means nothing has measured it. The three weakest addresses stand above the map with a button each — a suggestion, not an order; the plan keeps its own sequence.
The map also answers “did I grow?”, not only “where am I weak?”. A Trend column draws a line per pattern over the last 28 days: it opens at the level you carried into the window and ends at today's. A flat stretch is a level held, not a fall; a pattern with no session in the window gets no line at all and says so in words — a flat line there would look like a measurement that never happened. The corner figure on a tile (+4, −2, =, new) is the last move on that facet, drawn only where a session touched it. The sentence above the panels — “Since August 9: five patterns up, one down” — is counted from the same lines. On a phone the column is hidden.
Today adds as well. Come back and the line under the heading says what changed since your last visit: sessions, error classes closed, patterns that moved — “Two pointers 34 → 46”. The anchor is the last day you opened Today, remembered by this browser; a new browser has no anchor and draws no line, and nothing since last time means no line rather than “0 sessions”. Below the recommendation, a chalk block shows the last slip in your own words: the raw transcript, labelled as such, with its minute — never trimmed, because a cut sentence is no longer what you said.
The daily ceiling
Two caps, and neither of them locks you out.
- Minutes at the desk and sessions a day — soft. Gadfly says “that's enough for today” and leaves the decision to you. Locking a person out of their own preparation is not the product's call to make.
The ceiling is there for you, not for a meter. People quit preparation not because the problems are hard but because they run the counter for months and stop absorbing anything. Sleep is when the patterns settle — another problem tonight buys less than the first one tomorrow.
Where your data lives
Audio never leaves this machine. Recognition and the speaking voice both run inside this browser tab, so there is no upload to switch off: the page relays text, never audio. The speech models this involves, their authors and their licences are listed on the Third-party notices page.
The text of the conversation goes to the model provider whose key this installation is configured with, under that account. Nothing goes anywhere else.
Your plan, journal and repeats live in the database next to the app. An account exists for one reason: so they survive a new laptop. Without an account everything still works — it just stays on this machine.
The three tracks
Algorithms — the problems in your catalogue, grouped by pattern. You say the invariant before you type, and you walk your own code on an input before you run it.
System design — a board you both draw on. The teacher mirrors back what he heard you say, and the model answer stays locked until you commit to yours out loud.
Behavioral — your own stories, mapped to the competencies your target loop scores. Two states, never merged: covered means a session credited it,you say so means you tagged it and nothing has checked. Tagging your own stories is what every template on the internet already does, and it proves nothing — everyone is sure their story is about ownership until the direct question lands.
A behavioral session runs in five phases: the prompt, your story, the probes, the impact, the wrap-up. One gate is hard, and only one — the teacher will not move on until you have named a decision as yours. That is not strictness for its own sake: it is the single most common reason a strong story is scored as a weak one.
You choose which tracks the plan is built for, and you can change that any evening. A track you drop disappears from the sidebar and from the overview.
Problems you paste from your own list behave slightly differently, and it is better to know it upfront. They have no local tests, so there is no Run button on them — you check the solution on the site it came from, and the session verifies it the way an interview does: by walking your code on an example out loud. They also do not fill the skill map: it is built from the patterns of the built-in catalogue, and a foreign problem carries no pattern Gadfly can place. Repeats and drills work for them exactly the same.