HR · Requirements

Applicant Tracking System for FLYER HR

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.

Owner
HR-Admin (3 people)
Users
HR, hiring managers, interviewers, BOD
Headcount today
59 people · 35 full-time
Date
12/09/2026
Proposal for discussion, not a decision
Xuất xứ / Prompt / Giới hạn
This document answers a request made on 12/09/2026, verbatim: “Write for me requirements for a Applicant Tracking System for FLYER HR to use”. It was drafted by an AI assistant in a single working session. Headcount and team figures come from the HR dashboard at hr.flyer.vn (latest payroll data), and the process conventions come from how FLYER already works (Google Workspace, Discord, the roadmap board). Nobody in HR has reviewed it yet. Treat it as a proposal to be corrected by the HR team and hiring managers, not as an agreed specification.

1Summary

FLYER 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:

  1. Part A, this month. One Google Sheet as the single pipeline, one Google Form as the only way to apply, five email templates, one Discord channel for hiring updates. No development. HR can start on Monday.
  2. Part B, when Part A hurts. A small ATS, bought or built, that keeps the same stages and the same data but adds a career page, a candidate record with history, interview scheduling on Google Calendar, structured scorecards, offer approval, and weekly reports. The trigger to start Part B is written down in section 14 so the decision is not taken on feeling.
One sentence to rememberThe ATS is a list of people and a list of positions, joined by a stage and a date. Everything else is convenience. Part A builds that join in a spreadsheet; Part B makes it survive more than one recruiter.

2Who FLYER hires, and how often

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 groupHeadcountFull-timePart-timeTypical hiring profile (to verify)
Academic19316Many part-time content collaborators; high volume, short pipeline, skills test decides
Sales B2B & BOD11101Field sales for schools and centres; interview plus role-play; regional
Product (Eng)871Engineers and designers; take-home or live exercise; longest pipeline
Marketing835Mix of full-time and part-time creators; portfolio review
Sales B2C660Telesales and consultants; fast pipeline, trial shift
Customer Success330Support and onboarding; written test plus interview
HR-Admin330Rare; Junior TA planned in Phase 1 of the HR plan
Accounting101Rare
Total593524

Three consequences for the ATS:

3Part A: run it this month, no development

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.

3.1 The four pieces

PieceWhat it isRule
Application formOne 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 sheetOne 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 templatesFive 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 channelOne 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.

3.2 Weekly routine

WhenWhoWhat
Every working day, 30 minutesHRMove new form responses from Inbox to Pipeline, screen, set stage, send the acknowledgement or rejection template.
Within 2 working days of "Interview" stageHRSend 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 interviewInterviewerFill the four scorecard columns in the row (section 3.4). No score, no next stage.
Monday morningHRPost the weekly update in #hiring: per open position, count per stage, days open, next action and who owns it.
Last working day of the monthHRFill the Monthly tab: positions opened, closed, days to fill, source of hires, offers declined. This is the seed of the reports in section 12.

3.3 Application form fields

Keep the form short. A long form loses good candidates and gives HR data nobody reads.

3.4 Pipeline sheet columns

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.

3.5 Templates

Weekly update in #hiring (one message per open position)

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.

E1 · Acknowledgement (send within 2 working days)

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.

E2 · Interview invitation

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.

E3 · Rejection after screening

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.

E4 · Rejection after interview

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.

E5 · Offer

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.

3.6 What Part A does not do

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.

4Part B: goals and success measures

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.

4.1 Goals

  1. Every candidate for every position is in one place, with a stage, a date, and a named owner.
  2. Every candidate hears back within the response times in section 7, without HR remembering to write.
  3. Every interview produces a scorecard on the same four dimensions, visible to the next interviewer before they meet the candidate.
  4. HR can answer "how long does it take us to fill a sales role" and "where do our good hires come from" from a report, not from memory.
  5. Candidate personal data is stored and deleted according to a written rule, and the company can show who looked at it.

4.2 Success measures

MeasureBaseline (Part A, to fill in)Target after 6 months of Part BHow 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?≤ 3Stage report
Hiring managers who log in at least weekly while their position is openn/a80%Login log
Applications past retention date not yet deleted?0Retention 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.

5Users and roles

RoleWho at FLYERCan doCannot do
HR adminHR-Admin, 3 peopleEverything: open and close positions, edit any candidate, send emails, manage templates and users, export, delete, see salary fields
RecruiterJunior TA when hiredManage candidates in positions assigned to them, send templated emails, schedule interviewsDelete candidates, change settings, see salary of other positions
Hiring managerTeam lead of the hiring teamSee all candidates in their position, read all scorecards, move a candidate to the next stage or reject, request an offerSee other positions, send offers, export
InterviewerAny employee assigned to an interviewSee name, CV and prior scorecards for candidates they are scheduled with; submit their own scorecardSee salary expectation, see candidates they are not interviewing, change stages
ApproverBOD, CEOApprove or decline an offer request with amount and start date; see the summary reportEdit candidates
CandidateExternalApply through the career page, receive emails, withdraw, request deletion of their dataLog 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.

6Scope

In scope
  • Positions (requisitions) with approval
  • Career page and application form
  • Candidate records with full history
  • Pipeline with stages, owners, dates
  • Interview scheduling on Google Calendar
  • Scorecards
  • Offers with approval
  • Email templates and automatic sending
  • Talent pool and re-application
  • Reports
  • Personal data retention and deletion
  • Audit log
Out of scope
  • Onboarding after start date (contracts, accounts, equipment). Hand-off to hr.flyer.vn by export.
  • Payroll, attendance, leave. Already on hr.flyer.vn.
  • Employee performance reviews.
  • Automatic CV parsing and AI ranking of candidates. Considered in Phase 3, not before scorecards exist to compare against.
  • Candidate self-service portal.
  • Multi-company or agency use.

7Pipeline stages and response times

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.

Short pipeline (part-time)
  1. 1
    Applied
    Acknowledge within 2 working days
  2. 2
    Skills test
    Test sent within 3 working days; candidate has 5 days
  3. 3
    Decision
    Within 3 working days of test received
  4. 4
    Hired / Rejected / Withdrawn
    Terminal stages; rejection reason required
Full pipeline (full-time)
  1. 1
    Applied
    Acknowledge within 2 working days
  2. 2
    Screened
    HR phone screen within 5 working days of applying
  3. 3
    Interview 1
    Scheduled within 3 working days of screen; scorecard within 1 day after
  4. 4
    Exercise
    Optional; take-home or live, decided per position
  5. 5
    Interview 2
    Hiring manager or BOD; scorecard within 1 day after
  6. 6
    Offer
    Approval within 2 working days; candidate has 5 working days to answer
  7. 7
    Hired / Rejected / Withdrawn
    Terminal stages; rejection reason required

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.

Presentation ruleThe pipeline is shown as a list grouped by stage, sortable and searchable, not as a drag-and-drop board. FLYER tried board layouts twice on the roadmap tool and rejected both as hard to use at real data volume. A board view may be added later only if HR asks for it by name.

8Functional requirements

Priority: Must for the MVP, Should for Phase 2, Later for Phase 3 or not at all. Each line is testable on its own.

8.1 Positions

IDRequirementPriority
FR-01HR 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-02A position has states Draft, Pending approval, Open, On hold, Closed (filled), Closed (cancelled). Only Open positions accept applications.Must
FR-03Opening 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-04Each position shows: days open, count per stage, owner, next action. This is the same line that HR posts weekly in Part A.Must
FR-05HR can clone a position, including its job description and interview plan.Should

8.2 Career page and applying

IDRequirementPriority
FR-10A 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-11Each 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-12The 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-13The consent checkbox is required and its text, version and timestamp are stored with the application.Must
FR-14The form works on a phone and submits in under 3 seconds on a 4G connection.Must
FR-15An employee can submit a referral (name, contact, position, one-line note) from inside the system; the referrer is recorded on the candidate.Should
FR-16HR can add a candidate by hand (sourced on LinkedIn, walk-in, email) with the same fields, marking the source.Must
FR-17Applications received by email to a designated mailbox are turned into candidate records with the attachment as CV.Later

8.3 Candidate records

IDRequirementPriority
FR-20One 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-21The 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-22Notes are timestamped and attributed; they cannot be edited after 15 minutes, only appended to.Must
FR-23Tags (free text, HR managed) can be added to a candidate, for example "strong, wrong timing" or "referral".Should
FR-24HR can merge two candidate records that turn out to be the same person, keeping both histories.Should
FR-25Search across name, email, phone, tags and position, returning results in under 1 second for 10,000 candidates.Must

8.4 Pipeline and stages

IDRequirementPriority
FR-30The 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-31Changing 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-32A candidate cannot move past Interview 1 without at least one submitted scorecard. HR admin can override with a logged reason.Must
FR-33Bulk actions on selected candidates: move stage, reject with one reason, send one template, assign owner.Should
FR-34Each 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-35A cross-position list, "All active candidates", grouped by position, for HR's daily check.Must

8.5 Interviews and scheduling

IDRequirementPriority
FR-40Scheduling 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-41The 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-42Each position has an interview plan: which stage, who interviews, how long, which scorecard. Created once per position, reused for each candidate.Should
FR-43The 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-44Rescheduling or cancelling updates the calendar event and emails the candidate; the history keeps the old time.Must
FR-45Candidate self-scheduling from a set of slots offered by HR.Later

8.6 Scorecards

IDRequirementPriority
FR-50The 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-51The scale is deliberately even (1 to 4) so an interviewer cannot sit in the middle.Must
FR-52Per-position custom criteria can be added by HR (max 4 extra ratings).Should
FR-53An 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-54A scorecard can be submitted from a phone in under two minutes; the form opens directly from the reminder link without navigating.Must
FR-55The candidate page shows a comparison of all scorecards side by side.Must
FR-56Reminder to the interviewer at 24 hours after the interview if no scorecard; escalation to HR at 48 hours.Must

8.7 Offers

IDRequirementPriority
FR-60A 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-61An offer above the position's salary range is flagged in the approval request; it can still be approved.Must
FR-62Approval and decline are one click from email or Discord, logged with timestamp and comment.Must
FR-63On 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-64Offer outcome is recorded: accepted, declined (reason from list), expired, withdrawn by FLYER.Must
FR-65On 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

8.8 Communication

IDRequirementPriority
FR-70The five templates from section 3.5 exist in Vietnamese and English with merge fields; HR can edit them and add more.Must
FR-71Emails 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-72Stage 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-73Every email sent is stored on the candidate record with time, sender and body. Bounces are shown.Must
FR-74Discord notifications to #hiring: new position opened, offer requested, offer accepted, weekly digest. Discord DM to individuals: interview reminder, scorecard reminder, approval request.Must
FR-75SMS or Zalo message to the candidate for interview reminders.Later

8.9 Talent pool

IDRequirementPriority
FR-80Rejected candidates with consent remain searchable until their consent date; HR can tag them "consider again" with a note.Must
FR-81When a new position opens, the system lists talent-pool candidates who applied to the same team group in the last 12 months.Should
FR-82HR 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

8.10 Administration

IDRequirementPriority
FR-90HR admin manages users and roles by email address; new hiring managers are added per position.Must
FR-91HR admin manages: stages and their maximum days, rejection reasons, sources, team groups, templates, scorecard criteria, retention period.Must
FR-92Export of any list to CSV, restricted to HR admin, logged.Must
FR-93Import of the Part A sheet (section 3.4 columns) so history is not lost.Must

9Non-functional requirements

IDRequirementPriority
NFR-01Authentication. Google Workspace sign-in only, domains @flyer.us and @flyer.vn, no local passwords. Session expiry 30 days, revocable by HR admin.Must
NFR-02Authorisation. 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-03Personal 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-04Audit 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-05Data 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-06Availability. 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-07Performance. 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-08Mobile. Scorecards, approvals and the candidate page are fully usable on a phone. Position setup and reports may be desktop-only.Must
NFR-09Language. Internal interface in Vietnamese with English toggle. Candidate-facing pages and emails in Vietnamese by default, English per position.Must
NFR-10Backup. Daily backup, 30 days retained, restore tested once before go-live and once a quarter.Must
NFR-11Files. CVs and letters stored privately; links expire; virus scan on upload.Should
NFR-12Cost. Total cost per year, licences plus hosting, under one month of one HR salary. Anything above that needs a written case.Should

10Integrations

SystemDirectionPurposePriority
Google Workspace sign-inInLogin and role mapping by emailMust
GmailBothSend templates from the HR mailbox; attach replies to candidateMust
Google CalendarBothCreate interview events with Meet links; read free/busyMust
DiscordOut#hiring channel notifications and DMs; same bot pattern as the existing FLYER botsMust
Google DriveOutOptional archive of CVs and signed offers in an HR-only folderShould
hr.flyer.vnOutExport of accepted offers for onboarding and payroll setupMust (manual file in MVP)
Job boards (TopCV, VietnamWorks, LinkedIn, ITviec)OutTracked links per board; no API posting in MVPShould
flyer.vn websiteOutCareer page either hosted by the ATS and linked, or embeddedMust
AI assistantInternalDraft 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

11Data model

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.

EntityKey fieldsRelations
Positiontitle_vi, title_en, team_group, location, employment_type, pipeline, openings, salary_min, salary_max, description, state, opened_at, closed_at, close_reason, target_starthiring_manager → User; approver → User; has many Application, InterviewPlan
Candidatefull_name, email, phone, city, tags, consent_text_version, consent_at, consent_until, deleted_athas many Application, Note, Email, File
Applicationsource, referrer, applied_at, stage, stage_changed_at, owner, rejection_reason, custom_answers, withdrawn_atCandidate × Position; has many StageChange, Interview, Scorecard, Offer
StageChangefrom_stage, to_stage, reason, changed_by, changed_at→ Application
Interviewstage, scheduled_at, duration, location_or_meet, calendar_event_id, status→ Application; interviewers → User (many)
Scorecardratings (JSON of criterion → 1–4), recommendation, convinced, worried, submitted_at→ Interview; author → User
Offerbase, allowances, probation_months, start_date, employment_type, note, requested_by, approver, approved_at, decision, decline_reason, sent_at, answered_at→ Application
Emailtemplate, direction, subject, body, sent_at, status, gmail_message_id→ Candidate, optionally → Application
Notebody, author, created_at→ Candidate or Application
Filekind (cv, portfolio, offer_letter), storage_key, mime, size, uploaded_at→ Candidate or Offer
Templatecode (E1..E5, custom), lang, subject, body, merge_fields
Useremail, name, role, active
AuditEventactor, action, entity, entity_id, ip, at

12Reports

Six reports, each answering one question HR is actually asked. All filterable by date range, team group and pipeline; all exportable.

ReportQuestion it answersShape
Open positionsWhat 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 fillHow 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
FunnelWhere do candidates drop, and is it us or them?Count and conversion at each stage; split by rejected-by-FLYER vs withdrawn
Source qualityWhere 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 speedWho is interviewing, and who is late with scorecards?Per interviewer: interviews in period, median hours to scorecard, share of Strong yes/no
Retention complianceAre 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.

13Buy or build

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.

OptionFits the requirementsStrengthsWeaknessesCost per year
A · Stay on Google Sheets (Part A) with a few Apps Script automations for E1 and remindersAbout half of the Must items; no roles, no audit log, weak on FR-20 candidate historyZero licence cost; already understood; two days of setupBreaks when more than one recruiter works in it; personal data controls are only the share list0
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 individuallyCareer page, calendar and email integrations exist on day one; no maintenancePer-user pricing punishes giving every interviewer a login; Discord and hr.flyer.vn hand-off are manual; Vietnamese support variesto 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 builtExact 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 controlEngineering time from a team of eight that has product work; HR waits for each improvement; someone must own it after launchhosting near zero; engineering time to estimate
RecommendationRun option A for at least one quarter to produce the baseline in section 4.2. Then, if the trigger in section 14 fires, shortlist two vendors from option B and run the same real positions through a trial for one month, judged against the Must list. Choose option C only if both vendors fail on the three items FLYER cannot compromise on: scorecard blinding (FR-53), automatic retention (NFR-03), and a complete export (NFR-05). Building an ATS is not hard, but maintaining one is a permanent cost for a small engineering team, and HR's volume does not justify it yet.

14Phases and MVP acceptance

14.1 Trigger for starting Part B

Part B starts when any two of the following are true for two consecutive months, as recorded in the Part A monthly tab:

14.2 Phases

PhaseContentDone when
Part ASections 3.1 to 3.5First Monday digest posted; every open position has a form link; monthly tab filled once
Phase 1 · MVPAll Must items in sections 8, 9 and 10; import of the Part A sheetAcceptance list in 14.3 passes on real positions
Phase 2All Should items: approvals, free/busy scheduler, interview plans, referrals, talent-pool suggestions, offer letter generation, bulk actionsTime to fill for full-time roles below Part A baseline by 20%
Phase 3Later items: email-to-candidate intake, self-scheduling, Zalo reminders, AI drafting and CV summariesOnly if Phase 2 measures hold for two quarters

14.3 MVP acceptance list

Run on two real positions, one Short pipeline and one Full pipeline, with real candidates and real interviewers. All must pass.

  1. A candidate applies from a phone through the career page; the record appears with source recorded from the link; E1 arrives within 5 minutes.
  2. HR moves the candidate to Interview 1; a calendar event with Meet link appears on the interviewer's calendar; E2 arrives with the same details.
  3. The interviewer receives the reminder, opens the scorecard from the link on a phone, submits in under two minutes, and cannot see a second interviewer's scorecard until they have submitted.
  4. HR tries to move the candidate to Interview 2 with no scorecard and is blocked; with a scorecard, it works.
  5. A hiring manager logs in and sees only their position, with no salary expectation field.
  6. An offer request above the salary range shows a flag; the approver approves from email; HR sends E5; acceptance produces the export file.
  7. A rejected candidate receives E4 with the edited sentence; the rejection reason appears in the funnel report.
  8. A candidate emails asking for deletion; HR deletes the record; the audit log shows who deleted it and the candidate no longer appears in search or export.
  9. The Part A sheet imports with all rows matched to positions and stages, and duplicates by email merged.
  10. A full CSV export plus CV files can be downloaded by HR admin and opened without the vendor.

15Risks and open questions

15.1 Risks

RiskEffectMitigation
Candidates keep arriving by Zalo and personal emailThe pipeline is incomplete, reports are wrongPart 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 scorecardsDecisions made on memory; blinding is pointlessTwo-minute phone form, reminder at 24 h, hard block on stage change (FR-32). Publish the interviewer speed report.
Hiring managers do not log inHR becomes a messenger againDiscord notifications carry a direct link; the weekly digest names the owner of every next action.
Personal data kept longer than consentedLegal exposure under Decree 13/2023 and the 2026 lawAutomatic retention job, compliance report, and a written retention rule signed by HR before go-live.
Vendor cannot export everythingLock-in; switching later costs the historyTest the export on day one of the trial, not at renewal.
In-house build has no owner after launchBugs stay, HR goes back to the sheetIf option C is chosen, name an engineering owner and a two-hour weekly maintenance slot in the sprint board.

15.2 Open questions for HR

  1. Which mailbox sends candidate emails today, and who reads replies?
  2. How many positions were opened in the last 12 months, and how many applications did each receive? This decides whether the Part B trigger is months or years away.
  3. Is the Short pipeline right for Academic collaborators, or is there a trial-task stage the author missed?
  4. Who approves offers today: the CEO for everything, or team leads within a range?
  5. Does FLYER have a written retention rule for candidate data, and has legal counsel reviewed obligations under the 2026 Personal Data Protection Law?
  6. Should the career page live on flyer.vn, about.flyer.vn or a new subdomain?
  7. Is there a budget line for job boards, so the source-quality report can compute cost per hire?

16Decisions to ratify

The document assumes the following. Each needs a yes or a correction from HR and the BOD before Part A starts.

#DecisionProposedOwner
1The form link is the only accepted way to applyYes, from the first MondayHR
2Two pipelines, Short and Full, with the stages in section 7YesHR + team leads
3Scorecard: four criteria, 1 to 4 scale, blinded until submittedYesHR + BOD
4Response-time commitments in section 7, including replying to every rejected candidateYesHR
5Retention: 12 months after last activity, consent text on the formYes, pending legal checkHR + legal
6Pipeline is a list grouped by stage, not a boardYesHR
7Part B starts only on the trigger in 14.1, and starts with a vendor trial, not a buildYesBOD
8Login restricted to Google Workspace accounts; every interviewer gets access at no extra cost, which rules out per-seat vendors above the NFR-12 capYesBOD

Related: hr.flyer.vn (headcount and HR plan) · Company rules · Product team in the AI era · PRD list