610 lines
16 KiB
Markdown
610 lines
16 KiB
Markdown
# Comprehensive Technical Writing Style Guide
|
|
|
|
This reference provides detailed guidance for creating professional, accessible, and user-friendly technical documentation.
|
|
|
|
## Content Model
|
|
|
|
### Content Structure
|
|
|
|
- **Hierarchical organization**: Top-level doc sets → Categories → Map topics → Articles
|
|
- **Category creation threshold**: 10+ articles required for new categories
|
|
- **Navigation depth**: Maximum 4 levels deep
|
|
- **Consistent content types**: Each with specific purposes and formats
|
|
- **Standard elements**: Every article includes titles, intros, permissions, etc.
|
|
|
|
## Article Structure and Standard Elements
|
|
|
|
### Titles
|
|
|
|
**Character limits:**
|
|
- Categories: 67 character limit
|
|
- Map topics: 63 character limit
|
|
- Articles: 80 character limit
|
|
|
|
**Formatting:**
|
|
- Use sentence case (not title case)
|
|
- Gerund titles for procedural content ("Creating...", "Configuring...")
|
|
- Avoid "How to" prefix unless required by product convention
|
|
|
|
**Examples:**
|
|
|
|
✅ Do:
|
|
- "Set up OAuth for a single-page app"
|
|
- "Creating a service principal" (procedural/gerund)
|
|
|
|
❌ Don't:
|
|
- "Setting Up OAuth for a Single-Page App" (title case)
|
|
- "How to set up OAuth" (avoid "How to")
|
|
|
|
### Intros
|
|
|
|
**Length requirements:**
|
|
- Articles: 1-2 sentences
|
|
- Categories/Map topics: 1 sentence
|
|
|
|
**Content:**
|
|
- Must explain what the content covers
|
|
- Be specific and actionable
|
|
- Avoid vague language
|
|
|
|
**Examples:**
|
|
|
|
✅ Do:
|
|
"This guide shows you how to enable OAuth for single-page apps using PKCE. You'll configure an app, create secrets, and test the flow."
|
|
|
|
❌ Don't:
|
|
"In this document, we will be covering OAuth for single-page applications in depth." (vague, long-winded)
|
|
|
|
### Permissions Statements
|
|
|
|
**Required for:** All tasks requiring specific permissions
|
|
|
|
**Format options:**
|
|
|
|
1. **Frontmatter** (preferred):
|
|
```yaml
|
|
---
|
|
required-permissions:
|
|
role: Owner
|
|
scope: Subscription
|
|
---
|
|
```
|
|
|
|
2. **Inline**:
|
|
"You need the Owner role at the subscription scope to complete these steps."
|
|
|
|
**Consistency:** Use the same language patterns across documentation.
|
|
|
|
### Required Sections
|
|
|
|
When applicable, include these sections:
|
|
|
|
**Prerequisites:**
|
|
- Use structured list format
|
|
- Be specific about versions, tools, access levels
|
|
|
|
Example:
|
|
- An Azure subscription
|
|
- The Azure CLI 2.60.0 or later
|
|
- Owner role at the subscription scope
|
|
|
|
**Product callouts:**
|
|
"This feature is available on the Enterprise plan only."
|
|
|
|
**Next steps and Further reading:**
|
|
- Provide clear next actions
|
|
- Link to related content
|
|
- Use descriptive link text
|
|
|
|
## Content Types Detailed
|
|
|
|
### 1. Conceptual Content
|
|
|
|
**Purpose:** Explains what something is and why it's useful
|
|
|
|
**Characteristics:**
|
|
- "About..." article pattern
|
|
- Defines concepts and terminology
|
|
- Explains when to use and tradeoffs
|
|
- Provides context without step-by-step instructions
|
|
|
|
**Example:**
|
|
"About service principals" — defines the concept, when to use it, and tradeoffs.
|
|
|
|
### 2. Referential Content
|
|
|
|
**Purpose:** Detailed information for active use
|
|
|
|
**Characteristics:**
|
|
- Syntax guides with complete parameter lists
|
|
- Tables for complex data relationships
|
|
- Alphabetical or logical organization
|
|
- Comprehensive but scannable format
|
|
|
|
**When to use tables vs. lists:**
|
|
- **Tables**: Multiple related properties per item
|
|
- **Lists**: Simple, single-dimension information
|
|
|
|
**Structure headers appropriately:**
|
|
- Long reference content benefits from clear section breaks
|
|
- Use consistent heading hierarchy
|
|
- Enable quick scanning and search
|
|
|
|
**Example:**
|
|
"CLI reference for `az ad sp`" — flags, options, examples.
|
|
|
|
### 3. Procedural Content
|
|
|
|
**Purpose:** Step-by-step task completion
|
|
|
|
**Characteristics:**
|
|
- Numbered lists (sequential steps)
|
|
- Gerund titles ("Creating...", "Configuring...")
|
|
- One action per step
|
|
- Clear prerequisites upfront
|
|
|
|
**Step structure:**
|
|
1. Optional information (if applicable)
|
|
2. Reason for the step (if not obvious)
|
|
3. Location where to perform action
|
|
4. Action to take
|
|
|
|
**Example:**
|
|
"Creating a service principal" — numbered steps start-to-finish.
|
|
|
|
### 4. Troubleshooting Content
|
|
|
|
**Purpose:** Error resolution and known issues
|
|
|
|
**Types:**
|
|
|
|
**Known issues** (separate articles):
|
|
- Complex problems requiring detailed explanation
|
|
- Multiple potential causes
|
|
- Ongoing or unresolved issues
|
|
|
|
**General troubleshooting** (embedded):
|
|
- Common errors for specific tasks
|
|
- Quick fixes and workarounds
|
|
- Embedded in main task articles
|
|
|
|
**Structure:**
|
|
- Symptom description
|
|
- Cause explanation
|
|
- Resolution steps
|
|
- Prevention guidance
|
|
|
|
**Example:**
|
|
"Fix: AADSTS700016 error" — symptoms, cause, resolution.
|
|
|
|
### 5. Quickstart Content
|
|
|
|
**Purpose:** Essential steps for quick setup
|
|
|
|
**Critical requirements:**
|
|
- **Time limit**: 5 minutes / 600 words maximum
|
|
- **Specific intro phrasing**: Must clarify audience and scope
|
|
- **Audience clarification**: Required for complex products
|
|
|
|
**Structure:**
|
|
1. Before you begin (2-3 prerequisites)
|
|
2. Create resources (1-2 commands or clicks)
|
|
3. Run and verify (1 command or screenshot)
|
|
4. Clean up resources
|
|
|
|
**Intro pattern:**
|
|
"In this quickstart, you [accomplish X]. This guide is for [audience] who want to [goal]."
|
|
|
|
**Example:**
|
|
"Create and deploy your first function app" — 3-5 steps, done in 5 minutes.
|
|
|
|
### 6. Tutorial Content
|
|
|
|
**Purpose:** Detailed workflow guidance with real-world examples
|
|
|
|
**Requirements:**
|
|
- **Conversational tone**: Required for engagement
|
|
- **Real examples**: Must use actual, working examples (no placeholder code)
|
|
- **Conclusion structure**: Specific requirements for wrap-up
|
|
|
|
**Characteristics:**
|
|
- End-to-end scenario
|
|
- Explains "why" not just "how"
|
|
- Includes best practices
|
|
- Shows complete, working solution
|
|
|
|
**Conclusion must include:**
|
|
- Summary of what was accomplished
|
|
- Link to related concepts
|
|
- Suggested next steps
|
|
- Resources for going deeper
|
|
|
|
**Example:**
|
|
"Build a news summarizer with Functions and Cosmos DB" — end-to-end scenario.
|
|
|
|
### 7. Release Notes
|
|
|
|
**Purpose:** Version-specific changes and updates
|
|
|
|
**Requirements:**
|
|
- **Comprehensive formatting**: Specific categorization rules
|
|
- **Change categorization**: Features, fixes, improvements, breaking changes, etc.
|
|
|
|
**Categories (in order):**
|
|
1. Breaking Changes (if any)
|
|
2. Features (new capabilities)
|
|
3. Improvements (enhancements to existing features)
|
|
4. Fixes (bug fixes)
|
|
5. Documentation (doc updates)
|
|
6. Dependencies (version updates)
|
|
|
|
**Format:**
|
|
```markdown
|
|
## Version X.Y.Z - YYYY-MM-DD
|
|
|
|
### Breaking Changes
|
|
- Change description with migration path
|
|
|
|
### Features
|
|
- New feature description with brief example
|
|
|
|
### Improvements
|
|
- Enhancement description
|
|
|
|
### Fixes
|
|
- Bug fix description (can reference issue numbers)
|
|
```
|
|
|
|
**Example:**
|
|
"v1.8.0" — Features, fixes, breaking changes.
|
|
|
|
### Combining Content Types
|
|
|
|
**Guidelines:**
|
|
- Longer articles can combine multiple content types
|
|
- Follow content ordering guidelines
|
|
- Use clear transitions between sections
|
|
- Include troubleshooting information frequently
|
|
|
|
**Transition examples:**
|
|
- "Now that you understand the key concepts, follow these steps to enable the feature."
|
|
- "With the basics covered, let's explore advanced configurations."
|
|
|
|
## Content Ordering Guidelines
|
|
|
|
### Standard Content Sequence
|
|
|
|
1. **Conceptual** - What it is and why it's useful
|
|
2. **Referential** - Detailed information for active use
|
|
3. **Procedural** (in this specific order):
|
|
- **Enabling** - Initial setup/activation
|
|
- **Using** - Regular operational tasks
|
|
- **Managing** - Administrative/configuration tasks
|
|
- **Disabling** - Deactivation procedures
|
|
- **Destructive** - Deletion/removal tasks
|
|
4. **Troubleshooting** - Error resolution
|
|
|
|
### Within Procedural Steps
|
|
|
|
Order information within each step:
|
|
|
|
1. **Optional information** (if applicable)
|
|
- "If you already have X, skip this step."
|
|
2. **Reason** for the step (if not obvious)
|
|
- "This keeps latency low."
|
|
3. **Location** where to perform the action
|
|
- "In the Azure portal, go to Resource groups..."
|
|
4. **Action** to take
|
|
- "...and select Create."
|
|
|
|
**Example:**
|
|
"Create a resource group in the same region as your app. This keeps latency low. In the Azure portal, go to Resource groups and select Create. Name it `my-rg` and select a region."
|
|
|
|
## Style Guide Key Points
|
|
|
|
### Language and Tone
|
|
|
|
**Principles:**
|
|
- Clear, simple, approachable language
|
|
- Active voice preferred (passive acceptable when appropriate)
|
|
- Sentence case for titles and headers
|
|
- Avoid jargon, idioms, regional phrases
|
|
- Write for global, multilingual audience
|
|
|
|
**Examples:**
|
|
|
|
✅ Do:
|
|
"Run the command and wait for the confirmation message."
|
|
|
|
❌ Don't:
|
|
"One could conceivably run said command prior to proceeding." (jargon, passive, unclear)
|
|
|
|
### Technical Writing Conventions
|
|
|
|
**Code formatting:**
|
|
- Use `backticks` for code, file names, commands, parameters
|
|
- Keep code blocks to ~60 character line length
|
|
- Avoid command prompts in examples (just show commands)
|
|
- Use syntax highlighting with proper language tags
|
|
|
|
**UI elements:**
|
|
- Format UI text in **bold** (buttons, menu items, fields)
|
|
- Use exact text from the interface
|
|
- Use > for navigation paths: **File > Save As**
|
|
|
|
**Placeholders:**
|
|
- ALL-CAPS with dashes: YOUR-PROJECT, YOUR-RESOURCE-GROUP
|
|
- Must explain placeholders before or after use
|
|
- Be consistent with placeholder naming
|
|
|
|
**Images:**
|
|
- Include alt text for all images (40-150 characters)
|
|
- Alt text describes what's shown, not just "screenshot"
|
|
- Reference images in text: "as shown in the following image"
|
|
|
|
**Examples:**
|
|
|
|
✅ Good:
|
|
- "Select **Create** and run `az group create --name MY-RG --location westus`."
|
|
- "Replace YOUR-RG with the name of your resource group."
|
|
- Alt text: "Screenshot of the Azure portal showing the Create resource group form with fields completed"
|
|
|
|
### Structure and Format
|
|
|
|
**Lists:**
|
|
|
|
**Numbered lists** (procedures):
|
|
- Capitalize first word
|
|
- Use periods for complete sentences
|
|
- One action per step
|
|
- Sequential order matters
|
|
|
|
**Bullet lists** (non-sequential):
|
|
- Use asterisks (*) not dashes
|
|
- Capitalize first word
|
|
- Alphabetize when appropriate
|
|
- Parallel structure
|
|
|
|
**Tables:**
|
|
- Use consistent header formatting
|
|
- Align content properly (left for text, right for numbers)
|
|
- Include header row
|
|
- Keep cells concise
|
|
|
|
**Alert Types** (use sparingly):
|
|
|
|
- **Note**: Neutral, supplementary information
|
|
- "The CLI caches credentials for 1 hour."
|
|
- **Tip**: Helpful shortcuts or best practices
|
|
- "Use tags to organize resources across subscriptions."
|
|
- **Important**: Critical information that affects outcomes
|
|
- "Do not share client secrets. Rotate them every 90 days."
|
|
- **Warning**: Potential risks or consequences
|
|
- "Deleting the resource group removes all resources in it."
|
|
- **Caution**: Actions that could cause data loss or damage
|
|
- "Export data before disabling the feature to avoid loss."
|
|
|
|
### Links and References
|
|
|
|
**Internal links:**
|
|
- Use appropriate formatting for your doc system
|
|
- Link to specific sections when helpful
|
|
- Keep link text descriptive
|
|
|
|
**Link text:**
|
|
- Be descriptive (tell what user will find)
|
|
- Never use "click here" or "read more"
|
|
- Include context when needed
|
|
|
|
**External links:**
|
|
- Provide full context
|
|
- Explain why user should follow the link
|
|
- Consider link rot (prefer stable URLs)
|
|
|
|
**Examples:**
|
|
|
|
✅ Do:
|
|
- "See the authentication overview for background on OAuth 2.0."
|
|
- "For the OAuth 2.1 draft, see the IETF working group page."
|
|
|
|
❌ Don't:
|
|
- "Click here for more info."
|
|
- "Read more." (no context)
|
|
|
|
## Process and Workflow Elements
|
|
|
|
### Topics (Metadata)
|
|
|
|
**Character limits:**
|
|
- Keep topics concise
|
|
- Follow selection criteria for your platform
|
|
|
|
**Forbidden patterns:**
|
|
- Avoid duplicating title text
|
|
- Don't use as keyword stuffing
|
|
|
|
### Tool Switchers
|
|
|
|
**When to use:**
|
|
- Multiple interfaces for same task (Portal, CLI, PowerShell, Terraform)
|
|
- All methods achieve same outcome
|
|
- Each deserves equal treatment
|
|
|
|
**Format:**
|
|
- Use tabbed interface when supported
|
|
- Consistent ordering across docs
|
|
- Complete examples in each tab
|
|
|
|
**Example:**
|
|
"Portal | CLI | PowerShell | Terraform"
|
|
|
|
### Call to Action (CTA)
|
|
|
|
**Requirements:**
|
|
- Consistent formatting
|
|
- Clear, action-oriented language
|
|
- Specific next step
|
|
|
|
**Examples:**
|
|
- Next steps: "Next, secure your API keys with Key Vault."
|
|
- CTA button text: "Save", "Create", "Deploy" (not "Click to save")
|
|
|
|
### Reusables and Variables
|
|
|
|
**When to use reusables:**
|
|
- Content repeated verbatim across multiple articles
|
|
- Maintenance efficiency matters
|
|
- Content unlikely to need article-specific variations
|
|
|
|
**When to inline content:**
|
|
- Article-specific variations likely
|
|
- Better readability in source
|
|
- Single-use content
|
|
|
|
**Variable usage:**
|
|
- Define at document start or first use
|
|
- Be consistent with variable names
|
|
- Match placeholder conventions
|
|
|
|
**Examples:**
|
|
- "Set `YOUR-RG`, `YOUR-LOCATION`, and `YOUR-APP-NAME`."
|
|
- Reusable snippet: Common troubleshooting block for network timeouts
|
|
|
|
## Accessibility Requirements
|
|
|
|
### Alt Text
|
|
|
|
**Requirements:**
|
|
- 40-150 characters
|
|
- Describe what's shown, not "screenshot of..."
|
|
- Include relevant text from image
|
|
- Convey information, not aesthetics
|
|
|
|
**Examples:**
|
|
✅ "Azure portal showing the Create resource group form with fields completed"
|
|
❌ "Screenshot" (too vague)
|
|
|
|
### Structure
|
|
|
|
**Heading hierarchy:**
|
|
- Use proper heading levels (H1 → H2 → H3)
|
|
- Don't skip levels
|
|
- One H1 per page (the title)
|
|
|
|
**Reading order:**
|
|
- Content makes sense when read linearly
|
|
- Screen reader compatible
|
|
|
|
**Color and contrast:**
|
|
- Don't rely on color alone
|
|
- Ensure sufficient contrast
|
|
- Use patterns or labels in addition to color
|
|
|
|
### Links
|
|
|
|
**Descriptive link text:**
|
|
- Tells where link goes
|
|
- Makes sense out of context
|
|
- Avoid "click here"
|
|
|
|
### ARIA (when applicable)
|
|
|
|
- Use ARIA labels for complex interactions
|
|
- Ensure keyboard navigation works
|
|
- Test with screen readers
|
|
|
|
## Localization Considerations
|
|
|
|
**Write for translation:**
|
|
- Avoid idioms and colloquialisms
|
|
- Use simple sentence structure
|
|
- Be explicit (avoid implied information)
|
|
- Watch for cultural references
|
|
|
|
**Date and number formatting:**
|
|
- Use international formats
|
|
- Provide context for ambiguous formats
|
|
- Let localization system handle conversion
|
|
|
|
**Right-to-left (RTL) languages:**
|
|
- Ensure UI accommodates RTL
|
|
- Test with RTL languages
|
|
- Avoid directional language ("left sidebar")
|
|
|
|
**String externalization:**
|
|
- Use localization keys
|
|
- Avoid concatenating strings
|
|
- Plan for text expansion (some languages are longer)
|
|
|
|
## Quality Checklist
|
|
|
|
Use this checklist before publishing:
|
|
|
|
**Content:**
|
|
- [ ] Accurate and technically correct
|
|
- [ ] Appropriate content type for task
|
|
- [ ] Complete (no missing steps or information)
|
|
- [ ] Examples work as documented
|
|
- [ ] Tone appropriate for audience
|
|
|
|
**Structure:**
|
|
- [ ] Clear title (sentence case, within character limits)
|
|
- [ ] Brief intro (1-2 sentences)
|
|
- [ ] Prerequisites listed when needed
|
|
- [ ] Logical flow and organization
|
|
- [ ] Clear next steps
|
|
|
|
**Style:**
|
|
- [ ] Sentence case for headers
|
|
- [ ] Active voice (mostly)
|
|
- [ ] Code formatted correctly
|
|
- [ ] Placeholders explained
|
|
- [ ] Links descriptive and working
|
|
|
|
**Accessibility:**
|
|
- [ ] Alt text for all images
|
|
- [ ] Proper heading hierarchy
|
|
- [ ] Sufficient color contrast
|
|
- [ ] Keyboard accessible
|
|
|
|
**Polish:**
|
|
- [ ] Spell check passed
|
|
- [ ] Grammar correct
|
|
- [ ] Consistent terminology
|
|
- [ ] No jargon or explained when necessary
|
|
|
|
## Summary: Quick Decision Tree
|
|
|
|
**What type of content do I need?**
|
|
|
|
- Explaining a concept? → **Conceptual**
|
|
- Documenting API/syntax? → **Referential**
|
|
- How to do a task? → **Procedural**
|
|
- Fixing errors? → **Troubleshooting**
|
|
- Quick start (< 5 min)? → **Quickstart**
|
|
- Learning journey? → **Tutorial**
|
|
- Version changes? → **Release Notes**
|
|
|
|
**How should I structure it?**
|
|
|
|
1. Title (sentence case, descriptive)
|
|
2. Intro (1-2 sentences, specific)
|
|
3. Prerequisites (if needed)
|
|
4. Main content (type-appropriate)
|
|
5. Troubleshooting (when helpful)
|
|
6. Next steps
|
|
|
|
**What voice should I use?**
|
|
|
|
- Active, direct, clear
|
|
- Simple language
|
|
- Appropriate for global audience
|
|
- Professional but approachable
|
|
|
|
**Did I make it accessible?**
|
|
|
|
- Alt text on images
|
|
- Proper headings
|
|
- Descriptive links
|
|
- Sufficient contrast
|