Skip to content
Back to skills

Pdlc

ASecurity

Run the full product development lifecycle loop, from discovery through launch and measurement, with proceed/pivot/kill gates at every phase.

  • 10 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
businessgorailsgitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add tomzx/agents --skill pdlc --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pdlc?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pdlc
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tomzx-pdlc/badge)](https://www.skillsdirectory.com/skills/tomzx-pdlc)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pdlc
description: Run the full product development lifecycle loop, from discovery through launch and measurement, with proceed/pivot/kill gates at every phase.
argument-hint: "[phase-name]"
---

# Product Development Lifecycle

Orchestrates the full PDLC loop by invoking phase skills in sequence.
Each phase consumes the previous phase's artifact and ends in a gate (`make-decision`) with verdict `proceed` / `pivot` / `kill`.
Pass an optional phase name to enter the loop at a specific stage.

PDLC wraps SDLC: it decides *whether* and *what* to build, hands the *how* off to SDLC at `define-acceptance`, then finishes the loop with launch and measurement.

## When to Use `/pdlc` vs Individual Skills

- Use **`/pdlc`** (with an optional phase name) when you want the orchestrator to run multiple phases, manage gates and backtracking, and keep run state.
The PDLC phase skills are **internal sub-skills** bundled under this `pdlc` skill at `skills/pdlc/skills/<name>/SKILL.md`. They are not individually discovered as slash commands, so only `/pdlc` is directly invocable; the orchestrator loads each phase by reading its file (see *Load Each Phase Sub-Skill* below).

## Load Each Phase Sub-Skill (mandatory)

Before performing any work that belongs to a phase, read that phase's sub-skill file at `skills/pdlc/skills/<name>/SKILL.md` (use the Read tool) so its workflow, gates, and commit rules are in context.
Never execute a phase's actions from memory or general knowledge.
This applies at every phase transition, on every entry point and fast path.
If you reach a phase that commits, pushes, or opens a PR and its sub-skill is not yet read, read it before doing anything else, then follow its workflow.

## Loop Overview

```
The PDLC loop — 6 phases (entry: problem → measure)

  Phase 1 — Discover (divergent: find problems worth solving)
  discover-problems     Synthesize JTBD, interviews, and problem statements
  research-market       Size the market, map trends and segments
  analyze-competition    Map the competitive field and positioning gaps
  frame-opportunities    Build an opportunity-solution tree, scored
          │
          ▼  GATE (make-decision: proceed / pivot / kill)
  Phase 2 — Validate (converge or kill, before any build)
  map-assumptions        List hypotheses, beliefs, and risks ranked by leverage
  design-experiment      Design the cheapest decisive test (fake-door, concierge, prototype, survey)
  run-experiment         Execute, collect data, record a verdict
          │
          ▼  GATE (make-decision: proceed / pivot / kill)
  Phase 3 — Strategy (decide where to focus)
  define-vision          Product vision, target customer, positioning
  set-goals              OKRs, success metrics + guardrail metrics
  build-roadmap          Now/Next/Later, outcome-based
  prioritize             Rank the backlog (RICE / WSJF)
          │
          ▼  GATE (make-decision: proceed / pivot / kill)
  Phase 4 — Define (turn outcome into buildable scope)
  write-prd              Problem, outcomes, success criteria, non-goals
  define-acceptance      Acceptance contract: testable criteria (HANDOFF TO SDLC)
  prototype-ux           Wireframes/prototype + usability findings
          │
          ▼  GATE (make-decision: proceed / pivot / kill)  ──►  SDLC owns the build
  Phase 5 — Launch (go-to-market)
  plan-launch            Readiness checklist, timeline, channels
  craft-messaging        Value prop, messaging house, narratives
  enable-teams           Sales playbook, support runbook
  set-pricing            Pricing model, packaging, tiers
          │
          ▼  GATE (make-decision: proceed / pivot / kill)
  Phase 6 — Measure (close the loop)
  spec-analytics         Events, funnels, dashboards, guardrails
  review-metrics         Actuals vs goals, anomalies, health report
  synthesize-feedback    Aggregate support, sales, NPS, reviews
  run-retrospective      Keep / stop / start
  sunset-product         End-of-life plan (when an initiative is net-negative)
          │
          ▼  GATE (make-decision: double-down / iterate / sunset)  ──► feeds back into Discover

Cross-cutting (invoke at any point)

  make-decision          The gate mechanism — one decision record reused at every transition
  kill-initiative        Explicit sunset-or-pivot: reallocate capacity, notify stakeholders
  brief-stakeholders     Exec summary, status update, stakeholder map
  audit-outcomes         Trace shipped outcomes back to the original problem and metrics (PDLC's reverse trace)
  manage-portfolio       Health across multiple initiatives/products

Setup (run once per project, no dependencies on the loop)

  initialize-pdlc-directory   Bootstrap .pdlc/ structure and populate templates
  sync-pdlc                   Reconcile .pdlc/ with current product reality (calls initialize if absent)
```

## Directory Structure

All PDLC artifacts live under `.pdlc/` in the repository root.
When `PDLC_DIR` is set, the same tree can also live (or be mirrored) outside the repo under `$PDLC_DIR/{owner}/{repository}/.pdlc/`; see `references/shared.md` for the full rules.

```
.pdlc/
├── .gitignore                     # Excludes state.yml and initiatives/*/progress.md (local-only)
├── context/
│   ├── product-overview.md        # Product, ICP, scope, stakeholders
│   ├── vision.md                  # Product vision and positioning
│   ├── goals.md                   # OKRs, success metrics, guardrail metrics
│   ├── roadmap.md                 # Now/Next/Later
│   ├── pricing.md                 # Pricing model (optional)
│   └── vocabulary.md              # Product and domain terms
├── state.yml                      # Orchestrator run state (local-only, gitignored)
├── initiatives/
│   └── N-<slug>/                  # One per initiative (INIT-N)
│       ├── progress.md            # Initiative progress + session log (local-only, gitignored)
│       ├── problems.md            # Discover
│       ├── market.md              # Discover
│       ├── competitors.md         # Discover
│       ├── opportunity-tree.md    # Discover (feeds the first gate)
│       ├── assumptions.md         # Validate
│       ├── experiment-plan.md     # Validate
│       ├── experiment-result.md   # Validate (feeds the gate)
│       ├── prd.md                 # Define
│       ├── acceptance-contract.md # Define — the SDLC handoff seam
│       ├── prototype.md           # Define
│       ├── launch-plan.md         # Launch
│       ├── messaging.md           # Launch
│       ├── enablement-kit.md      # Launch
│       ├── pricing.md             # Launch
│       ├── analytics-spec.md      # Measure
│       ├── health-report.md       # Measure
│       ├── feedback-loop.md       # Measure (feeds the double-down/iterate/sunset gate)
│       └── eol-plan.md            # Measure (sunset)
├── decisions/
│   └── N-<slug>.md                # Gate decisions and other product decisions (DEC-N)
├── learnings/
│   └── N-<slug>.md                # Retrospectives (run-retrospective)
└── templates/                     # Editable defaults used by phase skills
    ├── initiatives/...            # One template per artifact above
    ├── decision.md
    ├── learning.md
    └── context/...
```

**Initiative directory naming:** directories under `initiatives/` are named `N-<slug>` (issue number verbatim when tied to an issue, otherwise `p1-<slug>`, `p2-<slug>`, ... for pending initiatives). The **initiative ID** `INIT-N` is used in cross-references. Full rules live in `references/shared.md`.

## Entry Points

| Phase | Start here when you have... |
|---|---|
| `status` | Want to see initiative progress or pick up where you left off (delegates to `pdlc-status`, no side effects) |
| `setup` | A new product/project that needs the `.pdlc/` structure bootstrapped (runs `initialize-pdlc-directory`) |
| `sync` | An existing `.pdlc/` that needs reconciling with current reality (runs `sync-pdlc`) |
| `discover` | A vague problem area, signal, or metric regression to turn into structured problems and opportunities |
| `validate` | A framed opportunity ready to test before building |
| `strategy` | A validated opportunity ready to turn into vision, goals, and a roadmap |
| `define` | A prioritized opportunity ready to become a PRD and acceptance contract (handed off to SDLC) |
| `launch` | A built/shipped change ready for go-to-market planning |
| `measure` | A launched initiative whose outcomes need to be read and closed |
| `sunset` | An initiative that is net-negative and ready for an end-of-life plan |
| `decision` | A decision to record at any phase (runs `make-decision`) |
| `kill` | An initiative to stop (runs `kill-initiative`) |
| `audit` | Want to trace shipped outcomes back to problems and metrics (runs `audit-outcomes`) |
| `continue` | Resume an in-progress initiative (runs Automatic Resume) |

## State File

The orchestrator maintains `.pdlc/state.yml` to track the current run.
Read it at the start of every invocation; write it after every phase transition.
It is local-only workflow state and is never read from or mirrored to `PDLC_DIR`.

```yaml
current_phase: null             # the next phase to run (entry point name)
github_ref: null                # GitHub issue or PR number, e.g. "#42"
initiative: null                # N-<slug> directory name if one has been created
last_gate: null                 # verdict of the most recent gate (proceed/pivot/kill)
```

- **On first entry**: create `.pdlc/state.yml`, filling `current_phase` with the entry point and `github_ref` if known.
- **After each phase completes**: update `current_phase` to the next phase. This is the single rule: `current_phase` always holds what comes next.
- **When an initiative directory is created**: fill `initiative`.
- **After each gate**: set `last_gate` to the verdict.
- **On loop completion**: set `current_phase` to `complete`.

### Local-only files (never commit)

`state.yml` and each initiative's `progress.md` are local workflow state.
They must never be committed. `initialize-pdlc-directory` creates a `.pdlc/.gitignore` that excludes them:

```gitignore
# Local-only workflow state — do not commit
# Orchestrator run state
state.yml
# Per-initiative progress tracking and session logs
initiatives/*/progress.md
```

## Steps

1. Read `.pdlc/state.yml` if it exists. Use its values as defaults unless the user provides explicit arguments.
2. Determine the entry point: normalize `$1` to lowercase and match against the supported entry points. If `$1` does not match, do not infer from text; inform the user and ask for a valid entry point. If `continue`, run Automatic Resume.
3. If the entry point is `status`, invoke the `pdlc-status` skill. Do not advance the loop or modify any artifacts.
4. If the entry point is `setup`, invoke `initialize-pdlc-directory`. If `sync`, invoke `sync-pdlc`. These are standalone and do not advance the loop.
5. If the entry point is `decision`, invoke `make-decision` directly. If `kill`, invoke `kill-initiative`. If `audit`, invoke `audit-outcomes`.
6. Read `.pdlc/context/` (`product-overview.md`, `vision.md`, `goals.md`) for product context before invoking any sub-skill, and apply the style rules found there to every document produced. The shared conventions (context reading and `.pdlc/` path resolution via `PDLC_DIR`) are defined in `references/shared.md` and are not repeated per sub-skill.
7. Confirm the artifacts available for the current phase (previous phase output under `.pdlc/initiatives/N-<slug>/`, existing files, or context).
8. **Before executing each sub-skill, read it** at `skills/pdlc/skills/<name>/SKILL.md` (Read tool). This is mandatory. Read first, then perform the sub-skill's steps. Never run a phase's commit/push/PR actions without reading the governing sub-skill first.
9. After each phase skill completes its artifact, **run the gate**: invoke `make-decision` for the phase just completed. The gate decides `proceed` / `pivot` / `kill`.
   - `proceed` → advance to the next phase.
   - `pivot` → return to the phase named in the decision body and re-run that skill in revision mode.
   - `kill` → invoke `kill-initiative` and stop the loop.
10. After the gate resolves to `proceed`, update `.pdlc/state.yml` (`current_phase`, `initiative`, `last_gate`) and update the initiative's `progress.md`.
11. At the SDLC handoff (`define-acceptance`): the acceptance contract is the handoff. Note that SDLC owns the build; PDLC resumes at `launch` once the change is shipped. Do not run SDLC skills from within PDLC; point the user to `/sdlc requirements` with the acceptance contract as input.
12. At the end of Measure, the gate is `double-down` / `iterate` / `sunset`. `iterate` routes back to Discover with the feedback artifact as input (the loop restarts). `sunset` invokes `sunset-product`.
13. When the session ends, write a session boundary marker to `progress.md`.

### Automatic Resume (entry: `continue`)

1. Scan `.pdlc/initiatives/*/progress.md` for initiatives where `current_phase` is not `complete` and `re_entry_point` is set.
2. If exactly one is found, present its status and ask: "Resume at `<re_entry_point>` for `<initiative>`?"
3. If multiple are found, show the summary table and ask which to resume.
4. If none are found, inform the user and ask for an entry point.
5. The user can always override by specifying an explicit entry point.

### Progress Tracking

The `progress.md` file in each initiative directory is the single source of truth for initiative status, and it is updated after each phase and gate.

**Session Boundary Markers:** at the start and end of every session, write a brief entry to the Session Log in `progress.md` (date, what was accomplished / planned, where to pick up next). Update `re_entry_point` on session end so the next session resumes cleanly.

## Backtracking and Failure Recovery

| Mode | Example | Response |
|---|---|---|
| **Gate pivot** | `make-decision` returns `pivot` with a named phase | Return to that phase, re-run its skill in revision mode, re-gate. |
| **Scope change** | A PRD reveals the initiative is far larger than discovery suggested | Pivot back to `frame-opportunities`, re-scope, re-derive downstream artifacts. |
| **Experiment kills it** | `run-experiment` verdict is negative | Gate returns `kill`; run `kill-initiative`; record the learning. |
| **External blocker** | A dependency (API, partner, budget) is unavailable | Record as an assumption with a validation plan. Stop after the current phase if unresolved. |
| **Build handoff stall** | SDLC never ships the change | PDLC pauses at `define-acceptance`; resume `launch` only once shipped. |

Backtracking rules:
1. Pivot to the nearest phase that owns the root cause.
2. Re-derive downstream artifacts after revising.
3. Record why you pivoted via `make-decision`.
4. Do not silently skip a failed phase; state why and either pivot or stop.

When stopping, leave the loop resumable: update `progress.md` with the re-entry point, save artifacts produced so far, and set `current_phase`.

## Skipping Gates

Gates may be skipped in low-risk or exploratory contexts (a quick prototype, a tiny iteration).
State the skip explicitly: "Skipping the discover gate — prototype context."
Never skip gates for commitments that consume significant engineering capacity, pricing changes, or anything that touches guardrail metrics.

## Commit / Push / PR Gate (mandatory)

Never commit, push, or open a PR without an explicit request from the user, even when a phase would normally include these actions (posting a launch plan, filing a placeholder issue, sending enablement comms). Complete non-destructive work, stop, report, and wait for explicit confirmation.

Files in this skill

  • SKILL.md15.7 KB
  • references/shared.md13.8 KB
  • skills/analyze-competition/SKILL.md1.8 KB
  • skills/audit-outcomes/SKILL.md3 KB
  • skills/brief-stakeholders/SKILL.md2.2 KB
  • skills/build-roadmap/SKILL.md1.9 KB
  • skills/craft-messaging/SKILL.md1.9 KB
  • skills/define-acceptance/SKILL.md2.8 KB
  • skills/define-vision/SKILL.md2 KB
  • skills/design-experiment/SKILL.md2.1 KB
  • skills/discover-problems/SKILL.md2.3 KB
  • skills/enable-teams/SKILL.md1.8 KB
  • skills/frame-opportunities/SKILL.md2.2 KB
  • skills/initialize-pdlc-directory/SKILL.md3.8 KB
  • skills/kill-initiative/SKILL.md2.5 KB
  • skills/make-decision/SKILL.md4.2 KB
  • skills/manage-portfolio/SKILL.md2.2 KB
  • skills/map-assumptions/SKILL.md2.1 KB
  • skills/pdlc-status/SKILL.md2.1 KB
  • skills/plan-launch/SKILL.md1.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…