Write Better Emails

Refactoring English book cover

Presented 2025-06-20

https://slides.refactoringenglish.com/

What makes an email good or bad?

Good emails: Clarity

  • Subject line describes topic succinctly
  • Recipients understand what you’re telling them

Good emails: Clarity

  • Minimizes ambiguity / need for clarification
  • Action items you expect of recipients are obvious

Good emails: Low noise

  • Information is relevant to recipients
  • If email has multiple audiences, each audience can find parts relevant to them
  • Presents information concisely

Bad emails: Poor recipient management

  • Overly broad recipients
  • Everyone is bcc’ed
  • People are silently added/removed
  • Teams silo’ed on separate threads

Bad emails: Chatty

  • Lots of quick back-and-forth
  • High email volume, low progress

Bad emails: Why am I on this thread?

FWD: FY2026 planning

thoughts?

Go seems to have a better story in terms of deprecation and backcompat.

We’d also need to migrate the old servers off Python 2.7, as that’s been EOL for years now.

Process-centric emails

  • Idea comes from Cal Newport
  • Goal of email thread
    • Resolve the thread in fewest possible emails

Anti-pattern

  • Respond ASAP to get the thread out of your inbox

Process-centric emails

Friend: Do you want to grab coffee sometime soon?

Lazy response

okay, what works for you?

Cal Newport response

Sounds great. I propose we meet at the Starbucks on campus. Below I have listed four dates and times over the next two weeks. If any of these work for you, let me know and I will consider your reply confirmation that the meeting is set. If none of these times work, then call me or text me on my cell (<number>) during one of my upcoming office hours (Tue/Thur from 12:30 to 1:30), when I’m sure to be around, and we’ll find something that works.

Process-centric emails

Friend: Do you want to grab coffee sometime soon?

My response

Sure, that sounds great!

How about Starbucks on Tuesday (June 24) at 2pm?

I’m also free at these times […] and open to other venues like Mario’s or Tabby Cafe.

Context-switching

  • Costly to focus to keep returning to email thread

Diligence increases with stakes + number of recipients

  • Email to entire company: Prepare and edit thoroughly
  • Casual email to friends: Don’t worry too much

Tactics for high-stakes emails

  • Consider a one-line tl; dr
  • Break body into sections with headings
  • Split out action items and questions
  • Aggressively prune recipients / split threads

Subject line

  • Help recipients recognize relevance
    • Similar to a blog post title or a commit message summary

Bad subject lines

  • question
  • [your company name]

Good subject lines

  • Precise and descriptive
  • Describe a process that the thread can resolve
  • Examples
    • Integrating FooLib into BarService
    • Design Review: SQLite to Postgres migration plan

Subject line

  • Add prefixes to indicate special attention
    • [Action required] Pick up your new ID badge
    • [Urgent] Ice cream party in microkitchen NOW

Update the subject line

  • When the focus shifts, split thread and update subject

Subject: Failed deployment in us-east-1 WAS: Pushing 1.2.0 release

Subject: Choosing metrics to track WAS: Metrics tracker design review

Why am I reading this email?

Get to the point

  • First few lines are most important (like in blog posts)
  • Within the first three sentences:
    • Who is the audience for this email?
    • Why is it important that they read it?

Use the inverted pyramid

  • Idea: Help recipients stop reading ASAP
  • Add a one-line TL; DR

Trimming noise

I didn’t have time to write you a short letter, so I wrote you a long one.

-Mark Twain

Trimming noise

  • The longer the email, less likely people are to read
  • Techniques
    • Link to external resources
    • Split some material to separate threads / narrower audience
    • Summarize with bullet points

Tool: Markdown Here

  • Browser extension
  • Write emails in Markdown, convert to HTML before sending

Tool: Markdown Here

Use headings

  • Break up large email
  • Make it easy for readers to scan for relevant information
    • Especially if there are many recipients.

Use headings

Subject: Decomissioning DolphinSnax API

tl; dr - We’re sunsetting the DolphinSnax API on October 1, 2025. All clients must migrate before that date.

When will decomissioning begin?

The API will begin serving warnings on…

How can we migrate?

…

Recipient management

  • Mention in the thread who you’re adding or dropping.

[moving moxy-dev@ to bcc]

[adding performance-stats@]

Recipient management

  • Summarize thread
  • Explain why you added them

[adding performance-stats@]

performace-stats@ - We’re trying to understand how the new metrics library will affect compile times. Do you have data on this?

Action items

  • Create explicit action items with owners

Action items

  • Gilfoyle - Investigate why FunkBot alerts keep firing.
  • Dinesh - Give Jared the resource requirements for the TacoChat backend.
  • Nelson - Schedule a meeting with the SRE team to get launch approval.

Action items

  • Explicitly say when no action is required

billing-team@ - No action required, as we’re still waiting on the client to sign.

Questions

  • For long or high-stakes emails, split out questions like action items.

Questions

  • Dana - What is the ETA on the test automation for v1?
  • Poppy - Which hardware architectures are we targeting for v1?

Should this be an email?

Bad discussions for email

Low-latency discussion

  • Example
    • Team A wants Team B to use tool Foo
    • Team B knows nothing about Foo
    • Team A doesn’t understand Team B’s needs

Bad discussions for email

Difficult conversations

  • Examples
    • Giving negative feedback
    • Cooling tensions

Bad discussions for email

Defining policy

  • Email becomes canonical place for policy decision
    • Was there a later email?
    • How do I find this decision?

Preventing accidental sends

  • For high-stakes emails, enter recipients last

Preventing accidental sends

  • Configure your email client for undo send
    • Delayed sending, not recall emails