INC-002: One online assessment, three roles, one portal that couldn't model it

With my co-LSC from the technical team, I designed Ghost OA: a temporary 'conductor' that runs one shared OA and then distributes the results back to each real role. We shipped the backend the...

severity: SEV-2 | kind: operational | date: 2026-07-10 | duration: backend same night / UI in 6 days

Impact

At the start of the internship season, a recruiting company announced a single online assessment covering 3 roles with overlapping shortlists. The portal could only run one OA per role, which meant uploading the same attendance three times and the same students appearing in every role's room sheet.

Summary

With my co-LSC from the technical team, I designed Ghost OA: a temporary 'conductor' that runs one shared OA and then distributes the results back to each real role. We shipped the backend the same night and ran it through manual API calls, then built a proper UI six days later so coordinators could run it themselves.

+- - - - - - - - - -+ registered ∩ attended : GHOST OA : +--(∩)--> ROLE A : 1 candidate list :--+--(∩)--> ROLE B : / 1 attendance : +--(∩)--> ROLE C +- - - - - - - - - -+ deleted after distribute

A only -> appears in A only in list, no role -> skipped

Timeline

Root cause

A design assumption in the data model: every online assessment belonged to exactly one role. Real recruiters don't work that way.

What didn't work

Resolution

Action items

Lesson

_Under a deadline, ship the smallest correct backend first and operate it by hand. Once the flow is proven in real use, build the UI. Reusing the existing model with a flag, instead of inventing a new one, meant every existing OA tool worked on day one._

credits: Built with my co-LSC (technical team); problem flagged by my co-LSC (industry team).

tags: system-design, data-modeling, node, mongodb, react, placements