Goodfit — Engineering Priorities (from the competitive teardown)
Derived from the two teardowns of Goodfit vs Homerun / Workable / Wrangle: Feature parity 74% · UX parity 50%. This doc turns the *behind* rows into a build order, ranked by impact ÷ effort — quick wins first, then the big competitive holes, then parity/polish.
Live evidence: https://teardown.atharwise.me/
- Feature scorecard →
/teardown.html· UX scorecard →/ux.html· competitor screens →/gallery.html - The reports are filter/search tables (no deep-links). For each item below, open the page and search the row name or filter the feature area to see the side-by-side screenshots + full analysis.
Effort: S ≈ days · M ≈ 1–2 wks · L ≈ 3+ wks. Codebase: apps/admin (recruiter), apps/app (candidate), packages/db/src/schema.
`` IMPACT → high │ TIER 1 (do now) │ TIER 2 (critical builds) │ apply-form/pipeline, │ scheduling, outbound │ email inbox, a11y, │ sourcing, careers │ score surfacing │ templates ─────┼─────────────────────────┼────────────────────────── low │ TIER 3 (typeahead, │ (skip / later) │ polish, smart lists) │ └─ low EFFORT ────────────┴── high EFFORT ── ``
TIER 1 — Quick wins (low effort × high impact). Ship these first.
1.1 — Accessibility labeling sweep + one H1/page S–M 🔴
What: Attach visible/aria labels to the ~66% unlabeled form controls (start with candidates + job-list filters), add one <h1> per page, then run a proper axe + contrast pass. Why now: Measured: 34% form-label rate. Mostly mechanical, no design risk; unblocks enterprise/compliance buyers. P1 even though it's "n/a" head-to-head (competitors not measurable from screenshots). Where: shared inputs in packages/ui; filter bars in apps/admin/.../candidates + .../jobs. Evidence: /ux.html → "Accessibility" + data/ux/goodfit-audit.json.
1.2 — Make every published job render a working apply form + seed a default pipeline S–M 🔴
What: A brand-new job currently dead-ends — the apply preview shows *"No hiring stages configured / Submissions disabled"* and the pipeline opens empty. Pre-seed a recommended default pipeline (e.g. Applied → Screen → Interview → Offer → Hired) on job creation, and guarantee a published job always has a working candidate apply form. Why now: Highest-impact UX gap. All three competitors ship default stages; Homerun bundles them with scorecards/events. A new customer's *first* action produces a broken applicant experience today. Where: job create apps/admin/.../dashboard/jobs/new; pipeline pipelineVersionId / pipeline stages (packages/db/src/schema); candidate apply apps/app/.../jobs/[company]/[role]/apply. Evidence: /ux.html → row "Onboarding & empty states" (P1) — shows flow-job-preview dead-end.
1.3 — Two-way candidate email inbox (threaded) S–M
What: Render inbound replies inline on the application record (inbound/outbound styling) with an in-context reply composer. Why now: Mostly UI/aggregation — the parse-and-match backend (inboundEmails) already exists. Workable has a full two-way inbox; we capture replies but don't surface them. Cheap parity on a daily-use surface. Where: apps/admin/.../communications + inboundEmails (schema/queries already present). Evidence: /teardown.html → "Inbound email / two-way candidate inbox" (Comms, behind).
1.4 — Surface assessment scores in the candidate list + @mention notifications S
What: (a) Make assessment scores first-class sort/badge columns in the candidates/talent view. (b) Add @mention notifications (individuals + @team/@everyone) to notes. Why now: (a) leverages Goodfit's unique scoring data — turns the pool into a ranked shortlist (differentiator competitors can't match), low effort. (b) closes the one collaboration-parity gap vs Workable; small. Where: apps/admin/.../candidates (list/columns); notes/comments + notifications. Evidence: /teardown.html → "Talent pool" and "Team notes, discussion & sharing".
1.5 — Kill the polish-killing defects S
What: Fix the broken prescreening builder layout; remove the spurious voice-builder "1 Issue" error toast; make Save-gating consistent across all assessment types; add inline auto-save confirmation in editors (careers settings). Why now: These undercut brand on screens prospects actually see in demos. Trivial fixes, outsized perception lift. Where: apps/admin/.../prescreening/_builder/*; apps/app/.../assessment/*; apps/admin/.../settings/careers. Evidence: /ux.html → "Interaction & feedback" + "Delight / polish".
1.6 — Integrations directory (surface what already exists) S
What: Ship a thin first-party integrations directory (uncomment the nav) listing existing capabilities as one-click cards: Slack/WhatsApp, calendar OAuth, webhooks, Razorpay. Why now: The API/webhook plumbing is already built — this closes a pure *perception* gap cheaply (buyers check the integrations page). Where: apps/admin/.../integrations (nav currently commented). Evidence: /teardown.html → "Integrations marketplace & API".
TIER 2 — Critical builds (high impact, larger effort). The real competitive holes.
2.1 — Interview scheduling + calendar L 🔴 (single biggest workflow gap)
What: Interviewer calendar sync (Google/MS) with availability lookup → candidate self-scheduling booking link → panel/multi-attendee conflict checks. Why now: GF 1/3, behind all three competitors. Scheduling is core ATS workflow; its absence forces teams out to Calendly/email. We already have exit-call scheduling infra to build on. Where: extend apps/admin/.../dashboard/exitcalls scheduling; new candidate self-booking in apps/app; calendar OAuth (Google client already in @goodfit/utils). Evidence: /teardown.html → "Interview scheduling & calendar" (High, P1, far behind).
2.2 — Outbound AI sourcing & candidate discovery L 🔴 (we have zero)
What: At minimum a Chrome clip-in extension + enrichment + outbound-sequence layer (or integrate a People-Search provider / Wrangle-style discovery). Differentiate by chaining Goodfit's voice/assessment engine — "screen the sourced lead instantly" — rather than competing on raw discovery volume. Why now: GF 0/3 — totally lacking. Real strategic gap for an *AI-native* ATS; Wrangle's entire wedge is sourcing (91 sourcing screens). Don't out-volume them — out-*convert* them with instant AI screening. Where: new surface in apps/admin; reuse assessment/voice pipeline in apps/app/.../assessment. Evidence: /teardown.html → "Outbound AI sourcing"; /gallery.html → filter Sourcing/talent pool (see Wrangle's depth).
2.3 — Careers design templates + live device preview M 🔴
What: Starter gallery of 4–6 visual careers/job-page themes + an inline live desktop+mobile preview that re-renders on edit (mirror Homerun's instant theme-swap). Why now: GF 1/3, far behind. Big "wow" gap in demos and a real time-to-publish blocker for non-designers; our careers builder has the content model but no theming/preview. Where: apps/admin/.../dashboard/settings/careers (careers_pages model exists); candidate render in apps/web/.../careers/[slug]. Evidence: /teardown.html → "Design templates + live device preview"; /gallery.html → Homerun Careers page & branding.
TIER 3 — Parity & polish (after Tiers 1–2)
- Job-board syndication directory
M— connect/credit flows for Indeed/LinkedIn (paid+organic) + embeddable widget; near-term a publish-success share modal. →/teardown.html"Job distribution to boards". - Talent-pool smart lists
M— saved, reweightable fit-criteria lists on top of 1.4's score columns. → "Talent pool". - Role-title typeahead
S(low impact) — seed from O*NET/ATS title list on the job-title field; improves data consistency + board-match rates. → "Role-title typeahead". - Brand & delight
M— role icon/color identity (à la Wrangle), success micro-interactions on publish, richer empty-state illustrations. →/ux.html"Visual design" + "Delight".
Suggested sequencing
- Sprint 1: 1.1 + 1.5 (stop the bleeding on first-run + demo polish) ∥ 1.3 a11y sweep.
- Sprint 2: 1.2 inbox + 1.4 score surfacing + 1.6 integrations directory (all leverage existing backends).
- Then kick off 2.1 scheduling (longest pole) in parallel with 2.3 careers templates; scope 2.2 sourcing as the strategic bet.
- Tier 3 as fill-in.
Caveats for tech
- Competitor scores are point-in-time captures (Homerun Nov 2024 · Workable Jun 2024 · Wrangle Mar 2026) — verify a competitor still behaves as shown before matching it pixel-for-pixel.
- Goodfit scores are grounded in code; the UX "behind" rows are screenshot+live-audit based — confirm the specific screen before estimating.
- Effort tags are first-pass; size properly in planning.