Skip to content

Proposal: QuantEcon Enhancement Proposals (QEPs) — a lightweight process for cross-repo decisions #325

@mmcky

Description

@mmcky

The ask

This is a discussion draft, prompted by @jstac's suggestion in #324 that decisions like the label standardisation deserve a formal home — "QuantEcon Enhancement Proposals", similar to Python's PEPs. Please comment on the four questions at the bottom.

Why

Decisions that affect every repository, or how the whole team works — label standardisation (#324), style-guide rules, tooling standards, editorial conventions — currently happen in ad-hoc issues scattered across repos. Once closed, they're hard to find, and there's no consistent bar for what counts as "decided".

A lightweight enhancement-proposal process gives us:

  • A single place to find what was decided, when, and why.
  • A consistent shape for proposals — so the work of figuring out a good solution gets the weight it deserves before anything rolls out.
  • A clear decision rule — so proposals actually close instead of drifting.

Prior art

Process Model Takeaway for us
PEP (Python) Three types (Standards Track / Informational / Process); statuses Draft → Accepted → Final; Steering Council decides The vocabulary (types, statuses, "rejected ideas" section) is excellent; the machinery (sponsors, delegates, editors) is far heavier than we need
MEP (MyST) Numbered markdown files in a dedicated repo; proposed via PR; discussed on the PR The right size — but scoped purely to a technical spec

Where QuantEcon differs from both: PEPs and MEPs govern technical specifications. Our proposals need to cover governance and editorial decisions as well as software — "how we work" proposals (like retiring status labels in favour of Draft PRs) must fit the template as naturally as technical ones.

Proposed process (deliberately minimal)

When a QEP is needed. A decision that crosses repositories or changes how the whole team works. Single-repo fixes, features, and lecture content never need one — the default for everyday work is unchanged.

Where QEPs live. A qeps/ directory in this repo (QuantEcon/meta), one markdown file per QEP, numbered sequentially (qep-0001-*.md). Since they're MyST markdown, we can render an index site later if useful — fitting, given we build everything else on MyST.

How a QEP happens.

  1. Open a PR adding a draft QEP from the template; discussion happens on the PR.
  2. The author sets a comment deadline (1–2 weeks, like Decision: standard GitHub label set for QuantEcon lecture repositories #324).
  3. Decision by lazy consensus among Core Maintainers at the deadline; if there's no consensus, the lead (@jstac) decides or defers.
  4. The merged file records the outcome — including a short "alternatives considered / rejected" section, which is where much of the long-term value lives.

Statuses. DraftAccepted / Rejected / Withdrawn, plus Superseded when a later QEP replaces one. (No Final vs Accepted distinction — overkill at our scale.)

Template (one page).

# QEP-NNNN: Title
Author · Status · Created · Discussion link

## Summary        (3–4 sentences)
## Motivation     (what problem, why now)
## Proposal       (the actual decision being asked for)
## Alternatives considered
## Rollout        (migration, tooling, who does what)

QEP-0001. Two natural candidates: the QEP process itself (PEP-1 style, self-describing), with the label standardisation (#324) retro-written as QEP-0002 — a worked example showing the template fits a real decision we've already made.

What this is not


❓ Questions

Q1 — Name. QEP (QuantEcon Enhancement Proposal) as used here, or QuEP/QUEP? Bikeshed away.

Q2 — Location. meta/qeps/ (proposed) vs a dedicated QuantEcon/qeps repo. Meta keeps it close to where decisions already happen; a dedicated repo is cleaner if we ever publish a rendered index.

Q3 — Decision rule. Lazy consensus among Core Maintainers + deadline + lead tie-break — right balance? Anything here feel too heavy or too loose?

Q4 — Scope test. Is "crosses repos or changes how the whole team works" the right bar for when a QEP is required?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions