Split View: 기술 문서 영어 작성 가이드: RFC·ADR·Design Doc·Tech Spec 템플릿과 실전 표현
기술 문서 영어 작성 가이드: RFC·ADR·Design Doc·Tech Spec 템플릿과 실전 표현
- 들어가며
- 네 가지 기술 문서 유형 비교
- RFC (Request for Comments) 작성 가이드
- ADR (Architecture Decision Record) 작성 가이드
- Design Doc (Google 스타일) 작성 가이드
- Tech Spec 작성 가이드
- 리뷰 피드백 영어 표현
- 비영어권 화자가 자주 범하는 실수
- 실전 팁: 문서 작성 워크플로우
- 유용한 연결어와 전환 표현
- 마치며
- 참고자료

들어가며
소프트웨어 엔지니어링에서 코드만큼 중요한 것이 기술 문서(Technical Documentation)다. 아무리 뛰어난 아키텍처 결정이라도 문서로 남기지 않으면 팀의 지식이 되지 못하고, 같은 논의가 반복되며, 온보딩에 시간이 낭비된다. 특히 글로벌 팀에서 일하는 비영어권 엔지니어에게 영어 기술 문서 작성은 이중의 도전이다. 기술적 판단을 정확하게 표현해야 할 뿐 아니라, 영어 독자가 기대하는 문서 구조와 표현 관례도 따라야 한다.
이 글에서는 소프트웨어 엔지니어가 가장 자주 작성하는 네 가지 기술 문서 유형을 다룬다.
- RFC (Request for Comments): 팀 전체의 의견을 구하는 제안 문서
- ADR (Architecture Decision Record): 아키텍처 의사결정을 기록하는 짧은 문서
- Design Doc: 시스템 설계를 상세하게 기술하는 문서 (Google 스타일)
- Tech Spec: 기술 사양을 정의하는 실행 중심 문서
각 문서 유형의 구조, 템플릿, 섹션별 영어 표현, 리뷰 피드백 관례, 비영어권 화자가 자주 범하는 실수까지 실전 중심으로 정리했다.
네 가지 기술 문서 유형 비교
먼저 각 문서 유형의 특성을 비교해 보자.
| 항목 | RFC | ADR | Design Doc | Tech Spec |
|---|---|---|---|---|
| 목적 | 제안과 피드백 수집 | 의사결정 기록 | 시스템 설계 상세 기술 | 기술 사양 정의 |
| 분량 | 2-10페이지 | 1-2페이지 | 5-20페이지 | 3-15페이지 |
| 독자 | 팀 전체, 이해관계자 | 현재/미래 팀원 | 엔지니어링 팀, 리더십 | 구현 담당 엔지니어 |
| 결정 시점 | 결정 전 (의견 수집) | 결정 직후 (기록) | 구현 전 (설계 합의) | 구현 직전 (사양 확정) |
| 수명 | 결정 후 아카이브 | 영구 보존 | 프로젝트 기간 동안 갱신 | 구현 완료 시까지 |
| 대표 기업 | IETF, Rust, Uber | ThoughtWorks, GitHub | Google, Meta | Stripe, Slack |
언제 어떤 문서를 쓸 것인가
[문서 유형 선택 기준]
1. "팀의 의견을 넓게 구하고 싶다" --> RFC
- 새로운 기술 도입, 프로세스 변경, 크로스팀 영향이 큰 변경
2. "아키텍처 결정의 배경과 근거를 남기고 싶다" --> ADR
- 데이터베이스 선택, 프레임워크 전환, API 설계 방향
3. "시스템 설계를 상세하게 공유하고 합의하고 싶다" --> Design Doc
- 새로운 서비스 설계, 대규모 리팩토링, 성능 최적화 프로젝트
4. "구현에 필요한 상세 사양을 정의하고 싶다" --> Tech Spec
- API 엔드포인트 정의, 데이터 모델 설계, 배포 전략
RFC (Request for Comments) 작성 가이드
RFC 구조와 템플릿
RFC는 원래 인터넷 표준을 정의하기 위한 IETF의 문서 형식이었지만, 현재는 많은 소프트웨어 기업에서 팀 내부 제안 문서의 형식으로 활용한다. 핵심은 "의견을 구한다(Request for Comments)"는 열린 자세다.
[RFC 템플릿]
RFC-XXX: Title of the Proposal
Author: Your Name
Status: Draft | In Review | Accepted | Rejected | Superseded
Created: 2026-03-12
Last Updated: 2026-03-12
## Summary
One paragraph summarizing what this RFC proposes and why.
## Motivation
Why is this change needed? What problem does it solve?
Include data, metrics, or user feedback that supports the need.
## Detailed Design
The technical details of the proposal.
- Architecture diagrams
- API changes
- Data model changes
- Migration strategy
## Alternatives Considered
What other approaches were evaluated?
Why were they rejected?
## Risks and Mitigations
What could go wrong? How do we mitigate each risk?
## Success Metrics
How will we measure whether this change was successful?
## Open Questions
What decisions have not yet been made?
What feedback are you specifically looking for?
## References
Links to related documents, prior art, and research.
RFC 섹션별 핵심 영어 표현
[Summary 섹션]
"This RFC proposes migrating our authentication service from a
session-based model to JWT-based authentication."
(이 RFC는 인증 서비스를 세션 기반 모델에서 JWT 기반 인증으로
마이그레이션하는 것을 제안합니다.)
"The goal of this proposal is to reduce deployment coupling
between the frontend and backend teams."
(이 제안의 목표는 프론트엔드와 백엔드 팀 간의
배포 결합도를 줄이는 것입니다.)
[Motivation 섹션]
"Our current system has reached its scalability limits,
with p99 latency exceeding 2 seconds during peak hours."
(현재 시스템이 확장성 한계에 도달했으며,
피크 시간에 p99 레이턴시가 2초를 초과합니다.)
"Over the past quarter, we have received 15 customer complaints
related to this limitation."
(지난 분기 동안 이 제한과 관련하여 15건의 고객 불만을 받았습니다.)
[Alternatives Considered 섹션]
"We evaluated three alternatives: (1) vertical scaling of the
existing database, (2) introducing a read replica, and
(3) migrating to a distributed database."
(세 가지 대안을 평가했습니다: (1) 기존 데이터베이스의 수직 확장,
(2) 읽기 복제본 도입, (3) 분산 데이터베이스로의 마이그레이션.)
"Alternative 1 was rejected because it only delays the problem
by an estimated 6 months without addressing the root cause."
(대안 1은 근본 원인을 해결하지 않고 문제를 약 6개월만
지연시킬 뿐이므로 기각했습니다.)
RFC 상태(Status) 관련 표현
[RFC 상태 전환 표현]
"This RFC is currently in Draft status and open for initial feedback."
(이 RFC는 현재 초안 상태이며 초기 피드백을 받고 있습니다.)
"The review period for this RFC closes on March 20, 2026."
(이 RFC의 검토 기간은 2026년 3월 20일에 마감됩니다.)
"Based on the feedback received, we are updating this RFC
to address the concerns raised about data consistency."
(받은 피드백을 바탕으로, 데이터 일관성에 대해 제기된
우려를 해결하기 위해 이 RFC를 업데이트하고 있습니다.)
"This RFC has been accepted and will be implemented in Q2 2026."
(이 RFC는 승인되었으며 2026년 2분기에 구현될 예정입니다.)
"This RFC is superseded by RFC-087, which takes a different
approach to solving the same problem."
(이 RFC는 같은 문제를 다른 접근 방식으로 해결하는
RFC-087로 대체되었습니다.)
ADR (Architecture Decision Record) 작성 가이드
ADR 구조와 템플릿
ADR은 Michael Nygard가 2011년에 제안한 형식으로, 아키텍처 의사결정의 맥락, 결정 사항, 그리고 그 결과를 간결하게 기록하는 문서다. 핵심은 "왜 그 결정을 했는가"를 미래의 팀원이 이해할 수 있도록 남기는 것이다.
[ADR 템플릿 - Michael Nygard 형식]
# ADR-XXX: Title of Decision
## Status
Proposed | Accepted | Deprecated | Superseded by ADR-YYY
## Context
What is the issue that we are seeing that is motivating
this decision or change?
## Decision
What is the change that we are proposing and/or doing?
## Consequences
What becomes easier or more difficult to do because
of this change?
ADR 확장 템플릿과 표현
실무에서는 Nygard의 기본 형식을 확장하여 사용하는 경우가 많다. 아래는 확장된 ADR 작성 예시다.
[ADR 확장 작성 예시]
# ADR-012: Use PostgreSQL as the Primary Database
## Status
Accepted (2026-03-10)
## Context
Our application currently uses MongoDB for all data storage.
As the product has evolved, we have encountered increasing
challenges with:
- Complex queries requiring multiple aggregation pipelines
- Data consistency issues in transactions spanning
multiple collections
- Difficulty enforcing referential integrity at the
database level
The team has spent approximately 20 percent of each sprint
addressing data consistency bugs over the past three months.
## Decision
We will migrate our primary data store from MongoDB to
PostgreSQL for all transactional data. MongoDB will be
retained for the audit log service where its document
model is a natural fit.
## Consequences
### Positive
- ACID transactions will eliminate the consistency bugs
we have been experiencing
- The team has stronger expertise in relational databases
- Joins will simplify our current multi-query patterns
### Negative
- Migration will require approximately 4 weeks of
engineering effort
- We will need to maintain two database technologies
during the transition period
- Some document-oriented patterns will require
schema redesign
### Risks
- Data migration downtime: mitigated by using a
dual-write strategy during transition
- Performance regression: mitigated by load testing
the new schema before cutover
ADR에서 자주 사용하는 표현
[Context 작성 표현]
"The current architecture does not support horizontal scaling
beyond 3 nodes without significant operational overhead."
(현재 아키텍처는 상당한 운영 오버헤드 없이는
3노드 이상의 수평 확장을 지원하지 않습니다.)
"We need to decide on an approach before the Q3 feature
freeze deadline."
(Q3 기능 동결 마감일 전에 접근 방식을 결정해야 합니다.)
[Decision 작성 표현]
"We will adopt a strangler fig pattern to incrementally
migrate from the legacy system."
(레거시 시스템에서 점진적으로 마이그레이션하기 위해
strangler fig 패턴을 채택합니다.)
"We will use Protocol Buffers instead of JSON for
inter-service communication."
(서비스 간 통신에 JSON 대신 Protocol Buffers를 사용합니다.)
[Consequences 작성 표현]
"This decision will increase deployment complexity but
significantly improve runtime performance."
(이 결정은 배포 복잡성을 증가시키지만 런타임 성능을
크게 향상시킵니다.)
"Teams will need to invest in learning the new technology,
estimated at 2 weeks of ramp-up time per engineer."
(팀은 새 기술 학습에 투자해야 하며,
엔지니어당 약 2주의 적응 시간이 필요합니다.)
Design Doc (Google 스타일) 작성 가이드
Design Doc 구조와 템플릿
Google의 Design Doc은 소프트웨어 업계에서 가장 널리 참조되는 설계 문서 형식이다. 공식적인 포맷이 엄격히 정해져 있지는 않지만, Google 내부에서 오랜 기간 확립된 구조가 있다. 핵심 원칙은 "코드를 작성하기 전에 설계를 통해 팀의 합의를 얻는 것"이다.
[Design Doc 템플릿 - Google Style]
Title: [Project Name] Design Document
Author(s): Name (email)
Reviewers: Names
Status: Draft | In Review | Approved
Last Updated: 2026-03-12
## 1. Overview
A brief description of the project, its goals,
and why it matters.
## 2. Background
Relevant context that the reader needs to understand
the rest of the document. Prior art and existing systems.
## 3. Goals and Non-Goals
What this project will and will not accomplish.
## 4. Detailed Design
### 4.1 System Architecture
### 4.2 API Design
### 4.3 Data Model
### 4.4 Algorithms
## 5. Alternatives Considered
Other approaches and why they were rejected.
## 6. Cross-Cutting Concerns
### 6.1 Security
### 6.2 Privacy
### 6.3 Observability
## 7. Migration Strategy
How to get from the current state to the proposed state.
## 8. Open Questions
Unresolved decisions that need input from reviewers.
## 9. Timeline and Milestones
Estimated effort and key milestones.
Goals and Non-Goals 작성법
Design Doc에서 가장 중요한 섹션 중 하나가 Goals and Non-Goals다. Non-Goals를 명시적으로 적는 것이 특히 중요한데, 이것이 프로젝트의 범위를 명확히 하고 리뷰어의 기대를 조정한다.
[Goals and Non-Goals 작성 예시]
## Goals
- Reduce API response time for the product search endpoint
from 800ms (p95) to under 200ms (p95)
- Support real-time indexing of product catalog updates
with a maximum delay of 30 seconds
- Maintain backward compatibility with existing API clients
## Non-Goals
- This project will NOT address the image search feature
(tracked separately in Project Atlas)
- Optimizing the recommendation engine is out of scope
for this design
- We are NOT planning to migrate the entire search
infrastructure; only the product search endpoint
is in scope
[Non-Goals 작성 시 유용한 표현]
"This is explicitly out of scope for this project."
(이것은 이 프로젝트의 범위에서 명시적으로 제외됩니다.)
"While important, this concern will be addressed in
a follow-up project."
(중요한 문제이지만, 후속 프로젝트에서 다룰 예정입니다.)
"We acknowledge this limitation but consider it acceptable
given the timeline constraints."
(이 제한을 인지하고 있지만 일정 제약을 고려할 때
수용 가능하다고 판단합니다.)
Detailed Design 섹션 표현
[시스템 아키텍처 설명 표현]
"The system consists of three main components:
an API gateway, a processing pipeline, and a storage layer."
(시스템은 세 가지 주요 구성 요소로 이루어집니다:
API 게이트웨이, 처리 파이프라인, 스토리지 레이어.)
"Requests flow from the client through the load balancer
to one of N stateless application servers."
(요청은 클라이언트에서 로드 밸런서를 거쳐
N개의 상태 비저장(stateless) 애플리케이션 서버 중 하나로 흐릅니다.)
"This component is responsible for validating incoming requests
and enriching them with user context before forwarding
to the downstream service."
(이 컴포넌트는 들어오는 요청을 검증하고, 다운스트림 서비스로
전달하기 전에 사용자 컨텍스트를 추가하는 역할을 합니다.)
[API 설계 설명 표현]
"The API follows RESTful conventions with the following
endpoints..."
(API는 RESTful 규칙을 따르며 다음 엔드포인트를
포함합니다...)
"We chose gRPC over REST for this internal service
because of its lower serialization overhead and
built-in streaming support."
(이 내부 서비스에 REST 대신 gRPC를 선택한 이유는
직렬화 오버헤드가 낮고 스트리밍 지원이
내장되어 있기 때문입니다.)
Tech Spec 작성 가이드
Tech Spec 구조와 템플릿
Tech Spec은 Design Doc보다 구현에 가까운 문서다. "어떻게 구축할 것인가"에 초점을 맞추며, 구현 담당 엔지니어가 이 문서만으로 개발을 시작할 수 있어야 한다.
[Tech Spec 템플릿]
Title: [Feature Name] Technical Specification
Author: Name
Approvers: Names
Status: Draft | Approved | Implemented
Sprint/Quarter: Sprint 24 / Q1 2026
## Executive Summary
What are we building and why? (2-3 sentences)
## Technical Requirements
### Functional Requirements
### Non-Functional Requirements
- Performance targets
- Availability requirements
- Security requirements
## System Design
### Architecture Overview
### Component Design
### Data Model / Schema Changes
### API Contracts
## Implementation Plan
### Phase 1: [Description] (Week 1-2)
### Phase 2: [Description] (Week 3-4)
## Testing Strategy
### Unit Tests
### Integration Tests
### Load Tests
### Rollback Plan
## Dependencies
External services, libraries, or teams we depend on.
## Risks and Mitigations
What could go wrong and how we plan to handle it.
## Success Metrics
How we will measure the success of this implementation.
## Appendix
Additional technical details, diagrams, or references.
Tech Spec에서 자주 사용하는 표현
[Technical Requirements 표현]
"The system must handle at least 10,000 concurrent connections
with a p99 latency below 100 milliseconds."
(시스템은 p99 레이턴시 100밀리초 미만으로
최소 10,000개의 동시 연결을 처리해야 합니다.)
"Data at rest must be encrypted using AES-256,
and data in transit must use TLS 1.3."
(저장 데이터는 AES-256으로 암호화해야 하며,
전송 중 데이터는 TLS 1.3을 사용해야 합니다.)
[Implementation Plan 표현]
"In Phase 1, we will implement the core data pipeline
and validate it against the existing system using
shadow traffic."
(1단계에서 핵심 데이터 파이프라인을 구현하고
섀도 트래픽을 사용하여 기존 시스템 대비 검증합니다.)
"Phase 2 is gated on the successful completion of
Phase 1 load testing."
(2단계는 1단계 부하 테스트의 성공적인 완료를
전제로 합니다.)
[Testing Strategy 표현]
"We will achieve at least 80 percent code coverage
with unit tests for all new modules."
(모든 새로운 모듈에 대해 단위 테스트로 최소
80퍼센트 코드 커버리지를 달성합니다.)
"The rollback plan involves reverting the feature flag
and restoring the previous database schema via
the automated migration tool."
(롤백 계획은 기능 플래그를 되돌리고 자동화된
마이그레이션 도구를 통해 이전 데이터베이스
스키마를 복원하는 것입니다.)
리뷰 피드백 영어 표현
기술 문서 작성만큼 중요한 것이 리뷰 피드백이다. 적절한 표현을 사용해야 생산적인 토론이 가능하다.
피드백 심각도 분류
[피드백 심각도별 표현]
[Blocker - 반드시 해결해야 함]
"Blocker: This approach has a potential data loss scenario
that must be addressed before we can approve."
(블로커: 이 접근 방식에 잠재적인 데이터 손실 시나리오가 있어
승인 전에 반드시 해결해야 합니다.)
[Major - 중요한 변경 필요]
"Major: The proposed caching strategy does not account for
cache invalidation in a multi-region setup."
(주요: 제안된 캐싱 전략은 멀티 리전 환경에서의
캐시 무효화를 고려하지 않았습니다.)
[Minor - 개선 권장]
"Minor: Consider adding a sequence diagram to illustrate
the authentication flow."
(소소한 의견: 인증 흐름을 설명하기 위한
시퀀스 다이어그램 추가를 고려해 보세요.)
[Nit - 사소한 제안]
"Nit: Typo in the API endpoint name on page 3."
(사소한 점: 3페이지 API 엔드포인트 이름에 오타가 있습니다.)
[Question - 이해를 위한 질문]
"Question: What happens if the downstream service is
unavailable for more than 5 minutes?"
(질문: 다운스트림 서비스가 5분 이상 불가용할 경우
어떻게 되나요?)
긍정적 피드백 표현
[리뷰에서 긍정적 피드백 주기]
"This is a well-thought-out design. I especially appreciate
the detailed migration strategy."
(잘 고민된 설계입니다. 특히 상세한 마이그레이션 전략이 좋습니다.)
"The trade-off analysis in the Alternatives section is
very thorough."
(대안 섹션의 트레이드오프 분석이 매우 철저합니다.)
"I like how you have explicitly called out the non-goals.
This helps set clear expectations."
(Non-Goals를 명시적으로 기술한 점이 좋습니다.
이것이 명확한 기대치 설정에 도움이 됩니다.)
"Strong proposal overall. I have a few minor suggestions below."
(전반적으로 강력한 제안입니다. 아래에 몇 가지 사소한
제안이 있습니다.)
건설적 비판 표현
[건설적으로 반대 의견 제시하기]
"I have a concern about the proposed approach.
Have we considered the impact on the billing service?"
(제안된 접근 방식에 우려가 있습니다.
결제 서비스에 미치는 영향을 검토했나요?)
"I think there might be a simpler approach here.
What if we used an event-driven architecture instead?"
(여기에 더 단순한 접근 방식이 있을 수 있다고 봅니다.
대신 이벤트 기반 아키텍처를 사용하면 어떨까요?)
"While I agree with the overall direction, I am not convinced
that the proposed timeline is realistic given our current
team capacity."
(전반적인 방향에는 동의하지만, 현재 팀 역량을 고려할 때
제안된 일정이 현실적인지 확신이 서지 않습니다.)
"Could you elaborate on how this handles the edge case
where the user session expires mid-transaction?"
(사용자 세션이 트랜잭션 도중에 만료되는 엣지 케이스를
어떻게 처리하는지 부연해 주시겠어요?)
비영어권 화자가 자주 범하는 실수
문체와 톤의 실수
| 실수 유형 | 잘못된 예 | 올바른 예 |
|---|---|---|
| 너무 직접적인 표현 | "This is wrong." | "I believe there may be an issue with this approach." |
| 불필요한 사과 | "Sorry, but I think..." | "I think..." or "In my view..." |
| 모호한 표현 | "Maybe we should consider something." | "I propose we evaluate Option A and Option B." |
| 감정적 표현 | "This is terrible code." | "This section could benefit from refactoring." |
| 과도한 hedge | "I could be wrong, but perhaps maybe..." | "One consideration is..." |
구조적 실수
[흔한 구조적 실수와 개선]
[실수 1: Problem Statement 없이 바로 해결책 제시]
Bad: "We should use Redis for caching."
Good: "Our API response times have increased by 40 percent
over the past month due to repeated database queries
for frequently accessed data. We propose implementing
a Redis caching layer to reduce database load and
improve response times."
[실수 2: 대안 분석 생략]
Bad: "We decided to use Kubernetes."
Good: "We evaluated three container orchestration options:
Kubernetes, Docker Swarm, and Amazon ECS.
We selected Kubernetes because..."
[실수 3: 정량적 근거 부재]
Bad: "The system is slow."
Good: "The system currently has a p95 latency of 1.2 seconds,
which exceeds our SLA target of 500 milliseconds."
[실수 4: Success Metrics 누락]
Bad: "This change will improve performance."
Good: "Success will be measured by:
- p95 latency reduction from 1.2s to under 500ms
- Error rate below 0.1 percent
- Zero data loss during migration"
영어 문법과 표현 실수
[기술 문서에서 흔한 영어 실수]
[관사 (a/the) 오용]
Bad: "System handles request and sends response."
Good: "The system handles a request and sends a response."
[시제 혼용]
Bad: "The service received a request and processes it."
Good: "The service receives a request and processes it."
(현재 시제로 통일 - 시스템 동작 설명 시)
[수동태 남용]
Bad: "The data is being processed by the pipeline and
is then stored by the database."
Good: "The pipeline processes the data and stores it
in the database."
[장황한 표현]
Bad: "In order to achieve the purpose of reducing latency..."
Good: "To reduce latency..."
[주어 생략 (일본어/한국어 습관)]
Bad: "Should consider using connection pooling."
Good: "We should consider using connection pooling."
실전 팁: 문서 작성 워크플로우
효율적인 작성 프로세스
[기술 문서 작성 5단계 워크플로우]
Step 1: Outline First (개요 먼저)
- 템플릿의 섹션 헤딩만 먼저 채운다
- 각 섹션에 1-2 문장의 핵심 메시지를 적는다
- 이 단계에서 mentor나 tech lead에게 방향을 확인받는다
Step 2: Write the Core Sections (핵심 섹션 작성)
- Problem Statement / Context를 먼저 완성한다
- 그 다음 Proposed Solution / Decision을 작성한다
- 마지막으로 Alternatives와 Trade-offs를 작성한다
Step 3: Add Supporting Details (뒷받침 자료 추가)
- 다이어그램, 테이블, 코드 예시를 추가한다
- 정량적 데이터로 주장을 뒷받침한다
Step 4: Internal Review (내부 리뷰)
- 신뢰하는 동료 1-2명에게 먼저 리뷰를 받는다
- 영어 표현이 자연스러운지 확인을 요청한다
Step 5: Publish and Iterate (공개와 반복)
- 팀 전체에 공유하고 피드백을 수집한다
- 피드백 반영 후 상태를 업데이트한다
문서별 체크리스트
[RFC 체크리스트]
- [ ] Summary가 한 문단으로 제안 사항을 명확히 요약하는가?
- [ ] Motivation에 정량적 데이터나 구체적 사례가 있는가?
- [ ] Alternatives를 최소 2개 이상 검토했는가?
- [ ] Open Questions가 구체적인가?
- [ ] 리뷰 마감일이 명시되어 있는가?
[ADR 체크리스트]
- [ ] Context가 의사결정의 배경을 충분히 설명하는가?
- [ ] Decision이 명확하고 모호하지 않은가?
- [ ] Consequences에 긍정적/부정적 영향이 모두 있는가?
- [ ] 6개월 후 새로운 팀원이 읽어도 이해할 수 있는가?
[Design Doc 체크리스트]
- [ ] Non-Goals가 명시되어 있는가?
- [ ] 아키텍처 다이어그램이 포함되어 있는가?
- [ ] Security와 Privacy 고려사항이 있는가?
- [ ] Migration Strategy가 현실적인가?
[Tech Spec 체크리스트]
- [ ] 비기능 요구사항(성능, 보안, 가용성)이 정량적인가?
- [ ] Implementation Plan에 단계별 마일스톤이 있는가?
- [ ] Testing Strategy에 롤백 계획이 포함되어 있는가?
- [ ] Dependencies가 모두 나열되어 있는가?
유용한 연결어와 전환 표현
기술 문서에서 섹션과 아이디어를 연결하는 표현도 중요하다.
[전환 표현 모음]
[배경 설명에서 제안으로]
"Given these constraints, we propose..."
(이러한 제약을 고려하여, 우리는 다음을 제안합니다...)
"To address this issue, the following approach is recommended."
(이 문제를 해결하기 위해 다음 접근 방식을 권장합니다.)
[장단점 비교]
"On the one hand... On the other hand..."
(한편으로는... 다른 한편으로는...)
"While this approach offers simplicity, it comes at the cost of flexibility."
(이 접근 방식은 단순성을 제공하지만, 유연성의 비용이 따릅니다.)
[결론 도출]
"Taking all factors into consideration, we recommend..."
(모든 요소를 고려하여, 우리는 다음을 권장합니다...)
"Based on the analysis above, the proposed solution
best balances performance and maintainability."
(위 분석에 기반하여, 제안된 솔루션이 성능과
유지보수성을 가장 잘 균형잡습니다.)
[범위 제한]
"This document focuses specifically on..."
(이 문서는 구체적으로 다음에 초점을 맞춥니다...)
"The following topics are covered in a separate document."
(다음 주제들은 별도의 문서에서 다룹니다.)
마치며
기술 문서 영어 작성 능력은 시니어 엔지니어로 성장하는 데 필수적인 역량이다. 코드가 "어떻게"를 담당한다면, 문서는 "왜"를 담당한다. 특히 RFC, ADR, Design Doc, Tech Spec은 각각 다른 목적과 독자를 가지고 있으므로, 상황에 맞는 문서를 선택하고 그 구조에 맞게 작성하는 것이 중요하다.
핵심 정리하면 다음과 같다.
- RFC는 의견을 구하는 열린 문서다. Open Questions를 적극 활용하자.
- ADR은 미래의 팀원을 위한 기록이다. Context를 충분히, Decision은 명확하게.
- Design Doc은 설계 합의 도구다. Non-Goals를 반드시 명시하자.
- Tech Spec은 구현 가이드다. 정량적 요구사항과 테스트 전략이 핵심이다.
영어 표현에서는 명확성(Clarity), 간결성(Conciseness), 그리고 정량적 근거(Quantitative Evidence)를 항상 기억하자. "The system is slow"가 아닌 "The system has a p95 latency of 1.2 seconds"로, "We should use Redis"가 아닌 "We propose implementing a Redis caching layer to address the 40 percent increase in response times"로 쓰는 습관을 기르면, 기술 문서가 팀의 진정한 자산이 될 것이다.
참고자료
- Design Docs at Google - Industrial Empathy
- Documenting Architecture Decisions - Michael Nygard (Cognitect)
- A Practical Guide to Writing Technical Specs - Stack Overflow Blog
- Technical Writing | Google for Developers
- RFC Style Guide - IETF
- ADR Templates - adr.github.io
- Architecture Decision Records - Joel Parker Henderson (GitHub)
- On Writing Tech Specs - Chuck Groom (CodeBurst)
Technical Writing in English Guide: RFC, ADR, Design Doc, and Tech Spec Templates with Practical Expressions
- Introduction
- Comparing the Four Document Types
- RFC (Request for Comments) Writing Guide
- ADR (Architecture Decision Record) Writing Guide
- Design Doc (Google Style) Writing Guide
- Tech Spec Writing Guide
- Review Feedback English Expressions
- Common Mistakes by Non-Native Speakers
- Practical Tips: Document Writing Workflow
- Useful Transition Expressions
- Conclusion
- References

Introduction
In software engineering, technical documentation is just as important as code. Even the best architectural decisions are lost if not documented -- they never become team knowledge, discussions repeat, and onboarding time is wasted. For non-native English speakers working in global teams, writing technical documents in English presents a double challenge: you need to express technical judgments accurately while also following the document structures and expression conventions that English-speaking readers expect.
This guide covers the four types of technical documents that software engineers write most frequently:
- RFC (Request for Comments): A proposal document seeking input from the entire team
- ADR (Architecture Decision Record): A short document recording architecture decisions
- Design Doc: A detailed system design document (Google style)
- Tech Spec: An implementation-focused document defining technical specifications
We cover the structure of each document type, templates, section-by-section English expressions, review feedback conventions, and common mistakes made by non-native speakers.
Comparing the Four Document Types
Let us start by comparing the characteristics of each document type.
| Aspect | RFC | ADR | Design Doc | Tech Spec |
|---|---|---|---|---|
| Purpose | Proposal and feedback gathering | Decision recording | Detailed system design | Technical specification |
| Length | 2-10 pages | 1-2 pages | 5-20 pages | 3-15 pages |
| Audience | Entire team, stakeholders | Current/future team members | Engineering team, leadership | Implementing engineers |
| Decision timing | Before decision (gathering input) | Right after decision (recording) | Before implementation (design consensus) | Just before implementation (spec finalization) |
| Lifespan | Archived after decision | Permanently preserved | Updated during project | Until implementation complete |
| Notable companies | IETF, Rust, Uber | ThoughtWorks, GitHub | Google, Meta | Stripe, Slack |
When to Use Which Document
[Document Type Selection Criteria]
1. "I want to gather broad input from the team" --> RFC
- New technology adoption, process changes, cross-team impacts
2. "I want to record the background and rationale
of an architecture decision" --> ADR
- Database selection, framework migration, API design direction
3. "I want to share and get consensus on a detailed
system design" --> Design Doc
- New service design, major refactoring, performance optimization
4. "I want to define detailed specs needed
for implementation" --> Tech Spec
- API endpoint definitions, data model design, deployment strategy
RFC (Request for Comments) Writing Guide
RFC Structure and Template
The RFC originated as an IETF document format for defining internet standards, but today many software companies use it as an internal proposal format. The key idea is the open stance of "requesting comments."
[RFC Template]
RFC-XXX: Title of the Proposal
Author: Your Name
Status: Draft | In Review | Accepted | Rejected | Superseded
Created: 2026-03-12
Last Updated: 2026-03-12
## Summary
One paragraph summarizing what this RFC proposes and why.
## Motivation
Why is this change needed? What problem does it solve?
Include data, metrics, or user feedback that supports the need.
## Detailed Design
The technical details of the proposal.
- Architecture diagrams
- API changes
- Data model changes
- Migration strategy
## Alternatives Considered
What other approaches were evaluated?
Why were they rejected?
## Risks and Mitigations
What could go wrong? How do we mitigate each risk?
## Success Metrics
How will we measure whether this change was successful?
## Open Questions
What decisions have not yet been made?
What feedback are you specifically looking for?
## References
Links to related documents, prior art, and research.
Key English Expressions by RFC Section
[Summary Section]
"This RFC proposes migrating our authentication service from a
session-based model to JWT-based authentication."
"The goal of this proposal is to reduce deployment coupling
between the frontend and backend teams."
[Motivation Section]
"Our current system has reached its scalability limits,
with p99 latency exceeding 2 seconds during peak hours."
"Over the past quarter, we have received 15 customer complaints
related to this limitation."
[Alternatives Considered Section]
"We evaluated three alternatives: (1) vertical scaling of the
existing database, (2) introducing a read replica, and
(3) migrating to a distributed database."
"Alternative 1 was rejected because it only delays the problem
by an estimated 6 months without addressing the root cause."
RFC Status Expressions
[RFC Status Transition Expressions]
"This RFC is currently in Draft status and open for initial feedback."
"The review period for this RFC closes on March 20, 2026."
"Based on the feedback received, we are updating this RFC
to address the concerns raised about data consistency."
"This RFC has been accepted and will be implemented in Q2 2026."
"This RFC is superseded by RFC-087, which takes a different
approach to solving the same problem."
ADR (Architecture Decision Record) Writing Guide
ADR Structure and Template
The ADR format was proposed by Michael Nygard in 2011 as a way to concisely record the context, decision, and consequences of architecture decisions. The key principle is recording "why that decision was made" so that future team members can understand it.
[ADR Template - Michael Nygard Format]
# ADR-XXX: Title of Decision
## Status
Proposed | Accepted | Deprecated | Superseded by ADR-YYY
## Context
What is the issue that we are seeing that is motivating
this decision or change?
## Decision
What is the change that we are proposing and/or doing?
## Consequences
What becomes easier or more difficult to do because
of this change?
Extended ADR Template and Expressions
In practice, many teams extend Nygard's basic format. Here is an example of an extended ADR.
[Extended ADR Example]
# ADR-012: Use PostgreSQL as the Primary Database
## Status
Accepted (2026-03-10)
## Context
Our application currently uses MongoDB for all data storage.
As the product has evolved, we have encountered increasing
challenges with:
- Complex queries requiring multiple aggregation pipelines
- Data consistency issues in transactions spanning
multiple collections
- Difficulty enforcing referential integrity at the
database level
The team has spent approximately 20 percent of each sprint
addressing data consistency bugs over the past three months.
## Decision
We will migrate our primary data store from MongoDB to
PostgreSQL for all transactional data. MongoDB will be
retained for the audit log service where its document
model is a natural fit.
## Consequences
### Positive
- ACID transactions will eliminate the consistency bugs
we have been experiencing
- The team has stronger expertise in relational databases
- Joins will simplify our current multi-query patterns
### Negative
- Migration will require approximately 4 weeks of
engineering effort
- We will need to maintain two database technologies
during the transition period
- Some document-oriented patterns will require
schema redesign
### Risks
- Data migration downtime: mitigated by using a
dual-write strategy during transition
- Performance regression: mitigated by load testing
the new schema before cutover
Common Expressions in ADRs
[Context Writing Expressions]
"The current architecture does not support horizontal scaling
beyond 3 nodes without significant operational overhead."
"We need to decide on an approach before the Q3 feature
freeze deadline."
[Decision Writing Expressions]
"We will adopt a strangler fig pattern to incrementally
migrate from the legacy system."
"We will use Protocol Buffers instead of JSON for
inter-service communication."
[Consequences Writing Expressions]
"This decision will increase deployment complexity but
significantly improve runtime performance."
"Teams will need to invest in learning the new technology,
estimated at 2 weeks of ramp-up time per engineer."
Design Doc (Google Style) Writing Guide
Design Doc Structure and Template
Google's Design Doc is the most widely referenced design document format in the software industry. While there is no strictly defined format, a certain structure has been established over years of use within Google. The core principle is "getting team alignment through design before writing code."
[Design Doc Template - Google Style]
Title: [Project Name] Design Document
Author(s): Name (email)
Reviewers: Names
Status: Draft | In Review | Approved
Last Updated: 2026-03-12
## 1. Overview
A brief description of the project, its goals,
and why it matters.
## 2. Background
Relevant context that the reader needs to understand
the rest of the document. Prior art and existing systems.
## 3. Goals and Non-Goals
What this project will and will not accomplish.
## 4. Detailed Design
### 4.1 System Architecture
### 4.2 API Design
### 4.3 Data Model
### 4.4 Algorithms
## 5. Alternatives Considered
Other approaches and why they were rejected.
## 6. Cross-Cutting Concerns
### 6.1 Security
### 6.2 Privacy
### 6.3 Observability
## 7. Migration Strategy
How to get from the current state to the proposed state.
## 8. Open Questions
Unresolved decisions that need input from reviewers.
## 9. Timeline and Milestones
Estimated effort and key milestones.
Writing Goals and Non-Goals
One of the most important sections in a Design Doc is Goals and Non-Goals. Explicitly stating Non-Goals is particularly important because it clarifies the project scope and manages reviewer expectations.
[Goals and Non-Goals Example]
## Goals
- Reduce API response time for the product search endpoint
from 800ms (p95) to under 200ms (p95)
- Support real-time indexing of product catalog updates
with a maximum delay of 30 seconds
- Maintain backward compatibility with existing API clients
## Non-Goals
- This project will NOT address the image search feature
(tracked separately in Project Atlas)
- Optimizing the recommendation engine is out of scope
for this design
- We are NOT planning to migrate the entire search
infrastructure; only the product search endpoint
is in scope
[Useful Expressions for Non-Goals]
"This is explicitly out of scope for this project."
"While important, this concern will be addressed in
a follow-up project."
"We acknowledge this limitation but consider it acceptable
given the timeline constraints."
Detailed Design Section Expressions
[System Architecture Description Expressions]
"The system consists of three main components:
an API gateway, a processing pipeline, and a storage layer."
"Requests flow from the client through the load balancer
to one of N stateless application servers."
"This component is responsible for validating incoming requests
and enriching them with user context before forwarding
to the downstream service."
[API Design Description Expressions]
"The API follows RESTful conventions with the following
endpoints..."
"We chose gRPC over REST for this internal service
because of its lower serialization overhead and
built-in streaming support."
Tech Spec Writing Guide
Tech Spec Structure and Template
A Tech Spec is closer to implementation than a Design Doc. It focuses on "how we will build it," and the implementing engineer should be able to start development using this document alone.
[Tech Spec Template]
Title: [Feature Name] Technical Specification
Author: Name
Approvers: Names
Status: Draft | Approved | Implemented
Sprint/Quarter: Sprint 24 / Q1 2026
## Executive Summary
What are we building and why? (2-3 sentences)
## Technical Requirements
### Functional Requirements
### Non-Functional Requirements
- Performance targets
- Availability requirements
- Security requirements
## System Design
### Architecture Overview
### Component Design
### Data Model / Schema Changes
### API Contracts
## Implementation Plan
### Phase 1: [Description] (Week 1-2)
### Phase 2: [Description] (Week 3-4)
## Testing Strategy
### Unit Tests
### Integration Tests
### Load Tests
### Rollback Plan
## Dependencies
External services, libraries, or teams we depend on.
## Risks and Mitigations
What could go wrong and how we plan to handle it.
## Success Metrics
How we will measure the success of this implementation.
## Appendix
Additional technical details, diagrams, or references.
Common Expressions in Tech Specs
[Technical Requirements Expressions]
"The system must handle at least 10,000 concurrent connections
with a p99 latency below 100 milliseconds."
"Data at rest must be encrypted using AES-256,
and data in transit must use TLS 1.3."
[Implementation Plan Expressions]
"In Phase 1, we will implement the core data pipeline
and validate it against the existing system using
shadow traffic."
"Phase 2 is gated on the successful completion of
Phase 1 load testing."
[Testing Strategy Expressions]
"We will achieve at least 80 percent code coverage
with unit tests for all new modules."
"The rollback plan involves reverting the feature flag
and restoring the previous database schema via
the automated migration tool."
Review Feedback English Expressions
Giving effective review feedback is just as important as writing the document itself. Using appropriate expressions enables productive discussions.
Feedback Severity Classification
[Expressions by Feedback Severity]
[Blocker - Must be resolved]
"Blocker: This approach has a potential data loss scenario
that must be addressed before we can approve."
[Major - Significant change needed]
"Major: The proposed caching strategy does not account for
cache invalidation in a multi-region setup."
[Minor - Improvement recommended]
"Minor: Consider adding a sequence diagram to illustrate
the authentication flow."
[Nit - Trivial suggestion]
"Nit: Typo in the API endpoint name on page 3."
[Question - For understanding]
"Question: What happens if the downstream service is
unavailable for more than 5 minutes?"
Positive Feedback Expressions
[Giving Positive Feedback in Reviews]
"This is a well-thought-out design. I especially appreciate
the detailed migration strategy."
"The trade-off analysis in the Alternatives section is
very thorough."
"I like how you have explicitly called out the non-goals.
This helps set clear expectations."
"Strong proposal overall. I have a few minor suggestions below."
Constructive Criticism Expressions
[Expressing Constructive Disagreement]
"I have a concern about the proposed approach.
Have we considered the impact on the billing service?"
"I think there might be a simpler approach here.
What if we used an event-driven architecture instead?"
"While I agree with the overall direction, I am not convinced
that the proposed timeline is realistic given our current
team capacity."
"Could you elaborate on how this handles the edge case
where the user session expires mid-transaction?"
Common Mistakes by Non-Native Speakers
Tone and Style Mistakes
| Mistake Type | Wrong Example | Correct Example |
|---|---|---|
| Too direct | "This is wrong." | "I believe there may be an issue with this approach." |
| Unnecessary apology | "Sorry, but I think..." | "I think..." or "In my view..." |
| Vague expression | "Maybe we should consider something." | "I propose we evaluate Option A and Option B." |
| Emotional language | "This is terrible code." | "This section could benefit from refactoring." |
| Excessive hedging | "I could be wrong, but perhaps maybe..." | "One consideration is..." |
Structural Mistakes
[Common Structural Mistakes and Improvements]
[Mistake 1: Jumping to solution without Problem Statement]
Bad: "We should use Redis for caching."
Good: "Our API response times have increased by 40 percent
over the past month due to repeated database queries
for frequently accessed data. We propose implementing
a Redis caching layer to reduce database load and
improve response times."
[Mistake 2: Skipping alternatives analysis]
Bad: "We decided to use Kubernetes."
Good: "We evaluated three container orchestration options:
Kubernetes, Docker Swarm, and Amazon ECS.
We selected Kubernetes because..."
[Mistake 3: Lacking quantitative evidence]
Bad: "The system is slow."
Good: "The system currently has a p95 latency of 1.2 seconds,
which exceeds our SLA target of 500 milliseconds."
[Mistake 4: Missing Success Metrics]
Bad: "This change will improve performance."
Good: "Success will be measured by:
- p95 latency reduction from 1.2s to under 500ms
- Error rate below 0.1 percent
- Zero data loss during migration"
English Grammar and Expression Mistakes
[Common English Mistakes in Technical Documents]
[Article (a/the) misuse]
Bad: "System handles request and sends response."
Good: "The system handles a request and sends a response."
[Tense mixing]
Bad: "The service received a request and processes it."
Good: "The service receives a request and processes it."
(Unified present tense for describing system behavior)
[Passive voice overuse]
Bad: "The data is being processed by the pipeline and
is then stored by the database."
Good: "The pipeline processes the data and stores it
in the database."
[Wordy expressions]
Bad: "In order to achieve the purpose of reducing latency..."
Good: "To reduce latency..."
[Subject omission (Japanese/Korean language habit)]
Bad: "Should consider using connection pooling."
Good: "We should consider using connection pooling."
Practical Tips: Document Writing Workflow
Efficient Writing Process
[5-Step Technical Document Writing Workflow]
Step 1: Outline First
- Fill in only the section headings from the template
- Write 1-2 sentences of key message for each section
- Get directional feedback from a mentor or tech lead
Step 2: Write the Core Sections
- Complete the Problem Statement / Context first
- Then write the Proposed Solution / Decision
- Finally, write Alternatives and Trade-offs
Step 3: Add Supporting Details
- Add diagrams, tables, and code examples
- Support claims with quantitative data
Step 4: Internal Review
- Get review from 1-2 trusted colleagues first
- Ask them to check if English expressions are natural
Step 5: Publish and Iterate
- Share with the entire team and collect feedback
- Update the status after incorporating feedback
Document Checklists
[RFC Checklist]
- [ ] Does the Summary clearly summarize the proposal
in one paragraph?
- [ ] Does the Motivation include quantitative data
or specific examples?
- [ ] Have at least 2 Alternatives been evaluated?
- [ ] Are Open Questions specific?
- [ ] Is the review deadline specified?
[ADR Checklist]
- [ ] Does the Context sufficiently explain the
decision background?
- [ ] Is the Decision clear and unambiguous?
- [ ] Do Consequences include both positive and
negative impacts?
- [ ] Can a new team member understand it 6 months later?
[Design Doc Checklist]
- [ ] Are Non-Goals explicitly stated?
- [ ] Is an architecture diagram included?
- [ ] Are Security and Privacy considerations addressed?
- [ ] Is the Migration Strategy realistic?
[Tech Spec Checklist]
- [ ] Are non-functional requirements (performance,
security, availability) quantitative?
- [ ] Does the Implementation Plan have phased milestones?
- [ ] Does the Testing Strategy include a rollback plan?
- [ ] Are all Dependencies listed?
Useful Transition Expressions
Connecting sections and ideas with appropriate transitions is also important in technical documents.
[Transition Expression Collection]
[From background to proposal]
"Given these constraints, we propose..."
"To address this issue, the following approach is recommended."
[Comparing pros and cons]
"On the one hand... On the other hand..."
"While this approach offers simplicity, it comes at the cost
of flexibility."
[Drawing conclusions]
"Taking all factors into consideration, we recommend..."
"Based on the analysis above, the proposed solution
best balances performance and maintainability."
[Limiting scope]
"This document focuses specifically on..."
"The following topics are covered in a separate document."
Conclusion
Technical document writing is an essential skill for growing as a senior engineer. If code handles the "how," documents handle the "why." In particular, RFCs, ADRs, Design Docs, and Tech Specs each serve different purposes and audiences, so choosing the right document for the situation and writing it in the appropriate structure is crucial.
Key takeaways:
- RFC is an open document seeking opinions. Actively use Open Questions.
- ADR is a record for future team members. Provide sufficient Context, make the Decision clear.
- Design Doc is a design alignment tool. Always specify Non-Goals.
- Tech Spec is an implementation guide. Quantitative requirements and testing strategy are key.
In English expression, always remember Clarity, Conciseness, and Quantitative Evidence. Building the habit of writing "The system has a p95 latency of 1.2 seconds" instead of "The system is slow," and "We propose implementing a Redis caching layer to address the 40 percent increase in response times" instead of "We should use Redis," will turn your technical documents into genuine team assets.
References
- Design Docs at Google - Industrial Empathy
- Documenting Architecture Decisions - Michael Nygard (Cognitect)
- A Practical Guide to Writing Technical Specs - Stack Overflow Blog
- Technical Writing | Google for Developers
- RFC Style Guide - IETF
- ADR Templates - adr.github.io
- Architecture Decision Records - Joel Parker Henderson (GitHub)
- On Writing Tech Specs - Chuck Groom (CodeBurst)