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