Asking questions and asking for help
Engineers are judged partly by the questions they ask. That cuts both ways: a sharp question raises your standing, and a lazy one ("it doesn't work, any ideas?") lowers it. This chapter covers the mechanics of asking well, plus a small but mighty set of phrases (the purpose tags: "for awareness", "just in case", "for my own understanding") that senior people use to label their messages so readers instantly know what is expected of them.
The anatomy of a good question
A good technical question answers four things before anyone asks:
- Goal: what you are actually trying to achieve.
- Attempt: what you tried.
- Observation: what happened, exactly (error text, not "it fails").
- Ask: the specific question.
Weak: The deploy is broken, does anyone know why?
Strong: I'm trying to deploy #4132 to staging (goal). "make deploy-staging"
worked on Friday; today it fails during the image push with
"403: token expired" (attempt + observation). I've re-run
"aws sso login" with no change. Has something changed in the
registry auth, or is this on my side? (ask)
The strong version is answerable in one pass, shows respect for the reader's time, and often answers itself while you write it. Rubber-duck debugging is real: a third of well-formed questions die in the draft box because forming them exposed the answer.
The XY problem
The classic asking failure: you want X, decide Y is the way to get it, get stuck on Y, and ask only about Y. Helpers then burn time on Y when X had a much better route. Vaccinate your questions by always stating the goal:
XY trap: How do I parse the process table output from inside the container?
Cured: Goal: detect whether the worker process is alive from the health
check. I was going to parse "ps" output; is there a better way?
(Answer: yes, check the PID file or use a liveness endpoint.)
If someone answers your question with "what are you actually trying to do?", they suspect an XY problem. That question is a favor, not an evasion.
When to ask: the timebox rule
Ask too fast and you outsource thinking; struggle too long and you burn a day on what a teammate knew instantly. The standard compromise is a timebox: 30 to 60 minutes of genuine effort, then ask, showing what you tried. Two situations override the timebox:
- Ask immediately when something looks broken for everyone (CI down, staging dead), when you might be about to cause damage, or during incidents.
- Struggle longer when the struggle is the point (learning a codebase you will own) and nothing is waiting on you.
The phrase that makes early asking respectable is evidence of effort: "I've read the runbook and the last incident doc; both assume the primary is reachable, which it isn't. Before I improvise: is there a procedure for this?"
Purpose tags: telling the reader what kind of message this is
Professional chat and email are full of small prefix phrases whose job is to set expectations: does this need action, an answer, or nothing at all? Using them precisely is a quiet mark of seniority. The core set:
| Tag | Meaning | Example |
|---|---|---|
| FYI / For awareness | No action needed; you should know this | "For awareness: the vendor moved the API deprecation to March." |
| For visibility | Same, aimed at a group or leadership | "Posting here for visibility: rollout is at 50% and stable." |
| Just in case | Preemptive info that may become relevant | "Just in case the demo asks for it: the sandbox creds are in the usual vault." |
| For completeness | Adding detail so the record is complete | "For completeness: the same error appeared once in eu-west, self-resolved." |
| For context / For background | Framing that helps interpret the ask | "For context, this is the third regression from this module this quarter." |
| For my own understanding | The question is learning, not challenge | "For my own understanding: why DynamoDB here rather than Postgres?" |
| Out of curiosity | Low-stakes question, fine to ignore | "Out of curiosity, was sharding considered and rejected?" |
| No action needed | Explicit "do nothing", often closing a loop | "Resolved by rolling back. No action needed; postmortem to follow." |
| Action needed / Action requested | The opposite: something is expected | "Action needed by Thu: confirm your service's owner entry." |
| Heads-up | Early warning, usually of something inconvenient | "Heads-up: I'll be merging a large refactor of the client tonight." |
Two of these deserve special attention:
"For my own understanding" (and its siblings "help me understand..." and "so I understand the reasoning...") is the standard device for questioning a decision without contesting it. "Why did we pick DynamoDB?" can sound like an attack on the decision; "For my own understanding, why DynamoDB over Postgres here?" declares that you are gathering the reasoning, not relitigating it. This one phrase lets junior engineers safely question senior designs, and senior engineers use it on each other constantly. The contract: if you use the learning frame, actually be open to the answer. Using it as a disguised attack burns the phrase and your credibility. When you genuinely want to challenge the decision, say so honestly; Chapter 5 covers that wording.
"Heads-up" buys forgiveness in advance. Surprises annoy people far beyond their actual cost; the identical event, announced an hour earlier as a heads-up, costs almost nothing.
Don't be confused: "FYI" and "heads-up" overlap but differ in tense. FYI marks information that already exists ("FYI, the freeze started Monday"); a heads-up warns about something coming, usually caused by you ("Heads-up, I'm about to restart the staging DB"). Forwarding an email chain with just "FYI" is standard and means "read if relevant to you; I expect nothing."
Making questions easy to answer
Busy and senior people triage. Questions engineered for cheap answers get answered first:
- Closed beats open. "Should retries be capped at 3 or 5?" is a ten-second answer. "Thoughts on retries?" is a meeting.
- Offer options with a lean. "Two options: (A) backfill in place, slower but no downtime; (B) shadow table swap, faster but needs a write freeze. I lean A. Preference?" You did the thinking; they do the choosing.
- Default-forward. The senior favorite: "Unless someone objects by Thursday, I'll proceed with A." Nobody has to reply at all for the work to advance. Use it for genuinely reversible decisions, not as a trick to sneak past review; irreversible calls deserve an explicit yes.
- Batch small questions. Five separate pings a day fragment the other person's attention; one message with a short numbered list respects it. Number the items so answers can reference them by number.
Following up without nagging
The unanswered question is a fact of distributed work. The etiquette:
- Wait a reasonable interval (a day for routine things, less when urgent).
- Bump in the same thread, gently, once: "Bumping this." / "Gentle bump." / "Circling back on this; still blocked on the answer."
- Add new information or a deadline if you have one: "Bumping; this now blocks the Thursday cut."
- After one or two bumps, change channels or people, and say so plainly: "I'll bring this to standup since it's getting urgent." That is normal routing, not tattling; see Chapter 10.
Avoid the passive-aggressive classics: "As per my previous email", "As already stated", "Per my last message". Native readers hear all of these as barely veiled hostility. If you need to repoint someone at earlier content, stay neutral: "Resurfacing the question from Tuesday:" or "Reattaching the doc for convenience."
Admitting ignorance well
The highest-signal phrase in this chapter costs the most to say early in a career and the least later: "I don't know." Senior engineers decorate it with a plan, which converts it from a confession into a commitment:
- "I don't know. I'll find out and post the answer here by tomorrow."
- "I don't know the numbers offhand; rather than guess, let me check."
- "That's outside what I've worked with; Ravi is the right person."
The anti-pattern is bluffing. In technical work, bluffs are eventually audited by reality, and one exposed bluff costs more trust than a hundred honest "I don't know"s. Related, when you only half-understood something, say which half: "I follow the write path; I lost you at the compaction step. Can you go over that part again?"
👉 With the everyday moves in hand (open well, thank well, ask well), we get to the discussions where engineering reputations are actually made. First: you have a design in your head and you want the team to adopt it. How do you propose it so that it gets engaged with rather than ignored, and how do you invite criticism on purpose? On to Chapter 4.