- Home
- Skills
- Technical Documentation
- ADR Writer: Architecture Decision Records
ADR Writer: Architecture Decision Records
Turns a decision your team already made into a complete ADR: context, options, rationale, consequences, follow-ups.
Free
Works with the AI tools you already use
ADR Writer: Architecture Decision Records
Example session with this skill installed
Write the ADR for a decision we already made.
- Decision: tenant file uploads go direct to S3 with presigned URLs instead of through our API servers.
- Decided by the architecture guild on 2026-09-10 (minutes ARCH-GUILD-2026-37). Status: accepted.
- Why: uploads up to 2 GB hold an API worker for the whole transfer. In incident INC-2291 (2026-08-21), 40 concurrent uploads exhausted the 64-worker pool and p99 API latency went from 180 ms to 9.4 s.
- Options considered: (1) direct-to-S3 presigned PUT and multipart upload — chosen; (2) a dedicated upload service behind the gateway — rejected, one more service to run and it still proxies the bytes; (3) raise the worker pool to 256 — rejected, memory cost and the coupling stays.
- Constraints: files must pass malware scanning before any tenant can download them; presigned URLs expire after 15 minutes.
- Our ADRs live in docs/adr/ in MADR format; the next number is 0042. Write it there.
- Read your context and instructions
- Compiled the adr writer
Wrote docs/adr/0042-direct-to-s3-uploads.md in MADR format. The decision, status, date and options come from your request. Four items you did not supply are recorded as open follow-ups, not filled in. The file-name slug is assumed from the title; rename it if your repository uses another pattern.
---
status: accepted
date: 2026-09-10
deciders: Architecture guild (minutes ARCH-GUILD-2026-37)
---
# 0042. Direct-to-S3 uploads with presigned URLs for tenant files
## Context and Problem Statement
Tenant file uploads of up to 2 GB are streamed through the API servers, so each upload holds an
API worker for the full transfer. In incident INC-2291 (2026-08-21), 40 concurrent uploads
exhausted the 64-worker pool and p99 API latency rose from 180 ms to 9.4 s. Upload traffic can
therefore take down unrelated API traffic.
How should tenant files reach storage without consuming API worker capacity?
## Decision Drivers
* API latency must not depend on the number or size of concurrent uploads (INC-2291).
* Files must pass malware scanning before any tenant can download them.
* Presigned URLs expire after 15 minutes.
## Considered Options
1. Direct-to-S3 presigned PUT and multipart upload
2. Dedicated upload service behind the gateway
3. Raise the API worker pool from 64 to 256
## Decision Outcome
Chosen option: **1. Direct-to-S3 presigned PUT and multipart upload**, because it is the only
option that removes upload bytes from the API path. The API issues a short-lived presigned URL;
the client sends the file straight to S3.
### Consequences
* Good: upload volume no longer consumes API workers, removing the failure mode of INC-2291.
* Good: no new long-running service to operate.
* Bad: the API no longer sees file bytes, so malware scanning must run after the object lands
in S3 and before it becomes downloadable.
* Bad: clients must handle URL expiry after 15 minutes and resume or restart large multipart
uploads.
* Neutral: upload authorization moves from request handling to URL issuance, which becomes the
control point for who may upload what.
### Confirmation
This decision is implemented when an upload in progress does not occupy an API worker and a
newly uploaded object cannot be downloaded before its malware scan passes. The test that proves
both is a follow-up (F-1, F-2).
## Pros and Cons of the Options
### 1. Direct-to-S3 presigned PUT and multipart upload
* Good: bytes bypass the API servers entirely.
* Good: uses a managed storage service; no extra runtime.
* Bad: scanning and download gating must be built around S3 events.
### 2. Dedicated upload service behind the gateway
* Good: isolates uploads from the main API workers.
* Bad: one more service to build and run.
* Bad: still proxies every byte, so the capacity problem moves instead of disappearing.
### 3. Raise the API worker pool to 256
* Good: smallest code change.
* Bad: higher memory cost.
* Bad: the coupling between uploads and API latency remains; a larger burst repeats INC-2291.
## More Information
* Incident: INC-2291 (2026-08-21).
* Decision minutes: ARCH-GUILD-2026-37 (2026-09-10).
* Follow-ups, owners not yet assigned:
* F-1 Download gating: objects stay non-downloadable until the malware scan passes.
* F-2 Load test proving uploads do not occupy API workers.
* F-3 Multipart threshold and client resume behaviour after URL expiry.
* F-4 Cost impact of S3 requests and storage versus the current path.
Record check
| Check | Result |
|---|---|
| Decision authority and date present | yes, from ARCH-GUILD-2026-37 |
| Every considered option has a stated reason | yes, 3 of 3 |
| Negative consequences recorded | yes, 2 |
| Constraints traced to drivers | malware scanning and 15-minute expiry, both in Drivers and Consequences |
| Nothing added beyond the request | follow-ups F-1 to F-4 are open questions, not decisions |
No validator was supplied, so no command was run.
Not supplied, so not decided
- Who owns the malware scanning pipeline (F-1).
- The multipart size threshold (F-3).
- Whether existing uploads in flight need a migration path.
- Cost figures (F-4).
Next steps
- Assign owners for F-1 to F-4 in your tracker and link them from the ADR.
- Rename the file if your slug convention differs from
0042-direct-to-s3-uploads.md. - Commit the ADR before the code review, as planned.
Connects securely to your tools. The creator never sees your data.
About this skill
What it does
This skill renders one already-framed, authority-backed architectural decision into a durable record whose then-current context, options, rationale, consequences and lifecycle can be reconstructed. It does not make or approve the decision.
Use it when
Use when one consequential architectural decision is ready to be recorded under accepted repository and lifecycle conventions.
For example: “We decided to replace our IPC message bus with lock-free shared memory ring buffers for the LMAX order book distribution, but we need an ADR committed before code review.”
What you get
- ADR Markdown Document
Written as Markdown to <your output folder>/architecture/tasks/<run-id>/adr-authoring/.
What it will not do
Do not use for portfolio-level decision governance, choosing technology, drafting an RFC/proposal/design specification, recording meeting notes/changelogs/runbooks, or documenting an unapproved recommendation.
How it works
- Check an authorized decision already exists.
- Bound the record identity and repository scope.
- Freeze the decision context and drivers.
- Capture screened options and explicit non-selections.
- Record decision outcome and authority evidence.
- Detail consequences and follow-up obligations.
- Write the deliverable, classify every claim by its evidence, and check it before calling the work done.
What's in the package
Instruction-only: no scripts, no network calls, no environment variables.
- LICENSE.txt
- SKILL.md
- agents/openai.yaml
- assets/output-template-task.md
- references/domain-rules.md
- references/operating-rules.md
- references/output-contract.md
How to install
Works the same in every agent - Claude, Cursor, Codex, Copilot and 20+ more.
- 1
Download the ZIP
Free skills download straight away. Paid skills unlock right after purchase.
- 2
Unzip into your skills folder
Every agent reads skills from one folder on your machine. Drop the unzipped folder in there.
- 3
Ask your agent to use it
Restart the agent if it was already running. It picks the skill up automatically - no config needed.
Skills folder by agent
Click the path to copy it. Create the folder if it does not exist yet.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
1 install
Downloaded by developers to date
Free forever
No account required to browse
Trust & safety
Security scanned
Verified clean 13 days ago
- Free to download with an account