Status Updates & Demos
Your client cannot see you work. What they can see is your updates and your demos — so for them, that is the work. This module covers the cadence, the format, and the honesty standards that make a client feel like hiring you was the safest decision they made all year.
The Update Is the Product
Inside Hireboard, your teammates can see your commits, your PRs, your Slack threads, your working-out-loud narration. A client sees none of that. They see two things: what ships, and what you tell them. Between ship dates — which is most of the time — your updates are the only visible surface of your work.
This has a consequence that feels unfair until you accept it: two engineers doing identical work are perceived wildly differently based purely on update quality. The engineer who ships quietly is "fine, I guess — hard to say what they're doing." The engineer who ships the same amount but narrates it clearly is "on top of everything, worth every dollar." The overcommunication standard you learned on the Communication Standards board applies here at double strength — except now it points outward, at someone who is paying for the work and has far less context than any teammate.
Now look at what silence does to a client. An un-updated client does not think "they must be heads down, great." They fill the void, in a predictable sequence:
- First, worry. "Is this stalled? Did I explain the requirements badly? Is this what outsourcing horror stories look like?"
- Then, check-in emails. "Hi, just checking in on the dashboard work — any update?" Every one of these is a small invoice against your credibility, because they had to spend their time asking for something you should have already given them.
- Then, escalation. When check-ins do not produce confidence, the client stops emailing you and starts emailing Hireboard's founders. At that point the conversation is no longer about the dashboard — it is about whether the engagement is working.
None of that sequence requires your work to actually be behind. It only requires the client to not know. Silence is not neutral with a client; it is expensive, and it compounds daily.
The Goal State
The client never has to ask "how is it going?" Not once, ever. If that question arrives, your update system has already failed — the answer existed, but it was in your head instead of in their inbox. Every check-in email you receive is a bug report against your communication, and you should treat it like one.
Client's Perspective
"I've worked with contractors who were probably great engineers, but every week I had to chase them for status, and every chase made me wonder what else I'd have to chase. The Hireboard engineer emails me every day before I even think to ask. I genuinely could not tell you which of them wrote better code — but I know exactly which one I renewed."
Cadence and Channel
Good update rhythm is not "whenever something happens." It is a contract: a fixed cadence the client can set their watch by, plus an immediate lane for anything material. Here is the default rhythm by project state:
| Project state | Cadence | Shape |
|---|---|---|
| Active build (feature in flight, launch approaching) | Daily, async, by an agreed time | 3-6 lines: headline, progress, next, blockers. Two minutes to read. |
| Steady state (maintenance, longer arcs, background work) | Weekly, structured summary, same day every week | Shipped / in progress / next week / needs from you / dates. |
| Anything material (risk, slip, incident, scope discovery) | Immediately — never held for the next scheduled update | What happened, impact on their dates, your mitigation, next update time. |
The third row is the no-surprises rule wearing its update clothes: a scheduled cadence never buys you the right to sit on material news. If something changes their dates, their cost, or their risk, the cadence is suspended and the news travels now.
Meet Them Where They Read
Send updates in the client's channel, not yours. If they live in their Slack, post there. If they run their company from email, email. If their PM tool is the source of truth, update the tickets and summarize in their channel. A beautiful update in a channel they never open is a missed update. You are a guest in their communication culture — adapt to it, do not make them adapt to yours.
Set the Contract at Kickoff
Do not let the cadence emerge by accident — declare it in your first week: "You will hear from me every workday by 6pm your time, and immediately if anything material changes." Then keep it, mechanically, even on days when the update is boring.
This does something subtle and powerful: a promised rhythm kept is trust manufactured on schedule. Every update that lands when you said it would is a small, verifiable promise fulfilled — five per week, twenty per month. Clients extrapolate: the engineer whose 6pm update has never once missed is the engineer whose "it ships Thursday" gets believed. You are building the credibility you will need for the hard conversations later, one boring update at a time.
Kickoff cadence contract
“Quick note on how I work: you'll get a short written update from me every workday by 6pm your time — what moved, what's next, anything I need from you. If anything material changes (a date, a risk, a cost), you'll hear about it the same day, not in the next scheduled update. You should never have to wonder where things stand — if you ever do, tell me and I'll fix my updates, not the other way around.”
Pro Tip
Working across time zones? Anchor the cadence to theirclock ("by 6pm Eastern"), not yours. An update that lands at the start of their workday answers the "how is it going" question before they have had time to form it — which is exactly the point.
The Anatomy of a Client-Grade Update
A client-grade update is stricter than an internal one, because the reader has less context, less time, and more money on the line. The structure, in order:
- Headline first, in business language. One sentence stating what moved for them. "Checkout is now 2x faster on mobile" — not "refactored the cart service." The client should get the day's value from line one alone.
- Progress. What got done, stated as outcomes.
- Next. What you are doing tomorrow / next week, so they can see the path, not just the position.
- Blockers and needs. What is blocked, what you need from them, and by when. Never bury this — it is the one section that asks the reader to act.
- Dates. Confirm the dates that still hold and flag any that moved. A date silently repeated is a promise silently renewed — say it out loud each time.
Translate Relentlessly
Every line of a client update passes through one filter: effects over mechanisms. The client bought outcomes, not engineering activity, and most client contacts cannot evaluate the activity anyway — so an untranslated update reads as noise at best and evasion at worst.
| Engineer-speak (don't send) | Client-grade translation (send) |
|---|---|
| Refactored the cart service and added Redis caching | Checkout is now about 2x faster on mobile |
| Closed HB-482 and HB-490 | Fixed the two signup bugs your support team flagged last week |
| Migrated auth to the new middleware, tests green | Login is now on the more secure system — no user-facing change, and it unblocks the SSO work you asked for |
| Blocked on the staging env, infra is looking at it | Testing is paused until your infra team restores the staging site (they're on it); if it's back by Wednesday, Friday's date holds |
Notice the rules at work: no internal jargon, no ticket numbers without a plain-language description attached, every technical fact tied to a consequence the client cares about. If a sentence describes a mechanism, ask "so what?" until it describes an effect — then send the effect.
Daily update template
“[Headline: the one thing that moved for you today.] Progress: [2-3 outcomes in plain language]. Next: [what I'm on tomorrow]. Blockers/needs: [none, or a specific ask with a date]. Dates: [Friday demo still on track / X moved to Y because Z].”
Weekly summary template
“Week of [date] — headline: [the biggest thing that moved for you]. Shipped: [outcomes, plain language]. In progress: [what's mid-flight and where it stands]. Next week: [planned outcomes]. Needs from you: [specific asks with dates, or "nothing this week"]. Dates: [each committed date, confirmed or moved with reason]. Questions welcome — happy to jump on a call if any of this is easier live.”
When the Blocker Is the Client
Sooner or later you will be blocked on the client themselves — an API key they have not sent, a decision they have not made, a stakeholder they have not looped in. Many engineers go passive here and let "waiting on client" sit in the update for three weeks like weather. That is a failure: asking a client for what you need is an update skill, and it uses the same anatomy-of-an-ask you learned on the Writing That Works board.
- Specific ask: exactly what you need, from whom, in what form. Not "waiting on access" — "I need a production API key for Stripe, from whoever owns your Stripe account."
- Why it matters to their date: connect the ask to the thing they care about. "Payment testing can't start without it, and it's the long pole for the March 3 launch."
- Deadline with a default: what happens if you don't hear back. "If I have it by Thursday, March 3 holds. If not, I'll build against test keys and we'll need a day of production verification after you send it — I'll assume that plan unless you tell me otherwise."
The deadline-with-default matters most. It keeps the project moving without the client's reply, and it makes the cost of their delay visible before the delay happens — so when the date moves, it is a consequence they were warned about, not a surprise you sprung on them.
Blocked-on-client ask
“One thing I need from your side: [specific item] from [specific person/team]. It's the blocker for [workstream], which is the long pole for [their date]. If I have it by [day], [date] holds. If not, my fallback is [default plan] — I'll proceed with that unless you'd rather I hold. Happy to hop on a call with [owner] if that's faster.”
Demos That Land
A demo is the highest-bandwidth update you can give: thirty seconds of watching the feature work beats a thousand words describing it. It is also the highest-stakes one, because a demo is a live sample of your quality. A crisp demo makes every written update you send more believable. A shambolic one makes the client re-read your past updates with new suspicion.
Demo Outcomes, on Real-ish Data
Demo what the feature does for their business, not how it is built. And stage it with realistic data: real product names, plausible customers, sensible numbers. A checkout flow full of "lorem ipsum" and "test test 123", with a console open and spraying red errors, drains trust faster than no demo at all — the client cannot evaluate your architecture, but they can absolutely recognize sloppiness, and they will assume the parts they cannot see match the parts they can.
Rehearse and Pre-Stage
- Rehearse the happy path twice, end to end, in the exact environment you will present from. Not a mental walkthrough — actual clicks. Most demo disasters are things a single rehearsal would have caught.
- Pre-stage everything: tabs open in order, test accounts logged in, data seeded, notifications silenced, the slow first-load already triggered. The demo starts at the interesting part, not at a login screen.
- Have a fallback recording ready. If the live environment dies, you switch to the recording in ten seconds and the meeting keeps its value. You will need it one time in twenty, and that one time it is worth everything.
- Narrate in their language: user stories, not architecture. "Your ops manager searches for the order, sees the refund status instantly" — not "this calls the new endpoint with a cached join." Walk in their users' shoes for the length of the demo.
When It Breaks Anyway
Sometimes the demo breaks live. What the client remembers is not the bug — software has bugs, every client knows this — but your next ten seconds. Panic, muttered debugging, and five minutes of console-diving turn a hiccup into a crisis. Calm ownership turns it into a display of professionalism: name it, log it, move on.
Demo recovery line
“Well — that's exactly why we demo. I've noted it and you'll have a fix confirmation from me by tomorrow. Let me show you the rest, because the search flow is the part I'm most excited about.”
The recovery IS the impression. A client who watches you absorb a live failure without flinching learns something no flawless demo could teach them: this is what you will look like when production breaks. Then honor the line — the follow-up you promised must actually arrive tomorrow, or the calm was just theater.
End With Next Steps, and Multiply With Recordings
Every demo ends the same way: what happens next, and by when. "Feedback by Thursday, we ship Friday, then usage data next week." A demo that ends with "so... yeah, that's it" leaks all its momentum in the last five seconds.
And for time-zone-split teams, record it. A three-minute Loom — same rehearsed happy path, same their-language narration, same next-steps ending — is the async multiplier: the client watches at 9am their time, forwards it to stakeholders you have never met, and re-watches before their own board meeting. One recording can demo for you a dozen times while you sleep.
Showing Progress Honestly
Everything above is technique. This section is the integrity line underneath it, and it is the part that decides whether your updates are an asset or a liability.
Never Inflate
The temptation is constant and gentle: round 70% up to "almost done," call a shaky feature "basically working," say "90% done" because it feels close. Resist all of it, because inflation always gets audited — by the calendar. A "90% done" that stays 90% for two weeks torches your credibility more thoroughly than an honest "60%, and here's what remains" ever could. The client does the math: either you did not know your own status, or you knew and shaded it. Both readings are fatal to trust, and trust is the only thing that makes your future updates worth reading.
The fix is structural: stop reporting percentages, and report state instead. Percentages are feelings wearing a number. "Done, demoable, remaining" is checkable fact:
- Done: finished to the standard the client will experience — tested, deployed or deployable. Not "code-complete pending review."
- Demoable: working well enough to show. An offer, not just a status: "happy to walk you through it Thursday."
- Remaining: named work with an estimate — not a shrinking percentage of mystery.
The Forever-90% Update
"Dashboard: 90% done" — sent three Fridays in a row — is the single most trust-destroying update pattern in client work. By week two the client has stopped believing the number; by week three they have stopped believing you, and they carry that discount into every estimate you give for the rest of the engagement. If you cannot name what "the last 10%" actually is, the honest status is "the remaining work is unscoped" — say that instead.
Make Invisible Work Visible
Some weeks the honest answer is that nothing client-visible happened: you migrated the database, wrote the test harness, rebuilt the deploy pipeline. The temptation is to pad the update with fluff or skip it. Do neither. Foundational work is real work — the failure is reporting it in engineer-speak ("migrations, mostly") and letting the client conclude they paid for an invisible week.
Instead, tie the invisible work to the visible value it enables. The client cannot value a migration, but they can absolutely value what the migration makes possible — so give them the causal chain, and give them the date when it pays off.
Foundations-week framing
“This week was foundations — nothing you can click yet, but here's why it mattered: I finished [the invisible work], which is what makes [the visible thing they want] safe to ship [when]. Without this week, [concrete risk it prevented]. Next week is visible again: [what they'll see].”
Pair Every Risk With Its Mitigation
Honest updates include risks — that is the no-surprises rule. But a naked risk ("the vendor API might not be ready in time") reads as an alarm bell, and a client who gets alarm bells with no plan attached learns to dread your emails. The standard: every risk you raise arrives already wearing its mitigation. "The vendor API might slip — so I'm building against their mock this week, which protects the launch date; the only thing at risk is the day of final verification." Same honesty, opposite effect: the first version transfers your worry to the client, the second demonstrates that the worry is already being managed. Inform, never alarm — not by hiding risks, but by never showing up to one empty-handed.
Warning
Honesty without framing is not a virtue — it is outsourcing your anxiety to someone who is paying you to manage it. But framing without honesty is worse: one discovered inflation costs more trust than fifty well-framed bad-news updates. When the two ever seem to conflict, honesty wins, every time.
Client's Perspective
"My engineer once opened a weekly update with 'honest week: I estimated the search work badly, it's at 60% not done, here's the remaining list and the new date.' My first reaction was disappointment. My second was: every 'on track' this person has ever sent me was true. I have never audited their status reports since. That is what I am actually paying for."
Knowledge Check
Five scenarios from real client engagements. Pick what the service-professional standard says — not what feels most comfortable in the moment.