with one click
technical-writing-best-practices
Use when writing technical articles, tutorials, or documentation. Covers concept ordering, section structure, and active learning techniques.
Menu
Use when writing technical articles, tutorials, or documentation. Covers concept ordering, section structure, and active learning techniques.
Universal coding standards, best practices, and patterns. Use when developing in any language — triggers on TypeScript, JavaScript, React, Node.js, Python, Nix, ruff, pyright, pytest, uv, flake.nix, justfile, just, recipes, and general code quality topics.
Use when writing git commit messages, reviewing commits, or setting up commit conventions. Triggers on commit, git commit, commit message, changelog, semantic versioning.
A formal evaluation framework for Claude Code sessions, implementing eval-driven development (EDD) principles.
Audit NixOS impermanence configuration — find files on root filesystem not covered by persistence declarations. Use when the user wants to check for untracked files, audit impermanence, or runs /impermanence-audit.
Docker-in-Docker with network_mode host for multi-node simulation
Use when implementing LangGraph workflows that need to pause for user input or external confirmation before continuing execution
| name | technical-writing-best-practices |
| description | Use when writing technical articles, tutorials, or documentation. Covers concept ordering, section structure, and active learning techniques. |
When writing technical content, it's easy to accidentally use concepts before defining them, creating a confusing reading experience where readers encounter undefined terminology.
Symptoms of this problem:
Every concept must be formally defined before it's used in explanations.
Before writing, list all technical terms that will appear:
Map which concepts depend on others:
TGT requires understanding of:
- Ticket (what TGT is a special case of)
- KDC (who issues TGT)
- Principal (who receives TGT)
Recommended order:
Read through and check: "At this point in the article, has every term I'm using been defined?"
Before (problematic):
## Amusement Park Analogy
...service center gives you a TGT (Ticket Granting Ticket)...
[TGT used but not yet defined!]
## History
...
## LDAP Relationship
...Kerberos issues TGT for authentication...
[Still using TGT without formal definition]
## Core Concepts
### TGT
TGT is... [Finally defined, but too late]
After (correct):
## Amusement Park Analogy
...service center gives you a "wristband"...
[Pure analogy, no Kerberos terms]
## History
...
## Core Concepts
### TGT
TGT is a special Ticket that... [Formally defined]
## Analogy Mapping Table
| Amusement Park | Kerberos |
| Wristband | TGT |
[Now readers can connect analogy to formal terms]
## LDAP Relationship
...Kerberos issues TGT... [Safe to use - already defined]
When writing technical content:
When explaining multi-step processes (like protocols), separating "overview" from "details" forces readers to scroll back and forth, losing context.
Symptoms:
Instead of organizing by content type (all overviews together, all details together), organize by logical unit (each unit contains its overview AND details).
Before (problematic):
### Message Exchange Flow
#### Phase 1: AS Exchange (overview)
#### Phase 2: TGS Exchange (overview)
#### Phase 3: AP Exchange (overview)
### AS Exchange Message Format (details)
### TGS Exchange Message Format (details)
### AP Exchange Message Format (details)
Reader thinking: "I'm reading about AS-REQ format... wait, what was the purpose of AS Exchange again?" scrolls up
After (correct):
### AS Exchange: Get TGT with Password
(flow diagram + message table)
#### AS-REQ format
#### AS-REP format
### TGS Exchange: Get Service Ticket with TGT
(flow diagram + message table)
#### TGS-REQ format
#### TGS-REP format
### AP Exchange: Authenticate to Service
(flow diagram + message table)
#### AP-REQ format
#### AP-REP format
Each section is self-contained. Reader can understand one phase completely before moving on.
Passive reading leads to shallow understanding. Readers may feel they understand while reading, but can't apply the knowledge later.
Symptoms:
At the end of each major section, add questions that:
<details>) for self-paced learningGood questions target:
Bad questions:
#### 思考題
<details>
<summary>Q1:[Question that targets a common confusion point]</summary>
[Structured answer with examples if helpful]
</details>
<details>
<summary>Q2:[Question about design rationale or security]</summary>
[Answer explaining the "why"]
</details>
For authentication protocols:
For encryption/security:
For system design:
Place thought questions at the end of each major section, not at the end of the article. This:
As the author, you're too close to the material. You understand the concepts deeply, which makes it hard to spot gaps in explanation that would confuse a newcomer.
Symptoms:
After completing your article, use the Task tool to spawn a subagent that role-plays as a reader who knows nothing about the topic. This reader will identify:
After finishing the article:
1. Spawn a subagent with the "naive reader" prompt (see below)
2. The subagent reads the article and reports confusion points
3. For each confusion point, either:
- Add clarification directly to the article
- Add a thought question (思考題) to prompt deeper thinking
4. Repeat if major changes were made
Use this prompt when spawning the reader review subagent:
You are a reader who knows NOTHING about [TOPIC]. You have general intelligence
but zero domain knowledge about this subject.
Read the following article and identify:
1. Terms or concepts that are used but not clearly explained
2. Logical jumps where you feel lost ("how did we get from A to B?")
3. Assumptions the author seems to make about your prior knowledge
4. Sections where you understand the words but not the meaning
For each issue, explain:
- Where in the article the confusion occurs
- What specifically is unclear
- What question you would ask the author
Be honest about confusion. Don't pretend to understand. If something feels
vague or hand-wavy, say so.
Article to review:
[PASTE ARTICLE CONTENT]
| Feedback Type | Action |
|---|---|
| Missing definition | Add definition before first use |
| Unclear explanation | Expand with example or analogy |
| Logical gap | Add transitional explanation |
| Assumed knowledge | Add background section or link |
| Edge case question | Add as 思考題 with answer |
Subagent feedback:
"In the section about TGS Exchange, you mention 'session key' but I don't understand what makes it different from a regular encryption key or why it's called 'session' key."
Resolution options:
Add clarification:
Session Key(會話金鑰)是一個臨時的加密金鑰,只在這次「會話」
(session)期間有效。與長期金鑰不同,session key 用完即丟,
降低了金鑰洩露的風險。
Add as thought question:
<details>
<summary>Q:為什麼要用 Session Key 而不是直接用長期金鑰?</summary>
長期金鑰(如使用者密碼衍生的金鑰)如果頻繁使用,被竊取的風險較高。
Session Key 是臨時產生的,即使被竊取也只影響單次會話,大幅降低安全風險。
</details>
When writing articles that are part of a series, readers may land on an advanced article without having read the prerequisites, leading to confusion.
Symptoms:
At the start of every series article, add a prerequisite notice:
:::note
**前置閱讀**
本文假設你已經讀過系列的前幾篇文章,特別是:
- [Previous Article Title](/posts/previous-article-slug)——理解 X 和 Y 概念
如果你不熟悉 Z,建議先閱讀上述文章。本文會使用「Term A」、「Term B」等術語。
:::
From a FreeIPA certificate management article (part 4 of a Kerberos series):
:::note
**前置閱讀**
本文假設你已經讀過系列的前幾篇文章,特別是:
- [FreeIPA 實戰:部署企業級 Kerberos 環境](/posts/freeipa-kerberos-deployment)——理解 FreeIPA 架構和 Kerberos Principal
如果你不熟悉 Kerberos,建議先閱讀上述文章。本文會使用「Principal」、「keytab」等 Kerberos 術語。
:::
When writing technical content in Chinese (or other non-English languages), mixing English technical terms with the local language can create readability issues if not done consistently.
Symptoms:
Before writing, decide your terminology strategy:
| Strategy | When to Use | Example |
|---|---|---|
| All Chinese | Audience prefers native terms | 憑證、私鑰、公鑰 |
| All English | Technical audience, industry standard terms | certificate, private key |
| Mixed (recommended) | Bilingual audience, core terms in English | Certificate 是一份「數位身份證」 |
For the mixed approach (English core terms, Chinese explanations):
**English Term**(中文解釋) or **English Term** 是...Spacing rules:
✅ 當你申請 certificate 時,CA 會驗證你的身份
❌ 當你申請certificate時,CA會驗證你的身份
✅ 這個 private key 必須保密
❌ 這個private key必須保密
For articles with many technical terms, add a quick reference table early:
### 常見術語速查
| 術語 | 說明 |
|---|---|
| TLS | Transport Layer Security,HTTPS 使用的加密協議 |
| Private Key | 必須保密的密鑰,用於解密和簽章 |
| Public Key | 可公開的密鑰,用於加密和驗證簽章 |
| Certificate | 包含 public key 和身份資訊的數位文件 |
| CA | Certificate Authority,簽發 certificate 的機構 |
First mention (with explanation):
**Certificate** 是一份「數位身份證」,包含擁有者的身份資訊和 public key。
Subsequent mentions (term only):
當你連接到 HTTPS 網站時,伺服器會出示 certificate。
When synthesizing research from many sources (papers, docs, blog posts) into a technical report, the result often reads like a disorganized link dump or an overwhelming wall of text with no actionable takeaways.
Symptoms:
A survey report should help the reader make decisions, not just absorb information. Every section should answer: "So what? What should I do with this?"
1. Research Scope — What was surveyed, how many sources, what categories
2. Core Concepts — Define the framework/taxonomy FIRST (define before use)
3. Comparison Tables — Side-by-side tool/method comparisons
4. Detailed Analysis — Deep dives grouped by theme, not by source
5. Recommended Workflows — Concrete step-by-step procedures
6. Curated Resources — Top 10 (not top 100) with why each matters
7. Action Items — Numbered, specific next steps for the reader
Good comparison table:
| Tool | Tracing | Evaluation | Open Source | Best For |
|---|---|---|---|---|
| **LangSmith** | Best (LangChain native) | evaluate() API | No | LangChain ecosystem |
| **Langfuse** | Good (OTel) | DeepEval/RAGAS | Yes | Self-hosted, cost control |
Rules:
| Scenario | Recommended Stack |
|---|---|
| LangChain ecosystem | **LangSmith** + OpenEvals |
| Self-hosted priority | **Langfuse** + DeepEval |
When selecting from many sources, apply the Top-N with justification pattern:
1. **"Paper Title"** — Author (Year)
One-line summary of why this specific resource matters
https://url
Rules:
When documenting recommended workflows, use the named workflow pattern:
### Workflow A: Golden Dataset Driven (recommended for starting)
Step 1 → Step 2 → Step 3
### Workflow B: Production Data Flywheel (recommended for mature systems)
Step 1 → Step 2 → Step 3
Rules:
When reporting metrics or benchmarks, include production-ready thresholds:
| Metric | Description | Recommended | High-stakes Domain |
|---|---|---|---|
| **Faithfulness** | Grounded in context | > 0.85 | > 0.9 |
| **Relevance** | Answers the question | > 0.8 | > 0.85 |
This transforms abstract metrics into actionable standards.
Rules for tutorials and technical articles do not transfer directly to academic papers. A tutorial can teach through analogies, thought questions, prerequisite blocks, and recommended workflows. A paper must instead defend a research claim through precise terms, ordered concepts, evidence, limitations, and citations.
When using this skill on a paper draft, the goal is not to make the paper more interactive. The goal is to make the argument readable and defensible.
Do not add tutorial-only devices to the body of an academic paper:
The following rules apply strongly to academic writing:
Use this checklist when reviewing a thesis chapter, conference paper, or journal manuscript:
When applying technical-writing rules to a research paper, first remove tutorial-only guidance, then keep the structural rules that protect the argument. In the mail-log thesis draft, the reusable pattern is:
problem framing
-> observable evidence
-> data preparation
-> parser or template output
-> higher-level grouping
-> lifecycle or workflow interpretation
-> evaluation claim
-> explicit limitation
This pattern prevents common paper-draft failures:
When writing technical content:
Concept Ordering:
Section Structure:
Active Learning:
<details> blocksReader Review:
Series Articles:
Bilingual Terminology:
Research Survey Reports:
Academic Papers: