Development Process
CareerIndex is built using an AI-native development loop — a structured workflow that integrates LLM assistance at each phase while keeping human judgment at the decision gates that matter.
Contents
Flowchart
flowchart TD
IN[/"📥 Raw Inputs · /docs/inputs.md"/]
subgraph SPEC["2 · Requirements & Spec"]
S1[Draft spec with AI] --> S2["Review & refine [H]"]
S2 --> S3[Convert to acceptance criteria]
S3 --> S4{Experiment\nor Feature?}
S4 -->|Experiment| S5["Create spike/* branch [O]"]
end
subgraph TEST["3 · Test Definition"]
T1[Generate tests with AI] --> T2["Add behavioral & adversarial cases [H]"]
T2 --> T3[Commit tests first]
end
subgraph IMPL["4 · Implementation"]
I1["Create feature/* branch"] --> I2[Implement with AI]
I2 --> I3{Tests green?}
I3 -->|No| I2
I3 -->|Yes| I4[Refactor continuously]
end
subgraph INT["5 · Integration"]
G1[Commit with spec refs] --> G2[Open PR]
G2 --> G3["Code review [H]"]
G3 --> G4[Merge to main]
end
subgraph REL["6 · Release"]
R1[Build & deploy beta] --> R2["Staged rollout / feature flags [O][S]"]
end
subgraph OBS["7 · Feedback & Observability"]
O1["Collect logs, errors & user feedback\n→ /docs/feedback.md"] --> O2[Review metrics & system behavior]
end
DG{"8 · Decision Gate\nEvaluate success criteria [H]"}
subgraph ITER["9 · Iteration"]
IT1["Update spec & backlog\n→ /docs/decisions.md"]
end
DONE(["✅ Promote"])
IN --> SPEC
S4 -->|Feature| TEST
S5 --> TEST
TEST --> IMPL
IMPL --> INT
INT --> REL
REL --> OBS
OBS --> DG
DG -->|Promote| DONE
DG -->|Rollback| REL
DG -->|Iterate| ITER
ITER --> SPEC
Legend: [H] Human required · [O] Optional · [S] Scale-related
Loop Steps
1. Input Collection
Capture raw inputs (notes, user feedback, ideas) into /docs/inputs.md.
2. Requirements & Spec
- Draft requirements/spec in
/docs/spec.mdusing AI assistance. - [H] Review and refine spec for clarity, scope, and testability.
- Convert requirements into explicit, testable acceptance criteria within the spec.
- Classify items (validated / hypothesis / speculative) and decide: experiment vs full feature.
- [O] Create a
spike/*branch for low-confidence experiments.
3. Test Definition
- Generate initial test cases via AI into
/tests/*. - [H] Review tests and add behavioral and adversarial cases.
- Commit tests first — they establish the baseline contract.
4. Implementation
- Create a
feature/*branch. - Implement using AI assistance (editor chat/autocomplete).
- Ensure all tests pass with a minimal diff and adherence to the style guide.
- Run tests locally until green; refactor continuously while keeping tests passing.
5. Integration
- Commit changes with references to spec sections.
- Open a pull request.
- [H] Conduct code review (optionally AI-assisted).
- Merge to main when tests and review pass.
6. Release
- Build and release an experimental beta.
- [O][S] Use staged rollout or feature flags if available.
7. Feedback & Observability
- Collect logs, errors, and user feedback into
/docs/feedback.md. - Review basic metrics and system behavior.
8. Decision Gate
[H] Evaluate against predefined success criteria. Decide: promote / rollback / iterate. Record decision in /docs/decisions.md.
9. Iteration
Update /docs/spec.md and the backlog based on feedback, then repeat from Step 2.
Supporting Files
| File | Purpose |
|---|---|
/docs/spec.md | Requirements + acceptance criteria (source of truth) |
/docs/inputs.md | Raw inputs |
/docs/feedback.md | Real-world observations |
/docs/decisions.md | Iteration memory |
/tests/ | Validation contract |
CONTRIBUTING.md | Style guide + constraints |
Always-On Constraints
- Maintain basic data/schema discipline (migrations, compatibility)
- Follow security hygiene (secrets, dependencies, access control)
- Monitor basic performance and cost (latency, API usage)