Notes
Field notes: the week of August 26, 2026
A slow week on the calendar turned into a busy one in the work. No launches, no big reveals, just a set of small decisions that will compound. That is usually how the good weeks look. Here is what actually happened, in the order it mattered.
The form field that was costing a client money
We found a lead form on a client site that required a phone number. Not unusual. What was unusual: the field was set to reject anything that was not exactly ten digits, no spaces, no dashes, no parentheses. A visitor typing (415) 555-0198 got a silent rejection with a red outline and no explanation. Roughly the way most people write a phone number.
We only caught it because a session recording showed three people in a row fill out the whole form, hit submit, and leave. No error message they could read, no fallback. The form just refused them.
The fix took four minutes: strip non-numeric characters before validating, and validate on submit instead of on blur. The lesson took longer to sink in. This form had been live for eight months. Nobody complained, because people who cannot submit a form do not email you to say so. They just go somewhere else.
- Validate loosely, store cleanly. Accept what humans type, normalize it on the backend.
- Never fail silently. If you reject input, say why, next to the field.
- Watch real sessions before you trust your funnel numbers. A conversion rate can look stable while a whole segment quietly bounces.
We killed a report nobody read
Every Monday we generated a channel-attribution summary for a client and dropped it in their workspace. It ran to two pages. This week we checked the file access logs in our own portal and found it had been opened twice in the last two months, both times by us.
So we stopped making it.
In its place we send three lines: what moved, what we are doing about it, and the one number they should watch this week. It takes less time to write and it actually gets read. The attribution detail still exists, it just lives in the dashboard where someone can pull it when they have a specific question.
A report that nobody opens is not communication, it is theater with an audience of zero.
The uncomfortable part of this industry is how much of the work is performed rather than useful. Long decks and dense reports feel like value because they took effort. But effort is our problem to manage, not the client's thing to admire. If the deliverable does not change a decision, it is overhead.
A rescue that should have been a rebuild
We took on a site rescue in early August. The plan was to keep the existing build and fix the parts that were bleeding: page speed, a broken checkout step, and thin category pages. Straightforward, we thought.
By Wednesday it was clear we had misjudged it. The theme had been customized by three different developers over four years, each one working around the last one's code instead of removing it. Fixing the checkout meant touching a template that fed six other templates. Every change had a blast radius we could not fully predict.
We had a call with the client and changed our recommendation. The honest version: the money we would spend patching this over the next two quarters would exceed the cost of a clean rebuild, and we would still be left with a fragile system. Patching made sense on day one because we did not know the shape of the mess. Once we did, the math flipped.
Why we were willing to reverse ourselves
We get paid on outcomes, not hours, so a rebuild is not automatically better for us. It is more work up front with no extra billing attached. That is exactly why the recommendation is trustworthy: we are not steering toward the bigger invoice because there is no bigger invoice. We are steering toward the version of the site that produces revenue with the least ongoing drag.
The general rule we keep relearning: you cannot decide between a rescue and a rebuild from the outside. You have to open the code, and sometimes you have to open it a second time after you have already started.
Small software changes that paid off
We ship changes to our own tools most weeks. This week's were unglamorous and worth the time.
- Site grader: we tightened how it reads redirect chains. A site with three hops before landing on the final URL was scoring the same as a clean single redirect. Now the grader flags chains longer than one hop, because each extra redirect adds latency and leaks a little link equity.
- Chat: we added a way to pin a message to the top of a client channel. Sounds trivial. It solved a real problem where the current sprint goal kept scrolling out of view and people made decisions against stale context.
- MCP server for Claude: we exposed the dashboard metrics as a tool so we can ask questions in plain language instead of clicking through filters. "Which pages lost organic traffic this month and also have a form on them" used to take ten minutes of manual cross-referencing. Now it is one prompt. The value is not the novelty, it is the removal of a task we were skipping because it was tedious.
None of these are big. Together they shave friction off the parts of the week that used to eat an hour here and there. That time goes back into the work that actually moves client numbers.
What we are carrying into next week
Three things are on the list, and we are writing them down here so we hold ourselves to them:
- Audit form validation across every active client site, because if one had a silent-failure bug, others probably do.
- Scope the rebuild we recommended, with a realistic sequence so the client is never without a working checkout during the transition.
- Review the other standing reports we generate and cut any that follow the same pattern as the one we killed. If the access logs are near zero, the report goes.
The through-line this week was subtraction. The best moves were removing a report, removing a validation rule that was too strict, and removing our own attachment to a plan that stopped making sense. Growth work gets framed as adding, but a lot of the real gains come from taking bad things out of the way.
If your site has a quiet leak like that form field, the fastest way to find it is to look. Run the free grader for a first pass, or apply for partnership if you want us digging through the code with you.