I build small websites and apps for clients, and over the last year the shape of that work changed completely. A five-page site used to be a few days of typing. Now I describe it to Claude Code and most of it exists by the evening.
What didn't change is everything the project needs from someone who isn't me. The logo, sitting in a folder on a laptop nobody has opened since 2019. The "about us" paragraph nobody has written. The hosting password, somewhere in an email thread from two providers ago.
So the work compressed from five days to one, and the project still takes six weeks. The bottleneck moved, and it's now entirely outside my editor.
I'd send one email at the start of a project. It looked reasonable to me:
"Hi! To get started I'll need your logo, some copy about the company, a few photos, and access to your current hosting. Thanks!"
Four things. Ten minutes of work, I thought.
It isn't ten minutes of work, and that's the part I got wrong. "Some copy about the company" isn't a task, it's a writing assignment with no brief and no end. "A few photos" is a decision about which photos. "Access to your current hosting" means finding out who the host even is. Every line I wrote expanded into a small research project on their side, and none of them had a visible finish line.
Meanwhile the client has a job that isn't assembling files for their web developer. My email competed with everything actually due that day, and lost. Not because they were careless — because I'd sent them homework with no structure and no deadline, and that always loses.
What changed it was writing the request so that every line is one thing, in a format they can picture, with an example where the format isn't obvious.
Not "send me your logo" but "logo — SVG or PNG at least 1000px wide. If all you have is the PDF your designer sent, send me that and I'll pull it out."
Not "write something about the company" but "one paragraph about the company, 3–4 sentences. Here's one from a site I did last year, just as a shape: ..."
Not "brand colors" but "hex codes if you have them. If not, a photo of your storefront sign works — I'll sample it."
The difference in response time was bigger than I expected, and I think the reason is boring: a specific request can be finished. A vague one can only be postponed, because you're never sure you're done. When I write "at least 1000px wide" I also skip the round trip where a 200px logo arrives and I have to ask again — and asking again is what makes clients feel like the project is dragging, even when it's their own file that's late.
The other thing I stopped doing is asking for everything at once. Five items get finished. Twenty get postponed. If something doesn't block me from starting — analytics IDs, the final photo round — I leave it out of the first ask entirely and wire up a placeholder.
The second request is where projects actually die. People intend to answer, the moment passes, and unless something nudges them, it keeps passing.
I used to hate sending reminders. It felt like nagging, so I'd put it off a few days, which made the project later, which made the reminder feel even more awkward. Classic spiral.
What fixed it was saying it upfront, in the first message: "I'll check in Tuesday and Friday until everything's in." Nobody has ever been annoyed by it, because they agreed to it. It stopped being me pestering them and became a thing we'd arranged. And because it's on a schedule rather than on my mood, it actually happens.
One detail that matters: the reminder should say what's still missing, not repeat the whole original list. A client who already sent the logo and gets asked for it again quite reasonably concludes you didn't read their email.
Passwords need separate handling and it took me too long to take this seriously.
A WordPress admin password pasted into an email thread sits in plaintext in two inboxes, and in every backup of both, indefinitely — long after the project is over. If either account is ever compromised, it's still there. I've been handed live production credentials over Gmail more times than I can count, and I used to just... let that happen.
The minimum bar is a password manager's one-time share link. It costs the client one extra click and takes that credential out of permanent storage in two places.
I did this by hand for a long time: a checklist template, a calendar reminder to follow up, a separate secure link for logins. It works. It just doesn't scale past about three simultaneous projects, because keeping track of what arrived and what didn't, per client, becomes its own job.
So I built the thing I wanted — BriefGate, mine, so weigh that accordingly. The client gets one link with no account to create, the follow-ups send themselves, and logins go into an encrypted vault that reveals them once instead of living in my inbox. Because I work with coding agents, it also has an MCP server, so the agent can state what the project needs and pull the answers back as typed data without me relaying anything — though you can do all of it from the browser without an agent anywhere near it.
But honestly: the specific itemised list, plus telling the client upfront when you'll follow up, is most of the improvement and costs nothing. If you take one thing from this, take that. The tooling only matters once you're running enough projects that remembering becomes the bottleneck.
What I'm curious about — for those of you building client work with agents now: where does your time actually go? Because mine stopped going into the code about a year ago, and I don't think the tooling has caught up with that yet.