Skip to content
Contact

Case studies / Personal · Jan 2026

Learning with help, practising without it

A Nepal Engineering Council licence-exam prep app I built in four days for myself and my friends. One question bank, three levels of help: Learn explains every answer, Practice helps when asked or wrong, and a timed test gives no help until the review.

LearningSolo buildPersonal tool · Jan 2026In use (first-party report)

Role

Design and build (solo)

Timeline

Jan 2026

Team

Solo

Platform

Responsive web

Measured outcome

None measured

the key decision

Help is a mode, not a button: Learn explains even right answers, Practice helps on request or when wrong, and a timed test holds everything back until the review.

how deep do you want to go?

Solo build
Diagram from the case study. Product screenshots are being added.
That's the brief. Switch to Story for the full argument, or Deep for states, iterations and implementation.
Chapter 01

One question bank, two different jobs

In January 2026 I was preparing for the Nepal Engineering Council licence exam, the multiple-choice paper an engineering graduate in Nepal has to pass to register and practise. My friends were preparing for it too. We had question sets from many places, mostly documents and PDFs with the answers printed beside the questions.

Reading a set like that does two jobs badly.

  • Learning. You see the answer before you commit. If you guess right, you never read why it was right, so a lucky guess teaches nothing.
  • Rehearsal. Nothing tests recall under a clock. The exam is two hours long, and speed of recall matters as much as recognition.

Get the balance wrong and you pay for it either way. Help that is always on gives false confidence. No help at all means a first pass through a half-forgotten chapter produces no learning.

I built Kati Sajilo ("how easy", in Nepali) over four days, 6 to 9 January 2026, to speed up our preparation. It is a small React web app with one question bank, and it lets you choose how much help you get with it.

Failure: answers printed besidesees the key before committing;false confidence Failure: bare mock test onlynothing explained on a firstpass; no learning All help visibleNo help until the end Understandfirst time back in a chapter;needs the reason every time,even after a right guess Drillknows the material; wantsspeed, with a hint only onrequest and help when wrong Rehearsedays before the sitting; wantsa clock, no help, freedom toskip, then a full review The same learner moves between these intents across a study week. A single fixed help setting can serve one of them. Kati Sajilo gives each intent its own contract.
DiagramThe problem as one axis. Printed answer keys sit at one end, a bare mock test at the other, and real study needs the points in between. Conceptual diagram.
Chapter 02

Who it was for, and where the questions came from

I was the user. There were no interviews or usability tests. The research was my own preparation and a group of friends preparing alongside me. Many of them used it, but I have no usage numbers, and I won't guess at them.

Three things about the exam shaped the design:

  • Several sittings a year. A friend group rarely sits on the same date, so a friend who has just sat the exam is a useful source for the friends sitting next.
  • Preparation lasts weeks. Progress has to be there when you come back tomorrow, on the same phone or laptop.
  • Nobody signs up for a friend's side project. There is no login. History is kept in the browser's local storage.

The questions come from many sources, which I combined into one bank: chapter-wise sets, official model questions, past questions, and 55 questions I recalled myself. I memorised what I could during my own sitting and wrote the questions down afterwards. Those went to the top of the home page, marked highest priority, for friends sitting later.

Chapter 03

Help is a mode, not a button

The obvious design is a quiz with a hint button. I started there, and it became the middle mode. What I ended up with is three modes over the same questions, each a different contract about what you are allowed to know and when:

LearnPracticeTimed test
Question orderIn order, by chapterShuffledShuffled, spread across chapters
Hint before answeringNoneWhen you askNone
Right or wrongShown at onceShown at onceNot until the review
ExplanationAlways, even after a right answerOpens on a wrong answerDeferred to the review
Change your answerNo, it locksNo, it locksYes, until Finish
ClockTime spentTime spentCountdown, red under five minutes

Read left to right, help goes down and commitment goes up. Every timed test ends in a review, where the help returns for each question. Retaking a test gives you the same paper again, so two attempts can be compared.

The rule I care most about is in Learn: the explanation opens even when you are right. That is the case the answer key never covers, a correct guess you don't understand.

One question, four levels of help

Step 1 / 6

Learn

A simply supported beam, 6 m span, carries a 12 kN point load at midspan. What is the maximum bending moment?

Questions come in chapter order. There is no hint: Learn explains everything anyway, so a hint would have nothing to add.

Options
12 · 18 · 36 · 72 kN·m
Hint
Not offered
Clock
Time spent, 00:42
Interactive reconstruction, fictional dataA fictional question, stepped through each mode. The data is invented; the rules are the app's.
All steps as a table
#StateWhat happens
1LearnA simply supported beam, 6 m span, carries a 12 kN point load at midspan. What is the maximum bending moment?. Questions come in chapter order. There is no hint: Learn explains everything anyway, so a hint would have nothing to add.
2Learn · AnsweredYou pick 18 kN·m. It is right, and the explanation opens anyway.. The answer locks after the first pick. The explanation shows even after a correct answer, because a correct guess is exactly where learning is lost.
3PracticeSame question, shuffled into a chapter drill. You ask for the hint.. In Practice the hint is there only if you ask for it, and asking is counted.
4Practice · WrongYou pick 36 kN·m. The explanation opens by itself.. A wrong answer shows the explanation at once. A right one moves on after half a second, so you move quickly through what you already know.
5Test · RunningQuestion 37 of 100. You pick 36, then change it to 18.. No hint, no green or red, no explanation. You can skip ahead and change answers until you press Finish.
6ReviewAfter Finish, every question gets its help back.. The review shows your answer against the key, with the hint and the explanation. Retake starts a new attempt on the same paper.
LearnChapter PracticeTimed Test P1 · understandP2 · drillP3, P4 · rehearse OrderHint before answeringCorrectness feedbackExplanationChange answerAdvanceClockEndsRecorded help flags Sequential by idRandomisedRandom; equal per chapter None (hint key does nothing)On demand, countedNone ImmediateImmediateNone until review Always, even if correctAuto on wrong; toggleDeferred to review No, locksNo, locksYes, until Finish ManualAuto after 500 ms if rightManual only ElapsedElapsedCountdown; red under 5 min Leaving the pageLeaving the pageFinish, time-out, tab hidden explanation: viewedhint, explanation: as usednone recorded Direction more helpmore commitment
DiagramThe assistance gradient: three modes against each dimension of help. Highlighted cells are the rules that make each mode what it is. The persona labels are assumption-based framings, not interviewed people.
Product screenshot, test company dataLearn keeps the explanation open even after a right answer.
Chapter 04

I added a database, then removed it the same evening

The first version, on 6 January, already kept attempt history in local storage. On the second evening I added a hosted database, so that history would live on a server as well.

I had no experience with backend databases. Most of that evening went into getting the database to set itself up on the host, not into anything a friend preparing for the exam would see. So I removed it the same evening and went back to local storage.

What that choice gives and costs:

GivesCosts
No setup, no sign-up, nothing for friends to createHistory is per browser: no sync between phone and laptop
Nothing to run or maintain for a four-day buildClearing the browser clears your history
A test stores its full paper, so review and same-paper retake work without a serverStorage is small, and a save that fails does not tell you yet

The practical lesson was simple. A piece of infrastructure has to earn its place in the product. Two hours of setup work had produced no feature. Removing it made the app simpler, and the decision became visible in the product as "No login required".

Chapter 05

What happens when you switch tabs?

A timed test is only a rehearsal if it can't be paused for free. On a phone, though, a notification, a call or a quick app switch is normal. So the question is: what should happen when the test tab is hidden?

When I read the code again in 2026, I found that it answers that question twice, in two different ways:

  • The timer is built to survive. When you come back, it recalculates the time left from the real clock, so time spent away still counts.
  • The test page is built to end. When the tab is hidden it asks for confirmation, and if the window has no focus it ends the test straight away and goes to the review.

One part prepares to resume and the other ends the attempt. In practice the page usually wins. This comes from reading the code, not from a reproduced bug, and it still needs a test on real phones. But it is an unresolved policy, and I'd rather decide it than leave two answers in place.

Idle Loading Running Completing Review open route start select or change · prev / next / jump T1 T2 T3 end Retake: new session, same paper retake? restore thestored paper, else load N.Load error: spinner stays(no message yet) Exits from Running T1 Finish (n/N) button T2 countdown reaches 0 T3 tab hidden: confirm, or end at once if no focus While running: the browserasks before closing
DiagramTimed-test lifecycle. The three exits from Running are Finish, time running out and the tab being hidden. The third behaves differently from the other two. Reconstruction from the app's behaviour.
(a) End on leavecurrent + strongest guard against looking answers up – a notification or call ends a two-hour rehearsal – confirm may not show in a background tab Realism: high · Tolerance: none (b) Keep running, resumethe timer supports it + matches a real exam: the clock does not stop + interruptions cost time, not the whole attempt – leaving to search is not discouraged on its own Realism: high · Tolerance: high (c) Pause while hidden + kindest to interruptions – unlimited free thinking time off-screen – breaks the point of a timed rehearsal Realism: low · Tolerance: high (d) Warn and count leavespairs with (b) + turns leaving into information, not punishment + review can show “left 2 times” – needs one extra field in the session record Realism: high · Tolerance: high
DiagramLeave-policy options. My recommendation is (b) with (d): keep the clock running, warn on return and show the number of leaves in the review. Options analysis done in 2026, after the build.

Option (d) turns leaving into information rather than punishment. A real exam doesn't stop its clock, and a rehearsal shouldn't either. But an interrupted phone session shouldn't throw away an hour of answers.

Chapter 06

What happened, and what I learned

Status: a personal tool. I used it for my own preparation, and many friends used it for theirs. It is live at necmcq.vercel.app.

Measured outcome: none. I have no counts of users, sessions or scores. I don't know whether it changed anyone's result, and I don't claim it did.

What the four days did show is how priorities moved as the exam came closer. Chapter practice came first, then timed tests and review, then Learn mode, then the official and past sets. My recalled questions were added last, after my own sitting. The home page was reordered to match: recalled questions first, official and past questions second, chapter study after that.

Product screenshot, test company dataThe home page, ordered by how close the exam is rather than by chapter.

Three lessons I took from it:

  1. Decide what the learner may know, and when, before styling a screen. The three-mode contract is the product. The screens follow from it.
  2. Infrastructure has to earn its place. The database added setup work and no feature. Local storage was simpler, and simple enough to ship before the exam.
  3. Every exit is a design decision. Finish, time running out and leaving the tab should produce the same kind of record. Writing the rule down once would have made the conflict obvious.
Deep dive 07

States and edge cases

The same question on three screens

Learn · after answeringTimed Test · runningReview · after Finish Chapter 5 · Q 1206:14 Which OSI layer routes packetsbetween networks? A Data link B Network Correct C Transport D Session Explanation Routing between networks is a layer-3 job. Shown even after a right answer. Prev Next 2 1 3 Official Full · 37/1001:12:05 Which OSI layer routes packetsbetween networks? A Data link B Network selected C Transport D Session No hint, no correctness. The answer can change until Finish. Prev Finish Next 4 5 6 Review · Official Full Which OSI layer routes packetsbetween networks? A Data link B Network Yours · correct C Transport D Session Explanation Hint and explanation return for every question. Q 37 of 100 Retake Exam 7 8 9 1 Explanation opens on every answer. 2 Correctness shown at once; the option locks after the first pick. 3 Manual advance: N or →. 4 Countdown; red under 5 minutes. 5 Selection only: no green or red. 6 Finish shows n/N on desktop and shortens to “Finish” on mobile. 7 Your answer against the key. 8 Hint and explanation come back only after the attempt is over. 9 Retake: same paper, new session.
Reconstruction, fictional dataOne fictional question in Learn after answering, in a running timed test, and in the review, at phone width. Reconstruction, fictional question and data.
Product screenshot, test company dataThe timed test: a numbered navigator with three cell states (current, answered, not answered). On phones it becomes a drawer that closes itself when you pick an answer.
Product screenshot, test company dataThe review returns the hint and explanation for every question, and offers Retake on the same paper.

States that exist

  • Loading: a spinner with "Loading questions…" or "Loading exam…".
  • Error in Learn: an error card with Retry and Back to Home.
  • Empty: "No questions available for chapter N", "Question not found", and in the review, "Session not found" with a way back to attempts.
  • Confirmations: before a retake ("This will start a new session"), before leaving a running test, and the browser's own prompt before closing the tab.
  • Denied: none, because there are no accounts.

What I found reading the code again (not yet reproduced)

In September 2026 I read the source again for this write-up. These are findings from reading, not bugs anyone reported, and I'd confirm each one in a browser before calling it reproduced.

FindingWhy it mattersFix
The three exits record the test differently. Finish and time-out count unanswered questions as wrong; leaving the tab leaves them "not attempted"The same paper gives differently shaped reviews depending on how it endedOne way to complete a test, with the reason stored
Question numbers restart in each chapter, and an attempt is matched by number aloneIn a mixed test, two different "question 12"s can overwrite each other's attemptIdentify a question by chapter and number together
A failed save to storage is not shownYou could lose history without knowingA visible notice, and an export of your history as a file
One chapter's Learn set sat outside the list of chapters Learn shows50 questions were unreachable in LearnBuild the chapter list from the data
If a test fails to load, the spinner staysNo way forward except reloadingAn error state like the one Learn already has

Accessibility

All core actions work from the keyboard (number keys to pick, arrows to move, a key each for hint, explanation and next), and navigator cells have labels. Still to do: right and wrong are shown by colour alone, the phone drawer does not trap focus, and the countdown isn't announced to screen readers.

Deep dive 08

The question bank, and what I'd test next

Combining sources

The sets came in different shapes. Some files were one list of questions, some were grouped by chapter, and a few were long enough to be split in two. The loader accepts each shape, skips a question that is missing its text, options or answer, and repairs common formatting damage from copying out of documents, such as curly quotes and stray line breaks.

That repair makes a file readable. It does not make it correct. A readable question can still have a wrong key, a weak explanation or a place in the wrong chapter. Checking that is a separate job, and the app doesn't do it yet.

  1. 01

    Readable

    The file can be opened and parsed, with formatting repaired where needed.

  2. 02

    Well-formed

    Every question has text, options and an answer. Anything without them is skipped.

  3. 03

    Correct

    The key and the explanation are right. This needs a person, and it is the next step.

What I'd test next

  1. Answer-key check. Compare a sample of each set against the official model answers, and log corrections per set.
  2. Mode comprehension. Five engineering graduates, think-aloud. Before answering, can they predict what each mode will show them? That tests whether the contract is clear.
  3. Interruption test. On Android and iPhone, trigger a notification, an app switch and a screen lock during a short test. Record which exit happens and what the review shows. The result decides the leave policy.
  4. Record integrity. Answer all 100 questions in a full test and check that the review counts 100.

Next changes, in order: choose and write down the leave policy; identify questions by chapter and number; add an optional weighted "official format" test; allow exporting and importing history as a file, as the no-account answer to sync.

Deep dive 09

Notes on sources

  • Dates, modes and rules come from the app's source and its history (6 to 9 January 2026).
  • Use by friends is my own account. I have no usage figures.
  • Exam format details come from public guides and the council's published scheme, which differ on the split of one- and two-mark questions. That is why I describe the Full Test as a simulation, not a replica.
  • The recalled questions are my own. I wrote them down after my sitting.
  • All questions shown on this page are fictional.
  • Screenshots will be taken from the live site at necmcq.vercel.app.
Deep chapters (states, iterations, implementation) are hidden in Story mode. Switch to Deep at the top to read them.