Some notes on technical design documentation practices such as RFCs, ADRs, decision logs, and related approaches for software projects.
- https://github.com/github/spec-kit
-
Spec Kit
-
Toolkit to help you get started with Spec-Driven Development
-
An effort to allow organizations to focus on product scenarios rather than writing undifferentiated code with the help of Spec-Driven Development.
-
Spec-Driven Development flips the script on traditional software development. For decades, code has been king — specifications were just scaffolding we built and discarded once the "real work" of coding began. Spec-Driven Development changes this: specifications become executable, directly generating working implementations rather than just guiding them.
-
This section collects some of my prior GitHub comments or issues, as well as occasionally related discussions that align with the theme of technical documentation practices (RFCs, ADRs, decision logs, etc.).
I am closing this issue for now as what I originally wanted seems achievable with the available tools. Might open a new one later on in case I come up with a draft of how to implement what I wanted.
While it is achievable with current tools, I still personally see that there would be benefit in this being a feature, or at least some improved documentation / 'how to' guide included in the Codex docs for how to achieve it.
Though at least for my case, I think I less want the depth of a 'session transcript' and probably more something closer to an Architecture Decision Record (ADR) type thing:
- https://adr.github.io/
An Architectural Decision (AD) is a justified design choice that addresses a functional or non-functional requirement that is architecturally significant. An Architecturally Significant Requirement (ASR) is a requirement that has a measurable effect on the architecture and quality of a software and/or hardware system. An Architectural Decision Record (ADR) captures a single AD and its rationale; Put it simply, ADR can help you understand the reasons for a chosen architectural decision, along with its trade-offs and consequences. The collection of ADRs created and maintained in a project constitute its decision log. All these are within the topic of Architectural Knowledge Management (AKM), but ADR usage can be extended to design and other decisions (“any decision record”).
- https://adr.github.io/madr/
Markdown Architectural Decision Records
An Architectural Decision (AD) is a justified software design choice that addresses a functional or non-functional requirement of architectural significance. This decision is documented in an Architectural Decision Record (ADR), which details a single AD and its underlying rationale. To capture these records in a lean way, the Markdown Architectural Decision Records (MADRs) have been invented: MADR is a streamlined template for recording architectural significant decisions in a structured manner.
- https://github.com/adr/madr/tree/4.0.0
Markdown Architectural Decision Records (MADR)
- https://github.com/adr/madr/tree/4.0.0/template
I haven't thought too deeply about it; and I know it would be possible by just saving the complete transcripts (though that would be quite noisy/verbose); but essentially having an easy / 'automated'(ish) way to capture the important context and requirements I share in a codex chat 'in the moment', in a way that can be referred back to in future to improve the Agent's 'intuitive memory' for that project/etc; as I find I will often dictate things during a conversation that would be persistently useful; but the added friction of manually finding and capturing those things in a useful way means I more often than not just avoid doing it.
In some ways it feels like it has crossover with
AGENTS.md
; in other ways it feels like I could just save the full transcript (either in the repo, or attached to a PR or similar); but while I don't have a fully thought through plan of what it would look like or what would work best; it does feel like there is a 'useful middle ground' for a built in feature like this.It's also possible that this feature might end up requiring too much 'individual customisation' and not be truly universal; in which case I wonder if there are 'supporting features' that would make sense to be built in. The ones that immediately come to mind are some form of 'Codex CLI extensions' support (though I guess maybe that is already achievable to some degree with MCP; but I was initially thinking something that can hook deeper into Codex); and/or some kind of 'lifecycle hooks' that would allow us to trigger custom functionality based on certain events (eg. when a chat ends/is closed/etc) (though again, maybe that is mostly achievable with a combination of
AGENTS.md
+ MCP + etc)Some other related processes similar'ish to Architectural Design Records (ADRs) for potential inspiration:
- https://aws.amazon.com/prescriptive-guidance/
- https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/adr-process.html
ADR process
An architectural decision record (ADR) is a document that describes a choice the team makes about a significant aspect of the software architecture they’re planning to build. Each ADR describes the architectural decision, its context, and its consequences. ADRs have states and therefore follow a lifecycle.
The ADR process outputs a collection of architectural decision records. This collection creates the decision log. The decision log provides the project context as well as detailed implementation and design information. Project members skim the headlines of each ADR to get an overview of the project context. They read the ADRs to dive deep into project implementations and design choices.
When the team accepts an ADR, it becomes immutable. If new insights require a different decision, the team proposes a new ADR. When the team accepts the new ADR, it supersedes the previous ADR.
- https://github.com/microsoft/code-with-engineering-playbook/tree/main/docs/design/design-reviews/decision-log
- Template: https://github.com/microsoft/code-with-engineering-playbook/blob/main/docs/design/design-reviews/decision-log/doc/decision-log.md
- Example: https://github.com/microsoft/code-with-engineering-playbook/blob/main/docs/design/design-reviews/decision-log/examples/memory/decision-log.md
- https://brunoscheufler.com/blog/2020-07-04-documenting-design-decisions-using-rfcs-and-adrs
Documenting Design Decisions using RFCs and ADRs
- https://en.wikipedia.org/wiki/Request_for_Comments
Request for Comments
- https://hackmd.io/blog/2024/04/05/creating-effective-request-for-comments-rfc-document
A guide to creating an effective Request For Comments (RFC) document
- https://www.hashicorp.com/en/how-hashicorp-works/articles/rfc-template
RFC Template
HashiCorp's Request for Comment (RFC) template is designed to help team members propose a solution to a problem and get feedback on that proposal.
- https://blog.pragmaticengineer.com/rfcs-and-design-docs/
Companies Using RFCs or Design Docs and Examples of These
Originally posted by @0xdevalias in openai/codex#2765 (comment)