Engineering Hub¶
The single source of truth for engineering decisions at Orchid: what we decided, why, and what we are still discussing.
This is not a project management tool. Work is tracked in delivery repos and team boards. What lives here is the technical memory of the organization — versioned, reviewable, and searchable for years.
Where we start¶
The hub has one job: bring ideas and record decisions.
That means two habits:
- Have an idea or a significant technical proposal? Open an RFC.
- Made a decision that shapes how we build? Record an ADR.
As decision volume grows, new modules (tech radar, principles, roadmaps…) can be added — each one proposed the same way as anything else here: through an RFC.
What is an RFC?¶
RFC — Request for Comments — is how we discuss before deciding. It is a structured proposal, opened as a GitHub Issue, that puts an idea in front of everyone affected while it is still cheap to change.
The concepts behind it:
- A problem, then a proposal. An RFC states the problem independently of any solution, then proposes something concrete enough to be rejected. Vague proposals can't be evaluated; concrete ones can.
- Alternatives and trade-offs are mandatory. "What else did we consider?" and "what do we knowingly give up?" — an RFC without them is an announcement, not a proposal.
- Anyone can open one. Seniority is not a prerequisite; evidence is.
- Discussion has a deadline. The lifecycle moves through labels:
rfc/draft → rfc/review → rfc/final-comment → rfc/accepted | rfc/rejected. The Final Comment Period (≥ 5 working days) means silence can't block a decision forever. - The discussion is preserved. Accepted RFCs are archived as Markdown in
RFCs/; the issue keeps the full debate history.
→ Open an RFC · The RFC process in detail
What is an ADR?¶
ADR — Architecture Decision Record — is how we remember what we decided and why.
It is a short Markdown file, one per decision, stored permanently in
ADRs/ and changed only by pull request.
The concepts behind it:
- One decision per record. Not a design doc, not a spec — a single decision, captured with its Context (the forces at play), the Decision itself, its Consequences (good and bad), and the Alternatives that were rejected.
- Written for the engineer of three years from now. The test of a good ADR is that someone who wasn't in the room understands why — and doesn't re-litigate it.
- Immutable once accepted. New context doesn't edit an old ADR; it produces a new one that supersedes it. Both stay. The history of our thinking is part of the record.
- What counts as "significant": hard to reverse, affects more than one team, or constrains future choices. When in doubt, write it — a cheap record beats an expensive memory.
→ ADR template · The ADR rules in detail
How they fit together¶
The RFC is the conversation; the ADR is the memory.
flowchart LR
IDEA[Idea] --> RFC["RFC<br/>(GitHub Issue — discussion)"]
RFC -->|accepted| ADR["ADR<br/>(Markdown file — permanent record)"]
ADR -.->|justifies| IMPL[Implementation PRs]
RFC -->|rejected| CLOSED[Closed issue — still searchable]
- Every accepted RFC produces an ADR.
- Not every ADR needs an RFC: small-but-worth-remembering decisions, or urgent incident-driven ones, can be recorded directly — open the ADR PR within 5 working days of the decision.
- Implementation PRs in delivery repos cite the ADR ID — that is what makes "which decision justifies this code?" answerable years later.
How decisions get approved¶
- RFCs: anyone opens; the author drives the discussion; engineering leadership
moves the labels. After a Final Comment Period of at least 5 working days,
rfc/acceptedorrfc/rejectedis applied and automation posts the next steps. - ADRs: merged with 2 approvals on the pull request (enforced by branch protection). Approval means "the record is faithful and complete", not "I would have decided the same".
- Everything changes through pull requests — no direct writes to
main, humans and AI agents alike.
Conventions¶
- English only. Dates are absolute (
2026-07-08). One decision per file. - IDs are immutable and sequential:
ADR-0001,ADR-0002… RFC IDs are their GitHub issue numbers: issue #42 →RFC-0042. - Every document starts with a small YAML frontmatter block (id, title, status, owner, date, cross-link) — this keeps the hub machine-readable for tooling and AI agents.
- Section headings follow the templates — don't invent new structures.
Quick starts¶
| I want to… | Do this |
|---|---|
| Propose a significant technical change | Open an RFC issue |
| Record a decision already made | Copy templates/adr.md into ADRs/ and open a PR |
| Understand why something was built this way | Search ADRs/ or the site |
Documentation site¶
The hub is published with MkDocs Material to Cloudflare Pages, behind Cloudflare
Access (organization e-mails only), on every merge to main. Run it locally:
pip install -r requirements.txt
make serve # http://localhost:8000
One-time repository setup (branch protection, labels, Cloudflare) is documented in
.github/SETUP.md.