What FLYER HR needs from an Applicant Tracking System (ATS): one place to open a position, receive candidates, move them through interviews, decide, and report on hiring. The document starts with a version that runs this month on Google Workspace with no development, then specifies the system to build or buy if hiring volume keeps growing.
Proposal for discussion, not a decisionFLYER has 59 people on payroll, 35 of them full-time, spread over eight team groups. Hiring today runs on email, Zalo, Discord and personal memory. A candidate can be interviewed by two people who never compared notes, and nobody can say how many days a position has been open. That is fine at two hires a quarter. It stops being fine at the pace the HR plan on hr.flyer.vn describes, from 27 to 48 full-time staff.
The recommendation is in two parts:
The team groups below are taken from the HR dashboard. The hiring profile column is an estimate by the author and should be corrected by HR; it matters because the pipeline for a part-time academic collaborator and the pipeline for a senior engineer are not the same length.
| Team group | Headcount | Full-time | Part-time | Typical hiring profile (to verify) |
|---|---|---|---|---|
| Academic | 19 | 3 | 16 | Many part-time content collaborators; high volume, short pipeline, skills test decides |
| Sales B2B & BOD | 11 | 10 | 1 | Field sales for schools and centres; interview plus role-play; regional |
| Product (Eng) | 8 | 7 | 1 | Engineers and designers; take-home or live exercise; longest pipeline |
| Marketing | 8 | 3 | 5 | Mix of full-time and part-time creators; portfolio review |
| Sales B2C | 6 | 6 | 0 | Telesales and consultants; fast pipeline, trial shift |
| Customer Success | 3 | 3 | 0 | Support and onboarding; written test plus interview |
| HR-Admin | 3 | 3 | 0 | Rare; Junior TA planned in Phase 1 of the HR plan |
| Accounting | 1 | 0 | 1 | Rare |
| Total | 59 | 35 | 24 |
Three consequences for the ATS:
Everything in this section can be set up by HR in one afternoon on the existing Google Workspace. It uses the same stages and the same fields as Part B, so nothing has to be re-entered if a system is adopted later.
| Piece | What it is | Rule |
|---|---|---|
| Application form | One Google Form per position, or one general form with a "Position" dropdown. Fields listed in 3.3. | The form link is the only way to apply. Candidates who write to a personal email or Zalo are asked to fill the form. No exceptions, or the sheet stops being the truth. |
| Pipeline sheet | One Google Sheet, FLYER Hiring Pipeline, shared with HR-Admin and hiring managers. Form responses land in tab Inbox; HR moves rows to tab Pipeline. | One row per candidate per position. The Stage column is a dropdown with the stages in section 7. Every stage change updates Stage date. |
| Email templates | Five Gmail templates in a shared label, sent from [email protected] (or the existing HR mailbox). | Every candidate hears back within the response times in section 7, even when the answer is no. |
| Hiring channel | One Discord channel, #hiring, restricted to HR and hiring managers. | One message per position per week, in the format in 3.5. Interview feedback is written in the sheet, not in the channel. |
| When | Who | What |
|---|---|---|
| Every working day, 30 minutes | HR | Move new form responses from Inbox to Pipeline, screen, set stage, send the acknowledgement or rejection template. |
| Within 2 working days of "Interview" stage | HR | Send a Google Calendar invite with a Meet link (or office address) to the candidate and interviewer. Paste the calendar event link into the row. |
| Within 1 working day after each interview | Interviewer | Fill the four scorecard columns in the row (section 3.4). No score, no next stage. |
| Monday morning | HR | Post the weekly update in #hiring: per open position, count per stage, days open, next action and who owns it. |
| Last working day of the month | HR | Fill the Monthly tab: positions opened, closed, days to fill, source of hires, offers declined. This is the seed of the reports in section 12. |
Keep the form short. A long form loses good candidates and gives HR data nobody reads.
ID | Position | Pipeline (Short / Full) | Full name | Email | Phone | City Source | Referrer | CV link | Applied on | Stage | Stage date | Days in stage (formula) Owner (HR) | Hiring manager | Interviewer 1 | Interview 1 date | Calendar link Score: role skills (1–4) | Score: communication (1–4) | Score: fit with FLYER (1–4) Recommendation (Strong yes / Yes / No / Strong no) | Interviewer notes Offer amount | Offer sent on | Offer decision | Start date Rejection reason (dropdown) | Rejection sent on | Consent until (Applied on + 12 months)
The scorecard is deliberately four columns. Interviewers fill four cells and a recommendation, not a document. Part B keeps the same four dimensions.
Sales B2B Executive, Hanoi · open 23 days · owner: Giang
Applied 14 · Screened 6 · Interview 2 · Offer 0
Next: second interview for two candidates this week, interviewer Nam. Blocker: none.
Subject: FLYER đã nhận hồ sơ của bạn cho vị trí [Position]
Cảm ơn bạn đã ứng tuyển vị trí [Position] tại FLYER. Chúng tôi sẽ xem xét hồ sơ và phản hồi trong vòng 7 ngày làm việc. Nếu hồ sơ phù hợp, HR sẽ liên hệ qua email này hoặc số điện thoại bạn đã cung cấp.
Subject: Mời phỏng vấn vị trí [Position] tại FLYER
FLYER mời bạn tham gia phỏng vấn vị trí [Position] vào [date, time] tại [Google Meet link / address], thời lượng khoảng [45] phút, với [interviewer name, title]. Vui lòng xác nhận bằng cách trả lời email này hoặc chấp nhận lời mời trên lịch.
Subject: Kết quả hồ sơ ứng tuyển vị trí [Position]
Cảm ơn bạn đã quan tâm đến FLYER. Sau khi xem xét, chúng tôi chưa thể mời bạn đi tiếp cho vị trí này. Với sự đồng ý của bạn, FLYER sẽ lưu hồ sơ trong 12 tháng để liên hệ khi có vị trí phù hợp hơn.
Subject: Kết quả phỏng vấn vị trí [Position]
Cảm ơn bạn đã dành thời gian phỏng vấn với FLYER. Chúng tôi đã quyết định chọn ứng viên khác cho vị trí này. [One specific, respectful sentence from the interviewer.] Chúng tôi rất mong được gặp lại bạn ở một cơ hội khác.
Subject: Thư mời làm việc vị trí [Position] tại FLYER
FLYER trân trọng mời bạn gia nhập với vị trí [Position], thu nhập [amount], ngày bắt đầu dự kiến [date], thử việc [2] tháng. Chi tiết trong file đính kèm. Vui lòng phản hồi trước [date + 5 working days]. Liên hệ [HR name, phone] nếu bạn có câu hỏi.
When these four gaps cost more than an hour a week, or when the sheet passes about 300 rows, Part B starts. Section 14 states the trigger precisely.
Part B is the system specification. It is written so a vendor product can be checked against it line by line, or an in-house build can be scoped from it. The stages, fields and templates are the same as Part A.
| Measure | Baseline (Part A, to fill in) | Target after 6 months of Part B | How measured |
|---|---|---|---|
| Candidates acknowledged within 2 working days | ? | 100% | Automatic email log |
| Interviews with a completed scorecard within 1 working day | ? | 90% | Scorecard timestamp vs interview end |
| Median days from opening to accepted offer, full-time roles | ? | Baseline minus 20% | Position report |
| Median days in "Applied" before screening | ? | ≤ 3 | Stage report |
| Hiring managers who log in at least weekly while their position is open | n/a | 80% | Login log |
| Applications past retention date not yet deleted | ? | 0 | Retention job log |
The baseline column is intentionally empty. Part A's monthly tab produces it. A system bought before the baseline exists cannot be judged.
| Role | Who at FLYER | Can do | Cannot do |
|---|---|---|---|
| HR admin | HR-Admin, 3 people | Everything: open and close positions, edit any candidate, send emails, manage templates and users, export, delete, see salary fields | |
| Recruiter | Junior TA when hired | Manage candidates in positions assigned to them, send templated emails, schedule interviews | Delete candidates, change settings, see salary of other positions |
| Hiring manager | Team lead of the hiring team | See all candidates in their position, read all scorecards, move a candidate to the next stage or reject, request an offer | See other positions, send offers, export |
| Interviewer | Any employee assigned to an interview | See name, CV and prior scorecards for candidates they are scheduled with; submit their own scorecard | See salary expectation, see candidates they are not interviewing, change stages |
| Approver | BOD, CEO | Approve or decline an offer request with amount and start date; see the summary report | Edit candidates |
| Candidate | External | Apply through the career page, receive emails, withdraw, request deletion of their data | Log in (no candidate portal in MVP) |
Login is Google Workspace only, restricted to @flyer.us and @flyer.vn, following the pattern already used by hr.flyer.vn and the roadmap board. There are no passwords to manage.
Two pipelines. The Short pipeline is for part-time collaborators (mainly Academic and Marketing). The Full pipeline is for full-time roles. Both use the same stage names so reports can combine them.
A candidate in any non-terminal stage longer than the stated time turns amber in the list and appears in the Monday digest. Rejection at any stage sends the matching template unless HR marks "do not email" with a reason.
Priority: Must for the MVP, Should for Phase 2, Later for Phase 3 or not at all. Each line is testable on its own.
| ID | Requirement | Priority |
|---|---|---|
| FR-01 | HR can create a position with: title (VI and EN), team group, location, employment type (full-time, part-time, collaborator), pipeline (Short or Full), hiring manager, number of openings, salary range (visible to HR admin and approver only), job description, target start date. | Must |
| FR-02 | A position has states Draft, Pending approval, Open, On hold, Closed (filled), Closed (cancelled). Only Open positions accept applications. | Must |
| FR-03 | Opening a position requires approval by an Approver. The approver receives an email and a Discord message with a link; approval is one click and is logged. | Should |
| FR-04 | Each position shows: days open, count per stage, owner, next action. This is the same line that HR posts weekly in Part A. | Must |
| FR-05 | HR can clone a position, including its job description and interview plan. | Should |
| ID | Requirement | Priority |
|---|---|---|
| FR-10 | A public career page lists all Open positions, in Vietnamese with English toggle, on a FLYER domain (proposed: flyer.vn/careers or careers.flyer.vn). | Must |
| FR-11 | Each position has a public URL that can be pasted into TopCV, VietnamWorks, LinkedIn and Facebook posts. The URL carries a source parameter so the source is recorded automatically. | Must |
| FR-12 | The application form has exactly the fields in section 3.3, plus per-position custom questions (max 3). CV upload accepts PDF up to 10 MB. | Must |
| FR-13 | The consent checkbox is required and its text, version and timestamp are stored with the application. | Must |
| FR-14 | The form works on a phone and submits in under 3 seconds on a 4G connection. | Must |
| FR-15 | An employee can submit a referral (name, contact, position, one-line note) from inside the system; the referrer is recorded on the candidate. | Should |
| FR-16 | HR can add a candidate by hand (sourced on LinkedIn, walk-in, email) with the same fields, marking the source. | Must |
| FR-17 | Applications received by email to a designated mailbox are turned into candidate records with the attachment as CV. | Later |
| ID | Requirement | Priority |
|---|---|---|
| FR-20 | One candidate record per person, identified by email and phone. Applying to a second position creates a second application under the same candidate, not a duplicate person. | Must |
| FR-21 | The candidate page shows, in one screen: contact, CV preview, all applications with their stages, all scorecards, all emails sent and received, all notes, and an activity timeline. | Must |
| FR-22 | Notes are timestamped and attributed; they cannot be edited after 15 minutes, only appended to. | Must |
| FR-23 | Tags (free text, HR managed) can be added to a candidate, for example "strong, wrong timing" or "referral". | Should |
| FR-24 | HR can merge two candidate records that turn out to be the same person, keeping both histories. | Should |
| FR-25 | Search across name, email, phone, tags and position, returning results in under 1 second for 10,000 candidates. | Must |
| ID | Requirement | Priority |
|---|---|---|
| FR-30 | The pipeline view for a position is a list grouped by stage (section 7), with columns: name, days in stage, owner, last activity, next interview, average score. Sort by any column; filter by stage, owner, source, amber status. | Must |
| FR-31 | Changing stage records who, when, and optionally why. Moving to Rejected requires a reason from a fixed list (not a fit for role, salary, location, withdrew, no response, position closed, other with text). | Must |
| FR-32 | A candidate cannot move past Interview 1 without at least one submitted scorecard. HR admin can override with a logged reason. | Must |
| FR-33 | Bulk actions on selected candidates: move stage, reject with one reason, send one template, assign owner. | Should |
| FR-34 | Each stage has a configured maximum days (defaults in section 7). Exceeding it marks the row amber and includes it in the Monday digest to the owner and hiring manager. | Must |
| FR-35 | A cross-position list, "All active candidates", grouped by position, for HR's daily check. | Must |
| ID | Requirement | Priority |
|---|---|---|
| FR-40 | Scheduling an interview creates a Google Calendar event on the interviewer's calendar and the HR calendar, with a Meet link or office address, and sends template E2 to the candidate with the details. | Must |
| FR-41 | The scheduler shows the interviewer's free/busy from Google Calendar for the next 10 working days so HR picks a free slot without asking. | Should |
| FR-42 | Each position has an interview plan: which stage, who interviews, how long, which scorecard. Created once per position, reused for each candidate. | Should |
| FR-43 | The interviewer receives, one hour before the interview, a Discord DM or email with the candidate's CV link, prior scorecards and the scorecard form link. | Must |
| FR-44 | Rescheduling or cancelling updates the calendar event and emails the candidate; the history keeps the old time. | Must |
| FR-45 | Candidate self-scheduling from a set of slots offered by HR. | Later |
| ID | Requirement | Priority |
|---|---|---|
| FR-50 | The default scorecard has four ratings on a 1 to 4 scale (role skills, communication, fit with FLYER's way of working, motivation), a recommendation (Strong yes, Yes, No, Strong no), and free-text notes with a prompt: "One thing that convinced you, one thing that worried you." | Must |
| FR-51 | The scale is deliberately even (1 to 4) so an interviewer cannot sit in the middle. | Must |
| FR-52 | Per-position custom criteria can be added by HR (max 4 extra ratings). | Should |
| FR-53 | An interviewer cannot see other interviewers' scorecards for the same stage until they have submitted their own. They can see scorecards from earlier stages. | Must |
| FR-54 | A scorecard can be submitted from a phone in under two minutes; the form opens directly from the reminder link without navigating. | Must |
| FR-55 | The candidate page shows a comparison of all scorecards side by side. | Must |
| FR-56 | Reminder to the interviewer at 24 hours after the interview if no scorecard; escalation to HR at 48 hours. | Must |
| ID | Requirement | Priority |
|---|---|---|
| FR-60 | A hiring manager or HR can request an offer with: base salary, allowances, probation length, start date, employment type, and a note. The request goes to the Approver. | Must |
| FR-61 | An offer above the position's salary range is flagged in the approval request; it can still be approved. | Must |
| FR-62 | Approval and decline are one click from email or Discord, logged with timestamp and comment. | Must |
| FR-63 | On approval, HR generates the offer letter from a template (DOCX or PDF) with the fields filled, reviews it, and sends template E5 with the letter attached. | Should |
| FR-64 | Offer outcome is recorded: accepted, declined (reason from list), expired, withdrawn by FLYER. | Must |
| FR-65 | On acceptance, the system produces an export (name, position, team group, start date, salary, contact) for hr.flyer.vn onboarding. Manual import is acceptable in MVP. | Must |
| ID | Requirement | Priority |
|---|---|---|
| FR-70 | The five templates from section 3.5 exist in Vietnamese and English with merge fields; HR can edit them and add more. | Must |
| FR-71 | Emails send from a FLYER Google Workspace mailbox (proposed [email protected]) through Gmail, so replies land in Gmail and are attached to the candidate record. | Must |
| FR-72 | Stage changes trigger the matching template automatically (Applied sends E1, Rejected sends E3 or E4 depending on the last stage). HR can turn automatic sending off per position. | Must |
| FR-73 | Every email sent is stored on the candidate record with time, sender and body. Bounces are shown. | Must |
| FR-74 | Discord notifications to #hiring: new position opened, offer requested, offer accepted, weekly digest. Discord DM to individuals: interview reminder, scorecard reminder, approval request. | Must |
| FR-75 | SMS or Zalo message to the candidate for interview reminders. | Later |
| ID | Requirement | Priority |
|---|---|---|
| FR-80 | Rejected candidates with consent remain searchable until their consent date; HR can tag them "consider again" with a note. | Must |
| FR-81 | When a new position opens, the system lists talent-pool candidates who applied to the same team group in the last 12 months. | Should |
| FR-82 | HR can add a talent-pool candidate to a new position in one click; template E1 is sent with a note that this is a new opening. | Should |
| ID | Requirement | Priority |
|---|---|---|
| FR-90 | HR admin manages users and roles by email address; new hiring managers are added per position. | Must |
| FR-91 | HR admin manages: stages and their maximum days, rejection reasons, sources, team groups, templates, scorecard criteria, retention period. | Must |
| FR-92 | Export of any list to CSV, restricted to HR admin, logged. | Must |
| FR-93 | Import of the Part A sheet (section 3.4 columns) so history is not lost. | Must |
| ID | Requirement | Priority |
|---|---|---|
| NFR-01 | Authentication. Google Workspace sign-in only, domains @flyer.us and @flyer.vn, no local passwords. Session expiry 30 days, revocable by HR admin. | Must |
| NFR-02 | Authorisation. Role rules in section 5 are enforced on the server for every read and write, not only hidden in the interface. Salary fields are never included in responses to roles that may not see them. | Must |
| NFR-03 | Personal data. Candidate data is personal data under Vietnam's Decree 13/2023/NĐ-CP and the Personal Data Protection Law in force from 01/01/2026 (HR to confirm current obligations with legal counsel). The system stores the consent text and time, offers a way to fulfil a deletion request within 72 hours, and deletes or anonymises records automatically at the retention date (default 12 months after last activity, configurable). | Must |
| NFR-04 | Audit log. Every view of a candidate page and every change of stage, score, offer, export or deletion is logged with user, time and IP, retained 24 months, readable by HR admin. | Must |
| NFR-05 | Data location. Data stored with a provider that documents its region; a copy exportable at any time in open formats (CSV plus original CV files). No vendor lock-in without an export path. | Must |
| NFR-06 | Availability. 99.5% monthly for the internal app; the public career page and form 99.9%, since a candidate who cannot apply does not try again. | Must |
| NFR-07 | Performance. Any list or candidate page loads in under 2 seconds on office Wi-Fi with 10,000 candidates and 200 positions in the database. | Must |
| NFR-08 | Mobile. Scorecards, approvals and the candidate page are fully usable on a phone. Position setup and reports may be desktop-only. | Must |
| NFR-09 | Language. Internal interface in Vietnamese with English toggle. Candidate-facing pages and emails in Vietnamese by default, English per position. | Must |
| NFR-10 | Backup. Daily backup, 30 days retained, restore tested once before go-live and once a quarter. | Must |
| NFR-11 | Files. CVs and letters stored privately; links expire; virus scan on upload. | Should |
| NFR-12 | Cost. Total cost per year, licences plus hosting, under one month of one HR salary. Anything above that needs a written case. | Should |
| System | Direction | Purpose | Priority |
|---|---|---|---|
| Google Workspace sign-in | In | Login and role mapping by email | Must |
| Gmail | Both | Send templates from the HR mailbox; attach replies to candidate | Must |
| Google Calendar | Both | Create interview events with Meet links; read free/busy | Must |
| Discord | Out | #hiring channel notifications and DMs; same bot pattern as the existing FLYER bots | Must |
| Google Drive | Out | Optional archive of CVs and signed offers in an HR-only folder | Should |
| hr.flyer.vn | Out | Export of accepted offers for onboarding and payroll setup | Must (manual file in MVP) |
| Job boards (TopCV, VietnamWorks, LinkedIn, ITviec) | Out | Tracked links per board; no API posting in MVP | Should |
| flyer.vn website | Out | Career page either hosted by the ATS and linked, or embedded | Must |
| AI assistant | Internal | Draft a job description from a short brief; summarise a CV against the scorecard criteria; draft the "one specific sentence" in rejection E4 for HR to edit. Never decides a stage. | Later |
Enough to check a vendor's export or to start a schema. Field lists are the minimum; identifiers, timestamps and created-by are implied on every entity.
| Entity | Key fields | Relations |
|---|---|---|
| Position | title_vi, title_en, team_group, location, employment_type, pipeline, openings, salary_min, salary_max, description, state, opened_at, closed_at, close_reason, target_start | hiring_manager → User; approver → User; has many Application, InterviewPlan |
| Candidate | full_name, email, phone, city, tags, consent_text_version, consent_at, consent_until, deleted_at | has many Application, Note, Email, File |
| Application | source, referrer, applied_at, stage, stage_changed_at, owner, rejection_reason, custom_answers, withdrawn_at | Candidate × Position; has many StageChange, Interview, Scorecard, Offer |
| StageChange | from_stage, to_stage, reason, changed_by, changed_at | → Application |
| Interview | stage, scheduled_at, duration, location_or_meet, calendar_event_id, status | → Application; interviewers → User (many) |
| Scorecard | ratings (JSON of criterion → 1–4), recommendation, convinced, worried, submitted_at | → Interview; author → User |
| Offer | base, allowances, probation_months, start_date, employment_type, note, requested_by, approver, approved_at, decision, decline_reason, sent_at, answered_at | → Application |
| template, direction, subject, body, sent_at, status, gmail_message_id | → Candidate, optionally → Application | |
| Note | body, author, created_at | → Candidate or Application |
| File | kind (cv, portfolio, offer_letter), storage_key, mime, size, uploaded_at | → Candidate or Offer |
| Template | code (E1..E5, custom), lang, subject, body, merge_fields | |
| User | email, name, role, active | |
| AuditEvent | actor, action, entity, entity_id, ip, at |
Six reports, each answering one question HR is actually asked. All filterable by date range, team group and pipeline; all exportable.
| Report | Question it answers | Shape |
|---|---|---|
| Open positions | What is open, for how long, and what is the next step? | List: position, days open, count per stage, owner, next action, amber flags. This is the Monday digest. |
| Time to fill | How long does it take us to fill a role, by team group? | Median and range of days from Open to Accepted, per team group, per quarter |
| Funnel | Where do candidates drop, and is it us or them? | Count and conversion at each stage; split by rejected-by-FLYER vs withdrawn |
| Source quality | Where do hires come from, and which source wastes screening time? | Per source: applied, reached interview, hired; cost per hire if HR enters board spend |
| Interviewer load and speed | Who is interviewing, and who is late with scorecards? | Per interviewer: interviews in period, median hours to scorecard, share of Strong yes/no |
| Retention compliance | Are we keeping data we promised to delete? | Candidates past consent date, deletion requests and their handling time |
Charts are optional. A sortable table with the numbers is the requirement; a bar chart next to it is a courtesy.
Three realistic options once Part A is outgrown. Prices are not quoted here because vendor pricing changes and needs a current quote; HR should fill the cost column before the decision.
| Option | Fits the requirements | Strengths | Weaknesses | Cost per year |
|---|---|---|---|---|
| A · Stay on Google Sheets (Part A) with a few Apps Script automations for E1 and reminders | About half of the Must items; no roles, no audit log, weak on FR-20 candidate history | Zero licence cost; already understood; two days of setup | Breaks when more than one recruiter works in it; personal data controls are only the share list | 0 |
| B · Buy a small ATS (Vietnamese options such as Base E-Hiring; international options such as Zoho Recruit, Workable, Freshteam; to be shortlisted by HR) | Most Must items; check FR-53 scorecard blinding, FR-74 Discord, NFR-03 retention automation and NFR-05 export individually | Career page, calendar and email integrations exist on day one; no maintenance | Per-user pricing punishes giving every interviewer a login; Discord and hr.flyer.vn hand-off are manual; Vietnamese support varies | to quote |
| C · Build in-house on the same stack as the roadmap board (Cloudflare Pages, D1, Google sign-in, Discord bot) | All Must items, by definition, but only after they are built | Exact fit; every employee can be an interviewer at no licence cost; same auth and Discord patterns already in the codebase; data stays under FLYER's control | Engineering time from a team of eight that has product work; HR waits for each improvement; someone must own it after launch | hosting near zero; engineering time to estimate |
Part B starts when any two of the following are true for two consecutive months, as recorded in the Part A monthly tab:
| Phase | Content | Done when |
|---|---|---|
| Part A | Sections 3.1 to 3.5 | First Monday digest posted; every open position has a form link; monthly tab filled once |
| Phase 1 · MVP | All Must items in sections 8, 9 and 10; import of the Part A sheet | Acceptance list in 14.3 passes on real positions |
| Phase 2 | All Should items: approvals, free/busy scheduler, interview plans, referrals, talent-pool suggestions, offer letter generation, bulk actions | Time to fill for full-time roles below Part A baseline by 20% |
| Phase 3 | Later items: email-to-candidate intake, self-scheduling, Zalo reminders, AI drafting and CV summaries | Only if Phase 2 measures hold for two quarters |
Run on two real positions, one Short pipeline and one Full pipeline, with real candidates and real interviewers. All must pass.
| Risk | Effect | Mitigation |
|---|---|---|
| Candidates keep arriving by Zalo and personal email | The pipeline is incomplete, reports are wrong | Part A rule: HR replies with the form link and does not process outside it. Measure "manual adds" as a share of applications. |
| Interviewers do not fill scorecards | Decisions made on memory; blinding is pointless | Two-minute phone form, reminder at 24 h, hard block on stage change (FR-32). Publish the interviewer speed report. |
| Hiring managers do not log in | HR becomes a messenger again | Discord notifications carry a direct link; the weekly digest names the owner of every next action. |
| Personal data kept longer than consented | Legal exposure under Decree 13/2023 and the 2026 law | Automatic retention job, compliance report, and a written retention rule signed by HR before go-live. |
| Vendor cannot export everything | Lock-in; switching later costs the history | Test the export on day one of the trial, not at renewal. |
| In-house build has no owner after launch | Bugs stay, HR goes back to the sheet | If option C is chosen, name an engineering owner and a two-hour weekly maintenance slot in the sprint board. |
The document assumes the following. Each needs a yes or a correction from HR and the BOD before Part A starts.
| # | Decision | Proposed | Owner |
|---|---|---|---|
| 1 | The form link is the only accepted way to apply | Yes, from the first Monday | HR |
| 2 | Two pipelines, Short and Full, with the stages in section 7 | Yes | HR + team leads |
| 3 | Scorecard: four criteria, 1 to 4 scale, blinded until submitted | Yes | HR + BOD |
| 4 | Response-time commitments in section 7, including replying to every rejected candidate | Yes | HR |
| 5 | Retention: 12 months after last activity, consent text on the form | Yes, pending legal check | HR + legal |
| 6 | Pipeline is a list grouped by stage, not a board | Yes | HR |
| 7 | Part B starts only on the trigger in 14.1, and starts with a vendor trial, not a build | Yes | BOD |
| 8 | Login restricted to Google Workspace accounts; every interviewer gets access at no extra cost, which rules out per-seat vendors above the NFR-12 cap | Yes | BOD |
Related: hr.flyer.vn (headcount and HR plan) · Company rules · Product team in the AI era · PRD list