Last spring I built a reporting dashboard for a small logistics startup called Freight Lane. The feature itself, a weekly cost breakdown by route, took eleven days to design and build. The empty state that appears before a user has any data took sixteen. I didn’t plan it that way. It just turned out that the thing with nothing in it was the hardest part of the whole project.
The Brief Nobody Wrote Down
The original spec from Freight Lane’s founder, Dana Petrov, was four lines long. Build a dashboard, show cost per route, let people filter by week. Nowhere did it mention what happens on day one, when a new customer connects their account and has zero routes logged. That screen wasn’t in the brief because nobody thinks about it until a support ticket arrives asking why the dashboard is broken.
Thirty-One Percent of First Sessions
We pulled analytics from Freight Lane’s existing app before redesigning anything. Thirty-one percent of first sessions ended within ninety seconds of hitting a screen with no data on it. Not a crash, not an error. Just a blank rectangle where a chart should be, and a user who assumed the product didn’t work yet.
Six Versions, One Afternoon
I sketched six versions of the empty state in one sitting, low fidelity, grayscale, maybe twenty minutes per version. One showed a sample chart with fake numbers labeled clearly as a preview. One showed a single sentence and a button. One showed an illustration of a truck on an open road, which felt right for about four minutes until I realized it told the user nothing about what to do next.
The One That Worked
The version we eventually shipped combined a ghost chart, drawn in fifteen percent opacity gray, with one line of copy underneath it: “Connect your first route to see costs here.” Below that, a single button. No illustration, no mascot, no truck. The ghost chart did the job an illustration couldn’t: it told the user exactly what shape the real data would eventually take.
What Copy Had to Do
I wrote fourteen versions of that one sentence. Early drafts were apologetic, things like “Nothing to show yet, sorry.” Dana pushed back on all of them. Her note, which I kept taped above my desk for the rest of the project, was simple.
An empty screen isn’t an apology. It’s an instruction. Tell them what to do, not what’s missing.
That reframing changed every line after it. The final copy never used the word empty, missing, or nothing. It described the action, not the absence.
Testing With Five Real Users
We tested three versions with five Freight Lane customers who had just signed up, using Maze for the remote sessions. The version with the ghost chart and the direct instruction had a 90 percent task completion rate, meaning four of five users connected a route within the first session without being prompted twice. The illustrated truck version scored 40 percent. People liked looking at it. They just didn’t know what to click.
A Detail Almost Nobody Notices
One small thing mattered more than I expected: the button on the empty state used the exact same label as the button inside the onboarding flow two screens earlier, “Connect a route.” When we tested a version with slightly different wording, “Add your first route,” two of five users hesitated, unsure if it was the same action. Consistency in a four-word label turned out to carry real weight.
What Shipped
- A ghost chart at 15 percent opacity matching the real chart’s exact proportions
- One sentence of instructional copy, never apologetic, never using the word empty
- A single primary button, label matched word for word to the onboarding flow
- No illustration, no character, no decorative imagery
- A secondary link to a two-minute setup video, used by 22 percent of first-time visitors
Support tickets related to the dashboard dropped by 70 percent in the six weeks after launch, according to Dana’s own tracking in Zendesk. That’s a bigger number than almost anything we changed in the actual reporting feature.
What I’d Do Differently
I’d start designing the empty state on day one instead of day nine. Treating it as an afterthought meant we discovered the real problem, that users didn’t understand the shape of the data they were waiting for, far later than we should have. The ghost chart idea came out of desperation in week two, not out of a plan.
Every product has more empty states than full ones in a new user’s first week. Onboarding screens, zero search results, a filtered view that returns nothing, a first-time load before data syncs. Most teams design the full state with care and let the empty one default to whatever the engineer typed in to stop the layout from breaking. It’s usually the cheapest fix with the highest return, and it’s the one most likely to get skipped under deadline pressure.