Skip to content
Published on

Technical Report Writing Guide: From Structure Design to Data Visualization and Automation

Authors
  • Name
    Twitter

Technical Report Writing Guide

Introduction

If there is one skill as important as writing code for engineers, it is the ability to write technical reports. No matter how brilliant your technical achievements are, if they are not properly communicated through reports, they cannot inform decision-making or contribute to the growth of your team and organization.

In practice, you write project status reports every week, create post-mortems when incidents occur, and produce design documents when introducing new systems. The ability to write structured and clear reports in all these situations is an essential competency for growing into a senior engineer.

This article covers report writing methods by type commonly used in the IT industry, logical structure design using the Pyramid Principle and MECE framework, effective data visualization techniques, and report automation tools -- all with a practical focus.

Types and Purposes of Reports

Reports written in the IT industry can be broadly classified into five categories based on their purpose. Understanding the characteristics of each type helps you write effective reports suited to the situation.

Major Report Types

TypePurposeAudienceFrequencyKey Elements
Project Status ReportShare progressManagers, stakeholdersWeekly/biweeklyProgress rate, risks, next steps
Incident ReportAnalyze cause and prevent recurrenceEntire engineering teamOn incidentTimeline, root cause, remediation
Technical Analysis ReportPresent rationale for technical decisionsTech leads, architectsOn decisionComparative analysis, benchmarks, recommendation
Post-mortemRetrospective on project/incidentEntire teamOn project completionLessons learned, improvements, action items
Design DocumentShare and approve system designTech leads, team membersNew feature/systemRequirements, design, alternatives, trade-offs

ADR (Architecture Decision Record)

An ADR is a lightweight document that records architecture decisions. It is more concise than a full design document and focuses on preserving the context and rationale behind specific technical decisions.

# ADR-001: Message Queue Selection

## Status

Accepted (2026-03-10)

## Context

We need asynchronous message processing for the order processing system.
Current daily order volume is 500,000, with a peak requirement of
1,000 transactions per second.

## Decision

We will use Apache Kafka as our message queue.

## Rationale

- High throughput: capable of processing hundreds of thousands of messages per second
- Durability: disk-based storage prevents message loss
- Stream processing: real-time processing support via Kafka Streams

## Alternatives Considered

- RabbitMQ: throughput limitation (approximately 10,000 per second)
- Amazon SQS: vendor lock-in concerns

## Consequences

Additional infrastructure costs for building and operating a Kafka cluster.
The team needs Kafka operational experience, and learning costs will be incurred.

Report Structure Design

A good report is systematically structured so that readers can quickly find the information they need.

The Pyramid Principle

Barbara Minto's Pyramid Principle is the core framework for report structure design. It is an approach where you present the conclusion first and then lay out the supporting evidence hierarchically.

Three Rules of the Pyramid Principle:

  1. Conclusion First (Top-down): Deliver the most important message first
  2. Logical Grouping: Group related content into sub-groups
  3. Logical Ordering: Arrange by chronological order, structural order, or order of importance

Bad Example (Bottom-up):

Our team conducted performance testing for 3 weeks. We performed load testing using JMeter and also analyzed database queries. We reviewed options for adding a cache layer and optimizing DB indexes. In conclusion, adding a cache layer can reduce response time by 70%.

Good Example (Top-down):

Adding a cache layer can reduce API response time by 70%. After 3 weeks of performance analysis, the bottleneck was identified as the DB query stage (85% of total latency). Comparing cache implementation and DB index optimization, cache implementation proved 3x more cost-effective.

The MECE Framework

MECE (Mutually Exclusive, Collectively Exhaustive) is a framework that prevents gaps and overlaps in analysis.

  • Mutually Exclusive: Each item should not overlap with others
  • Collectively Exhaustive: All possibilities should be covered without omission

MECE Application Example - System Performance Degradation Root Cause Analysis:

Performance Degradation Causes
├── Infrastructure Layer
│   ├── CPU bottleneck
│   ├── Memory shortage
│   ├── Disk I/O overload
│   └── Network latency
├── Application Layer
│   ├── Inefficient algorithms
│   ├── Memory leaks
│   ├── Thread contention
│   └── Connection pool exhaustion
└── Data Layer
    ├── Query inefficiency
    ├── Missing indexes
    ├── Table lock contention
    └── Data skew

Standard Report Structure

Most technical reports follow this structure:

SectionContentProportion
Executive SummaryKey conclusions and recommendations5-10%
BackgroundContext, purpose, and scope of the report10-15%
AnalysisData analysis, comparisons, and validation results30-40%
RecommendationsSpecific proposals and execution plans15-20%
Next StepsFollow-up action items and timeline5-10%
AppendixDetailed data and reference materialsAs needed

Effective Writing Principles

1. Clarity

The most important principle in technical report writing is clarity. Ambiguous expressions breed misunderstanding and can lead to poor decisions.

Vague vs. Clear Expressions:

Vague ExpressionClear Expression
Performance improved significantlyResponse time decreased from 320ms to 95ms average, a 70% reduction
A significant number of users were affectedApproximately 150,000 out of 1.2 million total users (12.5%) were affected
It will be completed soonCompletion is expected by March 20, with 2 remaining tasks
The system is unstableP99 response time exceeded 5 seconds 47 times in the last 7 days

2. Conciseness

Reduce unnecessary modifiers and focus on the core message.

  • Verbose: "In order to improve the overall performance of this system, after conducting an extensive review from various perspectives across multiple dimensions, we have arrived at the conclusion that implementing a cache layer would be the most optimal and best course of action."
  • Concise: "Performance analysis indicates that implementing a cache layer is the optimal solution."

3. Objectivity

Write based on data and evidence rather than subjective judgment.

  • Subjective: "This technology is excellent and must be adopted"
  • Objective: "Benchmark results show this technology achieves 40% higher throughput and 25% lower operational costs compared to the current solution"

4. Audience Awareness

The same content should be presented differently depending on the audience.

AudienceInterestsWriting Approach
C-LevelBusiness impact, cost, ROINumbers-focused, 1-page summary
Tech LeadsArchitecture, scalability, riskTechnical detail, alternative comparisons
Team MembersImplementation approach, timeline, rolesExecution plan focused
Non-technical StakeholdersSchedule, deliverables, impactMinimize jargon, use analogies

Data Visualization Techniques

Data visualization is a powerful tool for conveying complex information intuitively. Choosing the right chart is the first step.

Chart Selection Guide

Data TypeRecommended ChartUse Case
Time series trendLine ChartMonthly traffic changes, response time trends
Comparison between itemsBar ChartError rates by service, deployments by team
Proportion/compositionPie ChartError types by percentage (5 or fewer items)
DistributionHistogram, Box PlotResponse time distribution, latency distribution
CorrelationScatter PlotRelationship between CPU usage and response time
Current metricsGauge, KPI CardCurrent server availability, SLA achievement rate

Chart Selection Considerations

  1. Use pie charts for 5 or fewer items only: Bar charts are more effective when there are many categories
  2. Avoid dual-axis charts when possible: They can confuse readers; separate into individual charts instead
  3. Never use 3D charts: They distort data and make it difficult to read accurate values
  4. Always start axes at zero: Truncated axes can exaggerate differences (exception: time series data)

Color Usage Principles

  • Traffic light color scheme: Red (danger/failure), yellow (caution/warning), green (normal/success) for intuitive status representation
  • Consider color blindness: Do not rely solely on red-green combinations; use patterns or shapes as well
  • Consistency: Use the same color for the same item throughout the entire report
  • Emphasis: Use highlight colors only for key data; render the rest in grayscale

Table Design Principles

Tables are effective for precise numerical comparisons. Following these principles greatly improves readability.

  • Right-align numbers, left-align text
  • Visually distinguish header rows (bold or background color)
  • Use commas for thousands separators to improve readability of large numbers
  • Consider alternating row colors when rows exceed 10
  • Specify units in headers to avoid repeating them in each cell

Writing Technical Reports in Practice

Project Status Report Template

# Project Status Report

**Project**: Payment System Refactoring
**Reporting Period**: 2026-03-07 to 2026-03-13
**Author**: John Kim
**Status**: On Track

## Executive Summary

Phase 2 of the payment system refactoring is proceeding on schedule.
This week's key achievement was completing 3 legacy API migrations.
Next week, we will conduct performance testing and staging deployment.

## Key Progress

| Milestone             | Target Date | Status      | Progress |
| --------------------- | ----------- | ----------- | -------- |
| API Migration         | 03-14       | In Progress | 75%      |
| Performance Testing   | 03-21       | Planned     | 0%       |
| Staging Deployment    | 03-25       | Planned     | 0%       |
| Production Deployment | 04-01       | Planned     | 0%       |

## Completed This Week

- Payment inquiry API v2 migration completed
- Refund processing API v2 migration completed
- Settlement API v2 migration completed

## Risks and Issues

| Risk                         | Impact | Likelihood | Mitigation                               |
| ---------------------------- | ------ | ---------- | ---------------------------------------- |
| External PG API changes      | High   | Medium     | Pre-coordination with PG completed       |
| Test environment instability | Medium | High       | Dedicated test cluster being provisioned |

## Next Week Plan

1. Complete remaining 2 API migrations
2. Set up integration test environment
3. Write performance test scenarios

Incident Report Template

# Incident Report

**Incident ID**: INC-2026-0312-001
**Severity**: P1 (Critical)
**Author**: Chris Park
**Date**: 2026-03-12

## Summary

From 14:23 to 15:47 KST on March 12, 2026, the payment service
experienced a full outage lasting approximately 84 minutes.
Approximately 320,000 users were affected, with an estimated
revenue loss of approximately $90,000.

## Timeline

| Time (KST) | Event                                                      |
| ---------- | ---------------------------------------------------------- |
| 14:23      | Payment success rate alert triggered (below 95% threshold) |
| 14:25      | On-call engineer acknowledged, investigation started       |
| 14:35      | DB connection pool exhaustion confirmed                    |
| 14:45      | Newly deployed batch job suspected as root cause           |
| 15:02      | Batch job stopped, connection pool manually cleared        |
| 15:30      | Payment success rate recovered above 99%                   |
| 15:47      | Normal state confirmed, incident declared resolved         |

## Root Cause Analysis

A newly deployed settlement batch job was missing a transaction
timeout configuration, causing long-running queries to hold DB
connections without releasing them. The connection pool (max 100)
was exhausted within 30 minutes, preventing new payment requests
from being processed.

## Remediation Actions

| Action Item                                    | Owner      | Deadline | Priority |
| ---------------------------------------------- | ---------- | -------- | -------- |
| Set transaction timeout for batch jobs         | Chris Park | 03-14    | P0       |
| Add connection pool monitoring alerts          | Sarah Lee  | 03-17    | P1       |
| Add timeout validation to deployment checklist | Mike Choi  | 03-21    | P1       |
| Review connection pool size expansion          | Chris Park | 03-28    | P2       |

## Lessons Learned

1. Batch jobs must follow the same timeout policies as APIs
2. Resource pool usage monitoring and alerting is essential
3. Deployment checklists must include timeout/resource configuration validation

Technical Comparison Analysis Report Example

# Caching Solution Comparison Analysis

## Executive Summary

We recommend Redis as the user session caching solution.
It offers richer data structure support compared to Memcached,
and its persistence feature enables data recovery during failures.

## Comparative Analysis

| Criteria                | Redis                          | Memcached          | Weight |
| ----------------------- | ------------------------------ | ------------------ | ------ |
| Throughput (TPS)        | 100K+                          | 120K+              | 20%    |
| Data Structure Support  | Rich (String, Hash, List, Set) | Simple (Key-Value) | 25%    |
| Persistence             | Supported (RDB, AOF)           | Not Supported      | 20%    |
| Clustering              | Native support                 | Client-side        | 15%    |
| Operational Convenience | High                           | Moderate           | 10%    |
| Community/Ecosystem     | Very active                    | Active             | 10%    |
| **Overall Score**       | **87/100**                     | **71/100**         | -      |

Review and Feedback Process

A systematic review process is essential for improving report quality.

Self-Review Checklist

Review the following items before submitting your report.

Structure Review:

  • Can the core content be understood by reading the Executive Summary alone?
  • Are sections arranged in a logical order?
  • Do conclusions and recommendations align with the analysis content?

Content Review:

  • Are sources cited for all figures and data?
  • Are technical terms explained (depending on the audience)?
  • Are assumptions clearly stated?
  • Are action items specific (owner, deadline, expected outcome)?

Format Review:

  • Are there any typos or grammatical errors?
  • Do charts and tables have titles and units?
  • Is terminology used consistently?
  • Are page numbers and table of contents accurate?

Peer Review Guide

Peer review is a method that dramatically improves report quality. Here is a guide for effective peer reviews.

Guide for Reviewers:

  1. First Pass - Structure and Logic: Read the overall flow and check for logical leaps or omissions
  2. Second Pass - Content Accuracy: Verify the accuracy of figures, data, and technical content
  3. Third Pass - Readability: Review sentence structure, terminology consistency, and visualization appropriateness

Feedback Writing Principles:

  • Be specific: Instead of "This part is vague," say "Adding the measurement environment (server specs, concurrent users) to the performance figures on page 3 would be helpful"
  • Be constructive: Do not just point out problems; suggest improvement directions as well
  • Prioritize: Distinguish between critical and minor feedback (P0: must fix, P1: recommended, P2: optional)

Report Automation Tools

Automating repetitive report writing saves time and maintains consistency.

Report Automation with Jupyter Notebooks

Jupyter Notebooks are a powerful tool that integrates data analysis and reporting in one place.

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta

# Automated weekly report data collection
def generate_weekly_report(start_date, end_date):
    """Auto-generate weekly performance report"""

    # Load data
    metrics = pd.read_csv("metrics.csv", parse_dates=["timestamp"])
    mask = (metrics["timestamp"] >= start_date) & (metrics["timestamp"] <= end_date)
    weekly_data = metrics[mask]

    # Calculate key metrics
    summary = {
        "avg_response_time_ms": weekly_data["response_time"].mean(),
        "p99_response_time_ms": weekly_data["response_time"].quantile(0.99),
        "error_rate_pct": (weekly_data["status"] >= 500).mean() * 100,
        "total_requests": len(weekly_data),
        "uptime_pct": (1 - weekly_data["downtime_minutes"].sum() / (7 * 24 * 60)) * 100,
    }

    return summary

# Generate charts
def create_trend_chart(data, metric_name, title):
    """Generate time series trend chart"""
    fig, ax = plt.subplots(figsize=(10, 5))
    ax.plot(data["timestamp"], data[metric_name], linewidth=2)
    ax.set_title(title, fontsize=14, fontweight="bold")
    ax.set_xlabel("Date")
    ax.set_ylabel(metric_name)
    ax.grid(True, alpha=0.3)
    plt.tight_layout()
    return fig

Markdown-Based Report Tools

ToolFeaturesBest For
Markdown + GitVersion control, code review processTechnical docs, design docs, ADRs
ConfluenceTeam collaboration, page hierarchyProject documentation, meeting notes
NotionFlexible structure, database featuresProject management, knowledge base
Google DocsReal-time co-editing, commentingDrafts, collaborative editing
DocusaurusStatic site generation, versioningAPI documentation, developer guides

GitHub-Based Report Workflow

Using GitHub, you can manage reports just like code.

# .github/workflows/weekly-report.yml
name: Weekly Performance Report

on:
  schedule:
    - cron: '0 9 * * 1' # Every Monday at 9 AM

jobs:
  generate-report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Generate report
        run: python scripts/generate_weekly_report.py

      - name: Create PR with report
        run: |
          git checkout -b report/weekly-$(date +%Y-%m-%d)
          git add reports/
          git commit -m "Add weekly report for $(date +%Y-%m-%d)"
          gh pr create --title "Weekly Report $(date +%Y-%m-%d)" --body "Auto-generated weekly performance report"

Dashboard Tools

When real-time monitoring is needed, leverage dashboard tools.

ToolFeaturesData Sources
GrafanaOpen source, rich visualizationPrometheus, InfluxDB, Elasticsearch
DatadogSaaS, unified monitoringAPM, infrastructure, logs
KibanaElasticsearch integration, log analysisElasticsearch
MetabaseOpen source, non-technical friendlyMySQL, PostgreSQL, MongoDB
RedashOpen source, SQL-based queriesVarious DBs, APIs

Common Mistakes and How to Fix Them

Top 10 Report Writing Mistakes

RankMistakeHow to Fix
1Listing data without conclusionsApply the Pyramid Principle; lead with conclusions
2Writing without considering the audienceAnalyze the audience, then choose appropriate terminology and detail level
3Vague expressions without numbersUse specific figures wherever possible
4Overly long sentences and paragraphsKeep sentences under 25 words, paragraphs to 3-5 sentences
5Mismatch between charts and dataCross-verify charts against source data after creation
6Conclusions without action itemsSpecify owner, deadline, and expected outcome for every recommendation
7Not stating assumptionsDocument assumptions and preconditions in a dedicated section
8Inconsistent terminologyCreate a glossary and maintain consistency throughout
9Missing citationsCite sources and collection dates for all external data
10Excessive decoration and complex chartsFollow simple and clear visualization principles

Conclusion

Technical report writing is not just document work. It is a core competency for structuring complex technical content and driving decisions based on data.

Here is a summary of what we covered in this article:

  1. Understand Report Types: Choose the right type for the situation -- status reports, incident reports, technical analysis reports, post-mortems, and design documents
  2. Design Structure: Present conclusions first using the Pyramid Principle, and prevent gaps and overlaps using the MECE framework
  3. Writing Principles: Always keep clarity, conciseness, objectivity, and audience awareness in mind
  4. Data Visualization: Select charts appropriate for your data type, and follow color and layout principles
  5. Review Process: Improve quality through self-review checklists and peer reviews
  6. Automation: Use tools to automate repetitive reports

Writing reports may take considerable time at first, but as you use templates and practice repeatedly, your efficiency will steadily improve. Remember that a single well-written report can create a greater impact than 100 lines of code.

References

  • Barbara Minto, "The Pyramid Principle: Logic in Writing and Thinking"
  • Edward Tufte, "The Visual Display of Quantitative Information"
  • Google Engineering Practices - Design Documents
  • Atlassian Incident Management Handbook
  • IEEE Standard for Software and Systems Engineering - Life Cycle Processes