A question bank is only useful if teachers can get questions in quickly and find the right ones again later. Both turn out to be harder than storing rows in a table. These are the decisions we made while building the question bank in Smart Edu, the problems that led to each, and what we would tell anyone building something similar.

Problem 1: teachers already have their questions — in Word

Most teachers arrive with years of questions in Word documents and spreadsheets. A form that adds one question at a time is a non-starter for a teacher with 300 of them. So imports are a first-class feature, from two formats:

  • Excel (.xlsx) — one question per row, with columns for the question, type, answers, correct answer, difficulty and topic. Good for people who think in tables.
  • Word (.docx) — questions written the way teachers already write them, with a few simple marker lines such as Độ khó: (difficulty) and Chủ đề: (topic). Good for everyone else.

Both are offered as downloadable templates containing real sample questions, and both templates are parsed by the same importer in automated tests — so the template we hand out is guaranteed to import cleanly. A round-trip test like this is the cheapest way to stop a template and its importer from drifting apart, for example over a renamed column.

Problem 2: imports must never silently write bad data

An import does not write to the question bank immediately. It creates an import session: every row is parsed and validated, and the teacher sees a review page listing each question as valid, invalid (with the reason — "missing correct answer", "unknown question type") or a possible duplicate. Invalid rows can be fixed in place. Only when the teacher applies the session are questions created.

This two-step design costs one extra click and saves a great deal of cleanup: a misformatted file produces a list of problems, not 200 broken questions.

Problem 3: duplicates — warn, don't block

Teachers re-import the same file, or colleagues upload overlapping material. Smart Edu compares each incoming question with existing ones by a normalised fingerprint of its text — ignoring case, punctuation, extra spaces and Vietnamese diacritics such as đ/d — and marks matches as possible duplicates.

We deliberately made this a warning, not a rejection. Two questions with the same wording can be legitimately different (different answer options, different grade level), and a false "duplicate" that blocks an import is more frustrating than an occasional repeated question. The teacher decides.

Problem 4: finding 30 questions again

Import 30 questions about prime numbers today, and next week, while preparing a lesson, you need exactly those 30 — among hundreds of others. Searching by text is slow and unreliable. The fix was a simple, explicit grouping: the topic.

  • Each question can carry a topic, such as "Số nguyên tố" (prime numbers).
  • An import can set one topic for the whole file; rows with their own Chủ đề: line keep theirs. The topic field suggests existing topics, so the same group isn't split into slightly different spellings.
  • When building a lesson, a teacher picks a topic, sees how many questions it holds, and either adds a chosen number at random or ticks individual questions from the list.

A free-text topic is less elegant than a full taxonomy of subjects, chapters and skills. It is also something every teacher understands without training, which is why it is the one teachers actually use.

Problem 5: AI-generated questions need a human in the loop

Smart Edu can generate draft questions with an AI model. Generated questions are often good and occasionally wrong — a wrong answer key, an ambiguous option. So they never go straight into the bank. They arrive as an import session on a separate review page, and only a teacher with the dedicated review permission can approve them. The approval is recorded (who, when), while the questions stay owned by the teacher who asked for them.

This keeps the speed benefit of generation while keeping responsibility for correctness with a person — the same standard as any other question that ends up in front of students.

Problem 6: questions should serve learning, not just testing

The same bank feeds three places: practice questions attached to lessons, exam question pools (filtered by subject and topic), and the questions themselves when a teacher edits them. Keeping one bank rather than per-exam copies means a corrected answer key is corrected everywhere it is used going forward. (Exams already taken keep the snapshot that was graded — changing history would make old results meaningless.)

What we would tell someone building a question bank

  1. Make importing from existing documents the main path, not an afterthought — and test the template against the importer.
  2. Import into a review step; never write unchecked rows straight to the bank.
  3. Flag duplicates, but let a person decide.
  4. Give teachers one simple way to group questions that they will actually maintain.
  5. Put AI-generated content behind explicit human review, with a recorded reviewer.
  6. Snapshot questions into exams, so edits do not rewrite past results.

For the other side of the system — how those questions become fair exams — see designing fair online exams.