Featured image of post Technical Writing: The Skill That Differentiates a Software Engineer from a Coder

Technical Writing: The Skill That Differentiates a Software Engineer from a Coder

Discover how technical writing sets great engineers apart, why it's essential for communication and career growth, and how to start improving your writing today.

author

Abdulrahman Elrouby

Did you know that poor communication in software teams leads to 30% of project delays and rework? A few weeks ago, I realized that technical writing is the unsung hero of software engineering—the skill that separates a software engineer from just a coder.

As engineers, we don’t just write code—we communicate ideas, document decisions, and explain complex systems to diverse audiences. I came across Google’s Technical Writing Guide, which boldly states: “Every engineer is also a writer.”

But is that really true? Do all engineers naturally possess strong writing skills, or is this something we must consciously develop? While the potential for clear communication exists in every engineer, the skill of effective writing needs to be consciously honed. It’s not just about technical aptitude; it’s about the ability to translate complex concepts into understandable narratives.

In this blog, we’ll explore:

  • What software engineers write (beyond just code).
  • Why technical writing matters for career growth and team success.
  • How to write effectively for different audiences.
  • Actionable tips to improve your technical communication today.

The Myth: “I’m an Engineer, Not a Writer”

Many engineers believe writing is a “soft skill”—secondary to coding. But here’s the truth:

  • Writing is coding’s silent partner. Your brilliant algorithm is useless if no one understands how it works.
  • Poor documentation costs companies millions. A 2020 study found that unclear code and docs slow down development by 20-30%.
  • Senior engineers write—a lot. Promotions often hinge on your ability to articulate ideas clearly in design docs, RFCs, and post-mortems.

So yes, every engineer must become a writer—but it’s a skill we build, not something we’re born with.

What Do Software Engineers Write?

1. Writing Code: Your First Draft of Documentation

Code is read 10x more often than it’s written. Bad code forces teammates to:

  • Decipher cryptic variable names (x, temp, data2).
  • Reverse-engineer spaghetti logic.
  • Hunt you down for explanations.
  • Leads to frustration and wasted time.

How to write self-documenting code:

Names matter: calculateInvoiceTotal() beats doStuff().
Small functions: Adhere to the Single Responsibility Principle.
Strategic comments: Explain why (not what) when logic isn’t obvious or when addressing a complex edge case.

Bad Example:

JavaScript

1
2
3
4
5
6
7
// Bad Example: Unclear function purpose and naming
/**
 * What does this function do? The name and comment are vague.
 */
function proc(d) {
  return d * 1.1;
}

Good Example:

JavaScript

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// Good Example: Clear function name, descriptive comment, and meaningful variable
/**
 * Calculates the total invoice amount including a 10% sales tax.
 * @param {number} subtotal - The original order subtotal before tax.
 * @returns {number} The total amount after applying sales tax.
 */
function applySalesTax(subtotal) {
  // Applying standard 10% sales tax as per company policy for this region.
  // Future: Consider fetching tax rate from a configuration service.
  return subtotal * 1.1;
}

2. Writing Pull Requests (PRs): The Art of Context

A PR is a story—not just a code dump. Great

A well-written PR should:

  • Explain what the change does and why it’s needed.
  • Mention dependencies (e.g., database updates, external services).
  • Provide context so reviewers don’t have to guess.
  • Include notes on testing, potential impact, and relevant screenshots or demos.

Bad PR description:

“Fixed the bug.”

Good PR description:

📌 Problem: “Fixes #123: Users can’t upload files >10MB due to S3 permission errors."
📌 Solution: “Increased S3 bucket limits from 10MB to 50MB and added client-side and server-side error handling for file size validation."
📌 Testing: “Verified successful uploads with 50MB PDF and JPG files. Also tested error messages for files >50MB."
📌 Screenshots/Logs: Visual proof it works or relevant log snippets.
📌 Dependencies/Impact: Mention if other services need updates or if there’s any downstream impact.


If you don’t write clear PRs, reviewers will waste time figuring out your changes—or worse, approve something they don’t fully understand, potentially introducing new issues.

3. Writing Technical Documentation: Preventing Institutional Amnesia

Ever had a brainstorming session, agreed on a solution, and later forgot why you chose it? Or had a teammate ask, “Why did we do it this way?” — and no one remembered?

That’s where good documentation comes in. It prevents:

  • Knowledge loss when team members leave.
  • Repeating the same discussions over and over.
  • Confusion when onboarding new developers.

Jumping into a project without documentation feels like entering a maze blindfolded. Good documentation is more than just notes — it’s your team’s memory and the fastest path to getting new devs productive.

Types of docs engineers write:

📄 Design Docs (RFCs): Explaining why we chose Kubernetes over ECS for our new microservice architecture.
📄 Runbooks: Step-by-step guides on how to restart the payment service at 3 AM during an outage.
📄 Onboarding Guides: “Here’s how to set up the development environment and get your first test running."
📄 Architecture Overviews: High-level diagrams and explanations of how system components interact.

Tools to use:

  • Markdown (for READMEs, GitHub Wiki, internal project notes).
  • Confluence (for team knowledge bases, meeting notes, long-form design docs).
  • Docusaurus (for generating professional, versioned technical documentation sites).

Golden Rule: Write docs assuming you’ll quit tomorrow and someone else needs to take over seamlessly.

4. Writing API Documentation: Your Product’s First Impression

Bad API docs = frustrated developers = abandoned integrations. Your API documentation is the bridge between your service and its consumers.

What great API docs include:

🔹 Clear endpoint descriptions: What does it do? What HTTP method?
🔹 Detailed parameters: Required vs. optional, data types, examples.
🔹 Endpoint examples (cURL, Python, JavaScript requests/responses).
🔹 Comprehensive error codes (“403: Auth token expired,” “400: Invalid input parameter”).
🔹 Interactive explorers (Swagger UI, Postman collections) for easy testing.

Example: Compare these two API responses:

Bad:

JSON

1
2
3
{
  "error": "Invalid request"
}

Good:

JSON

1
2
3
4
5
6
7
8
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Email must be a valid address.",
    "field": "user.email",
    "details": "The provided email format does not match required standards (e.g., missing '@' or domain)."
  }
}

5. Writing Error Messages: Your Built-in Support Agent

Often overlooked, effective error messages are direct communications with your users (whether they’re developers or end-users) at their moment of frustration. A well-written error message can guide them to a solution, while a poorly written one amplifies their annoyance and lead to support requests.

Why Error Messages Matter:

  • Troubleshooting & Debugging: For developers, precise error messages are invaluable for quickly pinpointing the root cause of an issue
  • User Experience: Turns roadblocks into solvable problems, improving satisfaction.
  • Reduced Support Load: Users can self-serve for common issues, decreasing support tickets.
  • Building Trust: Shows you’ve anticipated problems and care about the user journey.

How to Write Effective Error Messages:

  1. Be Clear and Concise:
    • Bad: “An error occurred.”
    • Good: “File upload failed: The selected file exceeds the maximum size limit of 10MB.”
  2. Be Specific About the Problem:
    • Bad: “Invalid input.”
    • Good: “Please enter a valid email address (e.g., user@example.com).”
  3. Explain Why the Error Occurred (if possible):
    • Bad: “Login failed.”
    • Good: “Login failed: Incorrect username or password.”
  4. Suggest a Solution or Next Step:
    • Bad: “Connection refused.”
    • Good: “Connection refused. Please check your internet connection or try again later. [Link to status page]”
  5. Use User-Friendly Language (Avoid Jargon):
    • Bad: “Error 0x0000000A: The process tried to execute a non-executable memory region.”
    • Good: “A critical error occurred, and the application needs to close. Please restart the application.”
  6. Maintain a Consistent Tone: Ensure messages align with your brand’s voice – helpful, empathetic, and professional.
  7. Provide Contextual Help (if applicable): Offer links to documentation, FAQs, or support channels for complex errors.

Know Your Audience: 6 Stakeholders & How to Write for Them

As engineers, we communicate with diverse groups. Tailoring your message is key.

Audience What They Need Writing Tips
Developers Code, APIs, CLI tools, technical specs, precise details. Use technical terms consistently but keep examples clear and runnable. Focus on functionality and integration points.
Product Managers Timelines, trade-offs, user impact, feature summaries. Focus on user value: “This cuts checkout time by 2 seconds, improving conversion rates.” Explain what it enables for users, not just how it’s built.
Executives ROI, risks, strategic alignment, high-level summaries. Skip jargon: “This security enhancement reduces our risk of data breaches by 80%, saving potential regulatory fines of millions.” Focus on the business bottom line.
Support Teams Troubleshooting guides, common issues, step-by-step resolutions, FAQs. Write clear, actionable steps with screenshots. Anticipate common user questions and provide simple explanations.
Legal/Compliance Teams Data flows, privacy implications, security measures, regulatory adherence. Highlight GDPR/PII handling, data encryption methods, and compliance certifications. Be precise about data lifecycle.
End Users Error messages, setup guides, FAQs, intuitive instructions. Use friendly, empathetic, and actionable language. Avoid technical jargon. Focus on guiding them to success or helping them understand a problem without causing frustration.

Pro Tip: For external stakeholders, use the “Explain Like I’m 5” test. Could a non-techie understand the core message and its implications?

5 Universal Rules of Technical Writing

Beyond audience-specific tips, these principles apply across the board:

  1. Clarity > Cleverness – Your goal is understanding, not demonstrating vocabulary. Avoid “elegant” but obscure solutions in your writing.
  2. Active Voice – “The system processes logs every hour” beats “Logs are processed by the system on an hourly basis.” It’s more direct and concise.
  3. Audience-centricity: Is it tailored to who will read it?
  4. Consistency – Use the same terms for the same concepts (e.g., stick to “server,” don’t switch between “backend” and “node” unless there’s a specific distinction).
  5. Chunking – Break long paragraphs into bullet points, numbered lists, and clear headings. This makes content scannable and digestible.
  6. Feedback Loop – Have a colleague (especially a non-expert if possible) review your documentation. If they don’t understand it, it’s not clear enough.

Key Takeaways & Call to Action

  • Code is communication. Write for readability, not just functionality.
  • PRs are narratives. Explain the why, not just the what.
  • Documentation prevents chaos. Future you (and others) will thank you.
  • Error messages are mini-support agents. Guide your users to a solution.
  • Know your audience. Adjust your tone and content based on who’s reading.

Technical writing isn’t optional—it’s what separates a coder from an engineer. The better you write, the more impactful your work becomes, and the smoother your team’s operations will be.


Start Today

Great engineers don’t just build—they explain. Your writing is your legacy, ensuring your work has lasting impact and your team thrives.

  • Next PR You Write: Add a 2-sentence “Why” section explaining the problem it solves and its impact.
  • Pick One Doc to Improve: Choose a README, an API endpoint description, or a critical block of code comments and enhance its clarity.

Sources

comments powered by Disqus