System Design blueprint · Education
School & university management system
A multi-tenant platform that runs admissions, student and staff records, timetables, attendance, fees, courses, exams and portals for schools and universities. It must never leak a student's data to the wrong person, lose or double-count a fee payment, or publish an incorrect or unapproved result.
- Steps
- 9
- Subjective questions
- 33
- Objective questions
- 33
The problem and the outcome
Problem: Institutions run admissions, fees, attendance and results on separate spreadsheets and tools, so records disagree, parents chase staff for updates, and sensitive child data is shared loosely. Result and fee errors cause real harm and disputes.
Outcome: One student record drives every module, parents and students self-serve through portals with timely alerts, and results and fees follow auditable, approval-gated workflows. Administrators get reliable reports without direct access to raw personal data.
Architecture
How it works, step by step
- Every request passes the gateway, which authenticates through SSO (staff) or OTP (parents) and attaches tenant, role and relationships, such as 'guardian of student X' or 'teacher of section Y', for attribute-based checks.
- Applicants fill a configurable admission form, upload documents and pay an application fee; staff verify, shortlist or run merit lists, and issue offers that expire on a deadline.
- When an offer is accepted, the admissions service creates the student in the student information system with a stable internal ID, guardian links, recorded consent and section allocation. External IDs such as APAAR are stored as attributes.
- The timetable solver takes sections, subjects, staff availability, rooms and hard and soft rules, then produces a draft timetable that admins review before publishing. Later changes are applied as substitutions, not full re-solves.
- Teachers mark attendance per period or per day on mobile, including offline capture with later sync. The service writes idempotent records, and absences emit events for same-day parent alerts.
- Fee plans come from class and category rules. Payments go through a gateway, and only a verified webhook or reconciliation posts a double-entry ledger entry and issues a receipt.
- Teachers enter marks against a grading scheme. Results pass moderation and HOD or controller approval, then are locked and versioned; later corrections need a new approved version.
- A transactional outbox publishes domain events to Kafka. The notification hub sends SMS, WhatsApp, app push or email according to guardian preferences and consent, with retries and deduplication.
- Change data flows into a reporting store with pseudonymised identifiers, which feeds admin dashboards for enrolment, attendance, fee dues and results. Access is logged and statutory exports are generated from it.
Tech stack
- PostgreSQL with row-level security per tenant
- Keycloak (OIDC/SAML) for SSO and roles
- Kafka with transactional outbox pattern
- Timefold Solver for timetable constraints
- Razorpay or PayU with signed webhooks for UPI and cards
- Moodle or a custom LMS integrated via LTI 1.3
- ClickHouse or BigQuery for reporting
- WhatsApp Business API, SMS provider and FCM for notifications
Key design decisions
- Use a single student information system as the system of record. Other modules hold only references and cached views, so there is exactly one place to correct a name, section or guardian.
- Combine RBAC for coarse roles with relationship-based checks such as guardian-of and teaches-section. Roles alone cannot express 'a parent sees only their own child'.
- Use a shared-schema multi-tenant design with tenant_id and row-level security for small schools, and allow dedicated databases for large universities with data-residency or contract needs.
- Model results as immutable, versioned, approval-gated records rather than editable rows, which keeps every grade change auditable.
- Treat payment state as driven by gateway webhooks and daily reconciliation, never by the client redirect, and keep money in a double-entry ledger.
Common mistakes
- Marking a fee as paid on the browser redirect, which leads to false receipts when the payment later fails, or to double charges when users retry.
- Letting teachers edit published marks directly, which destroys the audit trail and invites disputes and tampering.
- Sending a child's attendance or results to a phone number that has not been verified as the guardian's, or ignoring verifiable parental consent required under India's DPDP Act for users under 18.
- Re-running the full timetable solver mid-term for one teacher's leave, which reshuffles every class; handle it with substitutions instead.
- Giving administrators raw database access for reports instead of masked, role-scoped datasets.
What to measure
- Share of payments auto-reconciled against gateway settlements, and count of unreconciled items older than one day
- Time from attendance being marked to parent alert delivery for absences
- Result corrections after publication per exam cycle
- Unauthorised-access denials and data-access audit exceptions per month
- Timetable hard-constraint violations and the number of manual edits after publishing
Most-asked interview questions
Subjective questions 33
1How would you design access control so a parent sees only their own child's data?Asked almost every time
I'd separate authentication from authorisation. Keycloak handles login, with SSO for staff and OTP for parents. Authorisation then combines roles with relationships stored in the student system, such as guardian-of, teaches-section and advises-student. Every query is scoped by tenant_id through Postgres row-level security, and the service layer checks the relationship before returning a record, so a missing check in one endpoint cannot leak data across schools. Guardian links are created only from verified admission data, and changes to them need staff approval. Sensitive views like medical notes need an extra permission. Every read of personal data is logged so we can answer who saw what, which also supports DPDP obligations and parent grievances.
2Which multi-tenancy model would you pick for this platform, and why?Asked almost every time
I would use a hybrid. Most schools share a database and a schema, and every table carries a tenant_id. Postgres row-level security enforces the tenant filter from a session variable that the gateway sets, so a missed WHERE clause in application code cannot leak rows across tenants. Large universities, or customers with contractual isolation or residency needs, get their own database, which a tenant routing table resolves. Shared schema keeps cost low and makes migrations simple across thousands of small schools. Dedicated databases limit the blast radius and noisy-neighbour risk for the big tenants. One codebase serves both models, because the data-access layer always resolves a connection from the tenant. Tests then confirm that no query can run without tenant context.
3How do you design offline attendance capture so that syncing never creates duplicates or loses marks?Asked almost every time
The mobile app writes each mark to local storage with a client-generated UUID. It also records the natural key (tenant, student, date, period), the teacher, the device time and a local sequence number. On sync it sends batches, and the server upserts on the natural key, storing the UUID so that a retried batch has no effect. When two devices submit the same period, I would not silently use last-write-wins. The rule is that the assigned teacher or a later explicit edit wins, and the server keeps the full history for audit. Late syncs still emit absence events, but the notification hub suppresses alerts once the school's cutoff has passed. Teachers see a sync status per class, so an unsynced register is visible instead of failing silently.
4Walk me through how a result moves from marks entry to publication without an unapproved result ever going out.Asked almost every time
Results move through a state machine: draft, submitted, moderated, approved, locked, published. Teachers can edit marks only while the result is in draft. Submitting freezes that section's sheet. Moderation applies scaling or rechecks and records every change with its reason. The HOD or exam controller then approves, and the system enforces maker-checker, so the approver cannot be the person who entered the marks. Approval creates an immutable, versioned snapshot together with a content hash. Publication is a separate, scheduled action that refers to a specific approved version. The portal reads only from published snapshots and never from working tables. The publish commit and its outbox event are written in one transaction. Every transition is audited, and the service rejects any skipped state.
5Result day brings a huge traffic spike. How do you keep the portal up?Asked almost every time
Results are read-heavy and immutable once published, so I precompute them. At publish time a job renders each student's result into a document or JSON blob in object storage, keyed by an unguessable token. The portal API checks authorisation, which is cheap because relationships are cached, and then returns the precomputed artefact or a short-lived signed URL. Nothing joins live marks tables. I would pre-scale the API tier and warm the caches ahead of the scheduled publish time. Tenants can also release results in staggered batches. Login, especially OTP, is often the real bottleneck, so I would raise SMS throughput in advance and keep existing sessions valid. Per-tenant rate limits stop one university's result day from affecting other tenants.
6How do you make fee payments reliable when gateways, networks and users all misbehave?Very often asked
First, I create an order with an idempotency key before redirecting to the gateway. The client redirect only shows a pending state. The truth comes from the signed webhook: I verify the signature, deduplicate on the gateway payment ID, and post a double-entry ledger entry with the receipt in the same transaction, followed by an outbox event. Webhooks can be lost, so a scheduled job polls pending orders and runs a daily reconciliation against settlement reports, flagging mismatches for the accounts team. Refunds and concessions are new ledger entries, never edits to old ones. With this design, a user who retries or double-clicks cannot be charged twice or receive a false receipt.
7How would you handle timetable generation for a large university?Very often asked
Timetabling is a constraint optimisation problem, so I'd use a solver such as Timefold rather than hand-written rules. Hard constraints include no teacher or room double-booked, room capacity, lab requirements, and staff availability. Soft constraints include spreading a subject's lectures across the week, avoiding gaps for students, and respecting faculty preferences. The solver runs asynchronously within a time limit and produces a draft that admins can pin and adjust before publishing. After publishing I freeze it. Leave and room changes become substitutions or local re-solves with most assignments pinned, so students don't see their whole week reshuffle. Electives create student-level clashes, so I include enrolment data in the model.
8How do you stop admissions from issuing more accepted offers than there are seats?Very often asked
Each programme or class has a seat inventory row that holds capacity, the number accepted and the number held. Accepting an offer runs one transaction. It checks that the offer is still valid and before its deadline, then increments the accepted count with a conditional update such as 'accepted < capacity'. A database constraint backs this up. If the update affects no rows, the applicant is waitlisted. Offers can deliberately exceed seats when a school expects some applicants to decline, but acceptances never can. When offers expire, a scheduled job releases the holds and moves to the next merit-list candidate. However, the acceptance transaction itself checks the deadline, so a late job never lets an expired offer through. The application fee and the acceptance fee use the normal ledger flow.
9Give a back-of-envelope estimate for attendance write load.Very often asked
I would state the assumptions first. Say 2,000 tenants average 1,000 students each, which is 2 million students, with 8 periods a day. That gives about 16 million attendance records a day. Most of them arrive in a window of roughly six school hours, which averages around 750 writes per second. Marks come in bursts at the start of each period, so I would plan for perhaps ten times the average and design for 10,000 records per second. Batching each class register into one request cuts the request rate by about 40 times. Records are small, a few hundred bytes, so storage per day is single-digit gigabytes. That fits Postgres partitioned by month and tenant. Absence events are a fraction of the writes and drive the notification load.
10How would you model the fee ledger?Very often asked
I would use double-entry accounting. A journal_entries table records the header: tenant, timestamp, source type and source ID, such as a webhook event, and an idempotency key with a unique constraint. A journal_lines table holds each account, debit or credit, amount in paise as an integer, and currency, and the lines of every entry must balance to zero. The accounts include student receivable, gateway clearing, bank, concession expense and late-fee income. Invoices are a separate table that links to receivable lines. An invoice's paid status is derived from what has been allocated against it, not stored as a flag that someone can edit. Entries are append-only, and a correction is a reversal plus a new entry. Gateway settlement reports move money from clearing to bank, and any reconciliation difference goes to a suspense account for a person to review.
11What does the notification hub need to handle beyond simply sending messages?Very often asked
First, it checks each guardian's channel preferences and recorded consent before sending anything. It also respects quiet hours, except for urgent safety alerts. Second, Indian regulatory constraints apply. Commercial SMS must use TRAI DLT-registered headers and templates, and WhatsApp business messages need approved templates and user opt-in. Third, delivery must be reliable. The hub uses a dedup key of event ID, recipient and channel, retries with backoff, and fails over to another channel or provider. It records delivery receipts. Fourth, it localises messages, because guardians prefer different languages. Fifth, it protects privacy by keeping sensitive details, such as marks, out of SMS bodies and sending a link that requires login. Finally, it applies per-tenant quotas and cost tracking, since SMS volume costs money.
12How does India's DPDP Act shape this system's design?Very often asked
The Digital Personal Data Protection Act 2023 treats anyone under 18 as a child. Processing a child's data needs verifiable consent from a parent or lawful guardian, and the Act bars tracking, behavioural monitoring and targeted advertising aimed at children. The 2025 rules allow certain exemptions for educational institutions, but I would confirm the current scope with counsel rather than assume. In the design, consent records carry the purpose, the version and the guardian's identity. The system collects only the data each purpose needs and applies retention schedules. It supports access, correction and erasure requests where law permits, and it has a breach-response runbook. Analytics never profile children for marketing. The platform acts as processor for the school, which is the data fiduciary, so contracts and audit logs must support that relationship.
13A court order removes one parent's access to a child. How quickly and reliably does the system enforce it?Very often asked
The guardian relationship is the source of truth in the SIS, and it has an effective-from date and a status. Revoking it commits the change and an outbox event in one transaction. The authorisation layer checks relationships at request time, using a cache keyed on user and student with a short TTL. The revocation event also invalidates that cache entry explicitly, so enforcement takes seconds rather than waiting for the TTL to expire. Active sessions and refresh tokens for that user are revoked for that student, and the system cancels pending notifications to the removed guardian. Sensitive changes like this require maker-checker approval and are audited. Previously sent documents cannot be recalled, so the school is warned that history is not retroactively hidden from the parent.
14How do you prevent noisy neighbours in a shared multi-tenant deployment?Very often asked
The gateway applies rate limits and concurrency quotas per tenant, with tiers by plan. Heavy work, such as bulk report generation, timetable solving, merit-list runs and statutory exports, goes to async job queues with fair scheduling per tenant, so one university's export cannot starve other tenants. Database protection comes from statement timeouts, separate read replicas for reporting queries, and the reporting store itself, which keeps analytics off the OLTP database. Metrics broken down by tenant show who is consuming resources. If one tenant keeps dominating, I would move them to a dedicated database or cell. Over time the deployment becomes cells, each holding a group of tenants, which limits the blast radius of any incident.
15A published result has an error. How do you correct it?Very often asked
The locked version is never edited. Someone raises a correction request with a reason, for example after revaluation or because of a data-entry error, and attaches the changed marks. The request goes through the same moderation and approval path, and the approver must be different from the requester. Approval creates version N+1 with a link to version N and a diff. Publishing the new version marks the old one as superseded, while keeping it in the audit trail. The portal shows the current version with a note that it was revised, and downloaded marksheets carry a version number and a verification QR code or hash. The system sends a results.corrected event, so guardians are notified and downstream systems, such as scholarship or promotion logic, recompute from the new version.
16Why use a stable internal student ID instead of APAAR or an enrolment number as the primary key?Often asked
External identifiers are not under our control. A new applicant may not have an APAAR ID yet. Numbers get entered wrongly and corrected later. Universities reissue enrolment numbers after a transfer. Some students never get certain IDs at all. If one of these were the primary key, every correction would cascade through attendance, the ledger, results and events. A surrogate ID, such as a UUID or ULID generated by the SIS, never changes, and external IDs sit in an identifiers table with type, value, verification status and validity dates. Each type has a uniqueness constraint per tenant where that makes sense. Events and the reporting store carry the internal ID or a pseudonym of it, which also keeps government identifiers out of logs and analytics.
17What can go wrong with the transactional outbox, and how do you handle it?Often asked
The relay can crash after publishing a message but before marking the row as sent. That produces duplicates, so delivery is at-least-once and every consumer deduplicates on event ID. The relay can also fall behind, so I would alert on outbox lag and on the age of the oldest unsent row. Ordering matters for each student, so events are keyed by student or aggregate ID and the relay keeps commit order within a key. The outbox table grows without limit unless sent rows are purged or partitions are dropped. A CDC-based relay such as Debezium reads the outbox from the WAL, which avoids polling load. A poison event that a consumer keeps failing on goes to a dead-letter topic, and the consumer keeps processing other messages.
18How do you pseudonymise the reporting store without breaking analytics?Often asked
I would replace direct identifiers such as name, phone, APAAR and Aadhaar-linked fields with a keyed hash, an HMAC with a secret for each tenant, applied during CDC. Joins across tables still work because the same input always gives the same pseudonym. Free text such as remarks is dropped. Quasi-identifiers such as date of birth, pincode and category are made coarser where dashboards do not need full detail. Dashboards suppress small cells, for example by hiding counts below a threshold, so nobody can single out a student. Pseudonymised data is still personal data under the DPDP Act, so access is role-based and logged. Statutory exports that need real identities are produced through a controlled job that re-identifies under authorisation. The key never sits in the warehouse.
19Why apply timetable changes as substitutions rather than re-running the solver?Often asked
Once a timetable is published, people depend on it. Students, teachers and room bookings are planned around it. A full re-solve can move hundreds of slots to fix one absence, and the solver's objective does not value stability unless you model that explicitly. A substitution is local. It finds a free, qualified teacher for that slot, checks hard rules such as clashes and maximum load, and records it as an overlay with a date range, so the base timetable stays the same. Notifications go only to the people affected. A re-solve makes sense at term boundaries or after structural changes. Even then I would add a penalty for each change compared with the current timetable, so the new solution stays close to the old one.
20How would you design audit logging for who viewed or changed student data?Often asked
Every read of sensitive resources, such as health notes, marks and documents, and every write produces an audit record. The record holds the actor, their role and relationship, the tenant, the resource, the action, the purpose, time, IP address and request ID. Records go asynchronously to an append-only store. The services themselves cannot delete or alter it, because it uses WORM object storage or hash chaining, where each batch includes the previous batch's hash. Logs never contain the personal data itself, only references to it. Retention follows the policy and the law. Schools can query who accessed a child's record, and alerts catch anomalies, such as a staff account reading hundreds of profiles outside its sections.
21How do you build admission forms that every school can configure without code changes?Often asked
Each form is a versioned JSON schema with field types, validation rules, conditional visibility and document requirements, plus a UI layout. An application stores the form version it was submitted against, so later edits never make old submissions invalid. Fields that drive business logic, such as category, date of birth for age eligibility and the marks used for merit, are mapped to canonical attributes so that merit rules and reports work across schools. Other answers go into a JSONB column. Merit lists are configurable formulas, evaluated in a sandbox and versioned, and they can be explained per applicant. Tenants can publish a new form version only after a validation preview, and published versions are immutable.
22How do you handle document uploads such as birth certificates and marksheets securely?Often asked
The client asks for a presigned upload URL scoped to one object key, with limits on size and content type. The file goes straight to object storage, into a quarantine prefix. An event then triggers malware scanning and file-type verification, and optionally OCR. Only files that pass move to the clean prefix and become visible to staff. Files are encrypted at rest with tenant-scoped keys, and downloads go through short-lived signed URLs issued after an authorisation check. Each document is linked to the application and to a retention rule. Documents from rejected applicants are deleted after the retention period. Thumbnails or previews never go into public buckets, and every view is audited.
23How does the fee model support instalments, concessions, late fees and partial payments?Often asked
Each fee plan is a versioned rule set that resolves, by class, category and optional components such as transport, into an invoice schedule of instalments with due dates. Concessions and scholarships are separate ledger entries, debiting concession expense and crediting the receivable, so the original fee stays visible. A scheduled job posts late fees according to the plan's rules, and a waiver is a reversal approved by an authorised role. A partial payment is allocated across open instalments using a deterministic rule, oldest due first, unless staff override it. Because the paid amount is derived from allocations, dues dashboards always agree with the ledger. Changing a plan mid-year affects only future instalments. Invoices already issued are corrected through adjustments.
24How do you support very different grading schemes, such as school grades and university CGPA?Often asked
A grading scheme is a versioned configuration. It defines the assessment components and their weights, the mark-to-grade bands, grade points, rules for passing and grace marks, credit weighting and rounding. Each exam or course offering refers to a specific scheme version, so results are reproducible even after the rules change. Calculation runs in a pure, deterministic function that is unit-tested against reference examples the controller supplies. It stores the inputs and outputs together, and it records the scheme version in the result snapshot. Teachers enter raw marks against components, and grades are always derived. Universities add credit-based aggregation, backlogs and re-attempts as course attempts linked to the student and term.
25What backup and disaster recovery targets would you set per subsystem?Often asked
I would set targets according to the cost of losing data. The fee ledger and results need an RPO near zero, which means synchronous replication within the region, point-in-time recovery and immutable backups that sit in a separate account to resist ransomware. Attendance can tolerate an RPO of minutes, because devices keep a local copy and can re-sync. The reporting store can be rebuilt from CDC or from snapshots. For RTO, the portal and payments should come back within an hour or so, while reporting can wait longer. Data residency in India constrains where the DR region can be. Restores are drilled regularly per tenant, because an untested backup is not a real backup. Per-tenant restore is a feature in its own right, because one school's accidental bulk delete should not require a platform-wide rollback.
26A teacher leaves mid-term. How do you make sure their access disappears and nothing breaks?Often asked
Staff identity comes from the school's identity provider through SSO. SCIM provisioning, or an HR event, disables the account, and the gateway rejects their tokens. Short token lifetimes and session revocation close any remaining window. Section and subject assignments end on the leaving date. That date drives the teacher-of-section relationship, so attribute-based checks fail straight away even if a cached token survives. Records the teacher created, such as attendance, marks and remarks, keep the author reference for audit. Pending work, including unsubmitted mark sheets and substitutions, appears on an admin dashboard so it can be reassigned. Timetable slots trigger substitutions until a replacement teacher joins.
27Two people edit the same mark sheet at the same time. What happens?Often asked
Each mark sheet, meaning one section and one assessment, carries a version number. Saves are conditional updates on that version, which is optimistic locking. If the version has changed, the save is rejected and the client shows the conflicting cells so the user can merge them. Pessimistic locking would hold locks across slow mobile sessions, so I would avoid it. Only the assigned teacher can edit, so true conflicts are rare. They come mostly from the same teacher on two devices, or from a co-teacher. Each cell edit is recorded in history. Once the sheet is submitted, it is frozen, and later changes go through moderation, which removes the risk of concurrent edits during approval.
28What SLOs and alerts would you define for this platform?Often asked
I would tie SLOs to user journeys. Examples are portal login and page success rate and latency, attendance sync success, the gap between the cutoff and the parent absence alert, the time from payment to receipt, and the result publish completing on schedule. Alerts would cover outbox and consumer lag, webhook verification failures, reconciliation mismatches, and receipts stuck in a pending state, plus notification delivery failure rates per provider and channel and authorisation denials that spike unexpectedly. I would also monitor invariants as well as uptime. Ledger entries that do not balance, a published result without an approved version, and cross-tenant query attempts that RLS blocks should each page someone immediately, because they signal a correctness or security bug.
29How do you partition Kafka topics and preserve ordering where it matters?Often asked
Kafka guarantees order only within a partition, so I would choose keys by the aggregate whose order matters. Attendance and SIS events use the student ID as the key, so a student's enrolment change is never processed after a later attendance mark. Payment events use the invoice or payment ID. Keys combine the tenant and the ID, which spreads load while keeping order. I would avoid using the tenant alone as the key, because one big university would create a hot partition. I would size partition counts for peak throughput, with headroom for consumer parallelism. Consumers still check versions or timestamps, because retries and the outbox can deliver duplicates. Cross-aggregate ordering is not guaranteed, so workflows rely on state checks rather than on events arriving in order.
30How would you onboard a new school that is migrating from spreadsheets or a legacy system?Sometimes asked
I would provide import templates and a staged pipeline. The pipeline uploads the data, validates it against canonical schemas, and shows the school an error report and a preview. Only then does it commit, in idempotent batches keyed by a source record ID, so the import can be re-run safely. Students, guardians and relationships are imported first, then historical fees as opening balances in the ledger rather than replayed transactions, and then past results as archived read-only records. Guardian contact numbers need verification and consent before the system sends notifications. The tenant stays in a sandbox mode until the school signs off, so test notifications never reach real parents.
31How do you handle a student moving between sections or campuses within the same tenant?Sometimes asked
The student's identity and internal ID stay the same. What changes is the enrolment, which I model as an effective-dated record of student, section, term, valid from and valid to. A move closes the old enrolment and opens a new one. Attendance, marks and timetable lookups resolve the section that applies on the relevant date, so history is preserved correctly. Teachers of the old section lose access from the move date, apart from completing assessments for the period they taught, which is an explicit exception scoped by time. Fee differences between campuses produce ledger adjustments. Moving between separate tenants is a formal transfer, with an export, guardian consent, and APAAR serving as the portable record.
32How would you test and validate the timetable solver?Sometimes asked
I would check the hard constraints independently of the solver. A separate, simple checker confirms there are no teacher, room or section clashes, that teacher availability and required periods per subject are respected, and that rooms suit the subject, such as labs. The checker runs on every draft before an admin sees it. I would use property-based tests with generated instances, and a regression suite built from real anonymised tenant datasets, tracking soft-constraint scores and solve time. For infeasible inputs, the solver should report which constraints conflict instead of timing out silently. Solves run as async jobs with time limits and return the best solution found so far, and admins can pin slots before re-solving.
33How do you evolve event schemas on Kafka without breaking consumers?Sometimes asked
I would use a schema registry with Avro or Protobuf and enforce backward compatibility, so new fields are optional with defaults, nobody removes or reuses fields, and types do not change incompatibly. Events carry an envelope with event ID, type, version, tenant, aggregate ID and occurred_at. For a breaking change I would publish a new event type or topic version, run the old and new in parallel, migrate consumers, and then retire the old one. Consumers ignore fields they do not know. Contract tests in CI check producers against the schemas that consumers expect. Payloads carry IDs rather than full personal data where possible, which also shrinks the privacy impact of a long-retention topic.
Objective questions 33
1In a shared-schema Postgres multi-tenant design, what best prevents a missing WHERE tenant_id clause from leaking data?Asked almost every time
Why: RLS enforces the tenant filter in the database for every query, so a bug in application code cannot bypass it.
2Which key makes offline attendance sync idempotent across retries?Asked almost every time
Why: Upserting on the natural key means a repeated sync overwrites the same logical record instead of inserting a duplicate.
3What is the minimum check before trusting a payment gateway webhook?Asked almost every time
Why: Signature verification proves the gateway sent the payload and that nobody tampered with it.
4A locked, published result needs a correction. What is the correct approach?Asked almost every time
Why: Locked versions are immutable, so corrections need a new approved version with an audit link to the previous one.
5What should be the trigger for marking a student's fee invoice as paid?Very often asked
Why: Only a signature-verified server-side webhook, or a match in the settlement reconciliation, confirms that money actually moved. Redirects can be lost or forged.
6Which pattern guarantees that a results.published event is emitted only if the result commit succeeds?Very often asked
Why: The outbox writes the event in the same database transaction as the result, and a relay publishes it afterwards. This avoids lost or phantom events.
7How should acceptance be implemented to avoid overbooking seats?Very often asked
Why: An atomic conditional update in the database serialises concurrent acceptances against the real count.
8In the double-entry fee ledger, what invariant must every journal entry satisfy?Very often asked
Why: Double-entry requires each entry to balance, which makes errors and missing money detectable.
9How should an incorrectly posted fee payment be corrected?Very often asked
Why: Ledgers are append-only, and reversals keep a complete, auditable history.
10To keep each student's events in order on Kafka, what should the message key be?Very often asked
Why: Kafka orders messages within a partition, and keying by student sends all of a student's events to one partition without creating tenant-level hot spots.
11Under India's DPDP Act 2023, processing a 12-year-old student's personal data generally requires what?Very often asked
Why: The Act treats people under 18 as children and requires verifiable parental consent, subject to notified exemptions.
12An outbox relay gives what delivery guarantee to consumers?Very often asked
Why: The relay can publish and then crash before marking the row sent, which causes redelivery.
13What is the best way to serve results on result day?Very often asked
Why: Published results are immutable, so precomputing removes expensive queries while access control stays in place.
14A guardian's access is revoked. What makes enforcement near-immediate?Very often asked
Why: Request-time checks combined with event-driven cache invalidation close the access window within seconds.
15A user paid, but no webhook has arrived after several minutes. What should the system do?Very often asked
Why: Only verified server-side confirmation should post to the ledger, and polling or reconciliation covers lost webhooks.
16Assume 2,000 tenants with 1,000 students each and 8 attendance periods a day. Roughly how many attendance records are written per day?Very often asked
Why: 2,000 × 1,000 = 2 million students, and 2 million × 8 periods = 16 million records.
17One university's bulk export slows every other tenant. Which mitigation fits best?Very often asked
Why: Per-tenant limits and fair queuing stop one tenant from consuming shared capacity.
18Why is RBAC alone insufficient for a parent portal?Often asked
Why: Every parent has the same role, so access to a specific child's records must be decided by relationship or attribute checks on each record.
19Which deduplication key suits the notification hub?Often asked
Why: It suppresses repeated sends of the same event to the same person on the same channel, while still allowing different channels.
20In India, what must be in place before sending commercial or transactional SMS from the platform?Often asked
Why: TRAI's regulations require DLT registration of entities, headers and templates, and operators block unregistered messages.
21Which statement about the pseudonymised reporting store is correct?Often asked
Why: Pseudonymised data can be re-identified with the key or with other data, so it remains personal data.
22Which is a hard constraint in timetable generation?Often asked
Why: A teacher clash makes the timetable infeasible, while the other options are preferences scored as soft constraints.
23A teacher is on leave tomorrow. What should the system do to the published timetable?Often asked
Why: Substitutions are local and keep the published base timetable stable.
24Why is APAAR stored as an attribute rather than as the primary key?Often asked
Why: External IDs are outside the platform's control, and a stable surrogate key avoids cascading updates.
25Which control most directly protects parent OTP login against brute force?Often asked
Why: Short validity and attempt limits make guessing the OTP infeasible.
26Which technique handles two devices saving the same mark sheet at once?Often asked
Why: A conditional update on the version detects the conflict without holding locks during long sessions.
27The expiry job runs late, and an applicant accepts after the deadline. How do you prevent a wrong acceptance?Often asked
Why: The authoritative check must happen at the point of acceptance and must not depend on a background job's timing.
28Which standard automates provisioning and deprovisioning staff accounts from a school's identity provider?Often asked
Why: SCIM is the standard protocol for syncing user lifecycle changes, such as disabling a user, from an IdP.
29Which upload flow is safest for admission documents?Often asked
Why: It limits the scope of the upload, blocks malicious files, and keeps documents private behind authorised access.
30What makes an audit log tamper-evident?Often asked
Why: Chained hashes or write-once storage expose any alteration or deletion.
31A dashboard shows that 2 students in a small category failed. What privacy control applies?Often asked
Why: Very small counts can identify individuals, so suppression prevents re-identification.
32Which tool commonly streams Postgres changes from the WAL into Kafka for the reporting store?Sometimes asked
Why: Debezium is a log-based CDC connector that reads the Postgres WAL through logical decoding.
33Which change to an event schema is backward compatible?Sometimes asked
Why: Existing consumers can ignore the new optional field, and old messages still deserialise correctly.
Track your progress through every blueprint in your dashboard.
Start learning