Zoen Product Engineering
Run Zoen engineering as one coherent system: discover the right product, preserve the domain language, design deep modules, deliver thin vertical slices, and learn from production without sacrificing auditability or reversal.
Load the doctrine
Read references/zoen-doctrine.md at the start of every Zoen product task.
Read references/extreme-programming.md when planning a delivery, choosing practices, implementing, reviewing, releasing, or changing the engineering process.
Load
(or read
) at the start of every build, review, scope, or multi-model recommendation turn. Boil lakes, search before building, keep the user sovereign. Manual SDLC must load it the same way.
Treat repository
,
,
, ADRs, specifications, and current code as newer sources of truth. Surface conflicts instead of silently overriding them.
Non-negotiables
- Optimize for the fastest path to a safe production learning loop.
- Own Zoen's ontology and control plane; borrow bounded implementations instead of forking an entire product.
- Express product behavior as nouns, links, verbs, policies, and evidence.
- Route effectful or risky operations through an Action Gateway with policy evaluation, approval where required, idempotency, and an audit event. Agents do not write directly.
- Make every production change observable, testable through a public seam, incrementally deployable, and reversible.
- Prefer one working vertical slice over horizontal infrastructure built for hypothetical needs.
- Keep prototypes disposable. Reimplement validated behavior test-first before production.
- Preserve access minimization, individualized credentials, provenance, retention rules, client-owned export, and incident evidence.
Choose the flow
| Situation | Flow |
|---|
| Repository not configured for the skill set | $setup-matt-pocock-skills
|
| Large greenfield effort with unresolved dependencies | → |
| Product or design decision that fits one conversation | |
| External fact blocks a decision | |
| Behavior or state cannot be settled on paper | logic branch |
| Interface or experience must be seen | UI branch |
| Domain language or durable decision is unclear | |
| Module seam or interface is unclear | → |
| Architecture health review | $improve-codebase-architecture
|
| Settled conversation must become buildable | → |
| Agent-ready ticket must be delivered | , which drives and |
| Hard bug or regression | |
| Incoming raw request or issue | |
| Conversational testing session | |
| Merge or rebase conflict | $resolving-merge-conflicts
|
| TypeScript package seams need enforcement | |
| Fast local feedback is missing | |
| Context must cross sessions | |
| A reusable skill is being designed | |
Do not stack every skill onto every task. Invoke the smallest flow that resolves the current uncertainty.
Delivery loop
1. Orient
- Read repository instructions, domain docs, relevant ADRs, the current issue or spec, and recent code history.
- Identify the real customer, desired outcome, production evidence, and next irreversible decision.
- Confirm that issue-tracker and domain-doc conventions exist. Run
$setup-matt-pocock-skills
if they do not.
- State what is known, what is assumed, and what remains a decision.
2. Collapse uncertainty
- Use when the route cannot fit in one context window. Resolve decision tickets, not implementation work.
- Use for human decisions. Ask one question at a time and recommend an answer.
- Use for facts from primary sources.
- Use for questions that require a runnable or visual answer. Record the verdict and discard the production claim of the prototype code.
- Use continuously when words change. Use ADRs only for surprising, hard-to-reverse trade-offs.
Stop discovery when the next valuable vertical slice and its acceptance evidence are clear.
3. Specify a vertical slice
Run
. Every production slice must name:
- customer and outcome;
- story and concrete acceptance examples;
- nouns, links, verbs, and evidence affected;
- public interface and test seam;
- policy, risk class, and approval behavior;
- AgentRun and ToolCall evidence when agents participate;
- observability and value metric;
- data access, tenancy, retention, and export effects;
- compatibility, migration or parallel-run plan;
- rollback trigger and reversal path;
- explicit exclusions.
Run
only after the slice is coherent. Tickets are tracer bullets that cross the full stack and end in demonstrable behavior. Declare blocking edges; do not create horizontal "build all infrastructure" tickets unless a real slice is blocked by them.
4. Implement with XP
- Agree the seam and acceptance examples for the ticket.
- Run in red → green → refactor slices.
- Keep the smallest useful interface and absorb complexity behind it.
- Pair on high-risk decisions. When two humans are unavailable, use a separate navigator or reviewer agent as an approximation and keep the human accountable for product and risk decisions.
- Integrate small changes frequently. Prefer a protected mainline with very short-lived branches over long-lived feature branches.
- Keep the fast verification loop near ten minutes. Split fast and slow gates if the complete suite exceeds it.
- Commit only coherent, green, reversible increments. Do not push, merge, deploy, or mutate external systems unless the user has authorized that action.
5. Review and release
Run
against both repository standards and the originating specification.
Before production, verify:
- acceptance and regression tests pass;
- typecheck, lint, build, and relevant security checks pass;
- policy and approval paths fail safely;
- writes are idempotent and auditable;
- logs contain provenance without leaking sensitive data;
- tenant isolation and least privilege hold;
- migration can run incrementally or in parallel where risk warrants;
- rollback has a tested trigger, owner, and procedure;
- dashboards or evidence can show customer and operational outcomes.
Deploy the smallest useful increment. For risky substitutions, present impact, alternatives, cost, timeline, compatibility, parallel operation, and reversal before promotion.
6. Learn
- Review working software with a real customer at least weekly.
- Compare expected and observed value evidence.
- Treat incidents and escaped defects as feedback. Run , add a regression test, and perform root-cause analysis.
- Reflect on the process regularly and change one thing at a time.
- Preserve slack; drop low-priority scope before compromising quality or sustainable pace.
Definition of done
A Zoen slice is done only when:
- the customer-visible behavior works;
- acceptance evidence exists at the agreed seam;
- code and tests communicate the behavior;
- policy, approval, audit, provenance, and tenancy behavior are explicit;
- production telemetry and value measurement exist;
- migration and rollback are credible;
- documentation and domain language match the implementation;
- no hidden follow-up is required to make the slice safe.
If any item is intentionally deferred, record the reason, owner, trigger, and risk in the issue. Do not call the slice production-ready.