Friday, August 21, 2026

PARTH GODA

AI · MBA Life · Music


GTM Engineering#building#product#case-interviews#side-projects#shipping

From a Page on My Site to a Product: Building Caselogg in 48 Hours

I built a case interview log for myself on a Sunday. By Tuesday it was a real product on its own domain. Here is what changed in between, including the moment I realised I had been asking the wrong person to do the work.

Parth Goda··12 min read·AI-assisted draft

The Number That Lies to You

Every case interview ends with a number. "That was about a seven." You write it in a notebook, you feel briefly good or briefly bad, and you move on.

The problem is that the number is an average, and averages are excellent liars. A seven out of ten can be a five in structure and a nine in presence. It can be a nine in structure and a three in maths. Those are completely different problems needing completely different weeks of practice, and the seven tells you nothing about which one you have.

So I started scoring five things separately: structure, maths, insight, synthesis, presence. Not because five is a magic number, but because those are the five things that actually appear on a partner's feedback sheet. Keeping them apart means a three cannot hide behind a nine.

That was the whole idea. Everything below is what it took to turn it into something other people could use.

The Friend Who Asked First

None of this exists without Melvin.

He asked me to case him, and he sent his case log over with the request, the way you do, so I could see what he had been drilling and where he wanted the pressure. Then he asked for mine. I did not have one. Not a thin one, not a neglected one. None. I had been practising for weeks and had recorded almost none of it.

So I opened his log properly, planning to copy the format and backfill my own that evening. That is where the real problem showed itself. Reconstructing a case from memory is slow, and the parts most worth recording are precisely the parts that fade first. Every field wanted a detail I could no longer state honestly. An hour in I had three entries, two of them guesses.

The reason people do not keep a case log is not discipline. It is that the log costs more than the case did.

That is a build.

Sunday: A Page on My Own Website

The first version was a single page bolted onto this site. One user, me. A four digit code to stop a passing stranger scribbling on it. No accounts, no sharing, no settings.

Two things about that weekend version turned out to matter enormously.

The dashboard sorted my weaknesses to the top. Not alphabetically, not strongest first. Worst first, because the useful question is never "how am I doing." It is "what do I drill this week," and the answer is always at the top of a list sorted the wrong way round.

I added a link I could send to whoever had just cased me. They filled in a form, and their scores landed in my log. That link is where the project got genuinely interesting, and where it later broke in the most instructive way.

Monday: Deciding to Make It a Product

The single user version worked, and then a friend asked if they could use it.

That is a bigger question than it sounds. Everything about the weekend version assumed one person down to its bones. There is no setting you flip to turn that into something other people can trust with their practice.

I made four calls before writing anything, and I would defend all four:

Its own domain and its own home. Not a folder on my blog. A tool other people rely on should not go down because I made a typo in a blog post.

Sign in with Google, one button, no passwords. Nobody wants another password, and I did not want to be the person doing incident response on a side project because I chose to store some.

Private by default, public only if you choose. My own log was public because I decided that for myself. That decision does not transfer. Someone logging a bad maths score under their real name must not turn up in Google because I picked the wrong default for them.

Build the privacy rules into the foundation, not the surface. In a tool with more than one user, the worst possible failure is showing one person another person's candid feedback about themselves. Not embarrassing. Genuinely harmful, and impossible to take back. So separation between users is enforced at the deepest level of the system rather than by me remembering to be careful in every single place. My own care is the second lock, not the first.

The Question That Changed Everything

The first working version asked the caser to describe the case, score it, and write the feedback. It worked. It was also completely wrong, and it took me a full day to see why.

Think about the moment a case ends. One person has just spent forty minutes being interrogated, has every detail fresh, and has every reason to write it down. The other person has just done you a favour for forty minutes and would quite like their evening back.

I had handed the form to the second person.

That is why case feedback never arrives. Not because people are unhelpful. Because the ask is too big.

So the whole thing inverted. The person who took the case does the writing, because they were going to write it down anyway. The person who ran it is asked for the one thing only they can give: a number, seven times, and one line of comment.

The best part is what that deleted. An earlier version let anyone log a case against your public username, which created an obvious spam problem, which needed a queue where you approved or rejected submissions. All of that machinery was well built and well tested. Once the only way in was a link you generated and sent yourself, there was no spam problem left to solve, so the queue went in the bin. A product insight that removes code rather than adding it is my favourite kind.

What the Caser Actually Does

The five dimensions I started with are good for judging a performance afterwards. They are not how a case is experienced, which is as a sequence.

So the caser scores seven moments in the order they happen: your reaction to the prompt, your clarifying questions, your framework, the charts and exhibits, the maths, the brainstorm, and the recommendation.

Both sets are kept, because they measure different things. How it felt against how it looked. The gap between the two turned out to be the most interesting number in the whole product. The dashboard can now tell you something like "you rate yourself 1.4 points higher than your casers do." That sentence was impossible before, and it is probably the most useful thing the tool says to anyone.

The last piece was time. Several phases get a stopwatch, run by the caser rather than the candidate, for a reason that is obvious once you say it aloud: you cannot watch a clock and think at the same time. Each phase is recorded against a target, because "2:40 against a 2:00 target" is something you can drill and "about three minutes" is not.

The First Person to Use It

I finished on Tuesday evening and tested it that night with Melvin, which was the only fair outcome given he started it. He broke three things in one sitting.

Charts needed their own clock. I had given exhibits a slot among the seven moments but nothing else. Melvin pointed out that reading a chart is where candidates most visibly stall, and that a score with no time beside it cannot tell you whether the read was wrong or merely slow. That distinction is the entire point of drilling it, so the exhibit got a stopwatch of its own.

He finished his feedback, pressed enter, and it vanished. The form did not treat the enter key as a submission, so the page quietly discarded five minutes of his work without a word of warning. The worst kind of bug: silent, and it punishes exactly the person doing you a favour.

Then I broke his case while trying to fix mine. To reproduce the problem I started a case for Melvin, jumped the gun, typed obvious placeholder text into every field and submitted it to see whether anything saved. It saved perfectly. Then we ran the real case, and I could not overwrite it. Submitted meant final. I had made entries permanent so a caser could not quietly rewrite history, and had not noticed that it also stopped the owner correcting a record that never described anything real. His first genuine case is still sitting behind my test data in the version he used that night.

None of those three came from testing. They came from watching one person use the thing for twenty minutes, which found more than all of my automated checks did, because those checks only ever look for what I already thought to worry about.

The Hole I Nearly Shipped

One part of the product has to work for someone with no account at all: the link you send to whoever cased you. Anonymous by design, which means it cannot lean on the normal rule of "you may only touch your own data."

So I built that path deliberately narrow, locked the door behind it, and wrote a test proving a stranger could not get through. The test passed. I moved on.

Then, out of pure habit, I poked the live site directly to see what it would say.

It answered.

Not with a refusal. It went straight past every check and only stopped because I had given it nonsense to work with. Someone who knew what they were doing could have pushed a fabricated, pre-approved case into another person's log, skipping the review step built specifically to prevent that.

Two things had gone wrong, and they compounded. The lock I had written did not cover the way the platform hands out access by default, so the door I thought was shut was standing open. And my test passed because my test environment was safer than the real one. My tests were not wrong about my code. They were wrong about the world.

I rebuilt the test to mirror the real environment, confirmed it now failed against the old version, and only then fixed it. Then I moved the sensitive part somewhere it simply cannot be reached from the outside, rather than relying on me having set a permission correctly.

That lesson generalises well past software: a rehearsal that is easier than the real thing will hand you false confidence, and you will not notice, because everything looks fine.

What Got Deleted

A partial list, because the deletions say more than the additions:

  • The four digit code
  • The single shared feedback link
  • The public username route and the approval queue behind it
  • A field for pasting the case prompt word for word
  • A free text notes box
  • Drill tags, and the dashboard panel built to visualise them
  • Most of the landing page

The last one is the most instructive. The landing page had a careful section explaining all seven moments of a case. Anyone arriving at a case interview practice tool already knows what a case interview is, and already knows they should be logging their practice. Selling them the problem was pure noise. What is left is one headline, three steps, and a button.

Where It Is Now

Live at caselogg.com, free, sign in with Google.

Behind it sit about thirty five automated checks, and it is worth saying that none of them test features. Every one is about privacy. That a stranger cannot read, edit or delete your log. That a case you marked private stays private even inside a log you chose to publish. That a feedback link can only ever touch the one case it was created for. That a caser cannot overwrite a single word you wrote. That revoking a link stops it working immediately.

And that I cannot read your cases either. My own admin view shows counts and nothing else. No titles, no scores, no notes, no email addresses. The product tells people their log is private, and an admin panel that could read their candid feedback about themselves would make that a lie. Being able to count is enough to run the thing.

What I Took Away

Ask who is doing the typing. The single biggest improvement here was not a feature. It was noticing I had handed the work to the person with the least reason to do it. Who is being asked, and what is their incentive at that exact moment, is worth more than any amount of polish.

Watch one real person for twenty minutes. Melvin found three things I had not, immediately, because he used it like a person instead of like its author.

Choose the defaults as though you will not be there to explain them. Private by default was a thirty second decision that quietly determines whether this thing is trustworthy.

Test against the world, not against your assumptions. My most serious mistake was invisible to a screen full of green ticks and obvious the moment I checked the real thing.

Delete more than feels comfortable. Every version of this that got better got shorter. The forms, the landing page, the flow. The approval queue was well built, well tested and correct, and removing it made the product better, because the problem it existed to solve had stopped existing.


Caselogg is free and live at caselogg.com. Sign in with Google, log a case, send the link to whoever cased you.

A note on how this was built: it was written in collaboration with Claude Code across two days and seventeen commits. That is worth saying plainly, both because it is true and because it is the reason a two day side project got a real test suite and a proper security pass instead of neither.