<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dogfooding on PHP Boy Scout</title><link>https://phpboyscout.uk/tags/dogfooding/</link><description>Recent content in Dogfooding on PHP Boy Scout</description><generator>Hugo -- gohugo.io</generator><language>en-gb</language><copyright>Matt Cockayne</copyright><lastBuildDate>Wed, 22 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://phpboyscout.uk/tags/dogfooding/index.xml" rel="self" type="application/rss+xml"/><item><title>The feature your users are already faking</title><link>https://phpboyscout.uk/the-feature-your-users-are-already-faking/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://phpboyscout.uk/the-feature-your-users-are-already-faking/</guid><description>&lt;img src="https://phpboyscout.uk/the-feature-your-users-are-already-faking/cover-the-feature-your-users-are-already-faking.png" alt="Featured image of post The feature your users are already faking" /&gt;&lt;p&gt;Hailey didn&amp;rsquo;t raise a feature request. She didn&amp;rsquo;t ask me to add a button. She didn&amp;rsquo;t even
describe it as something missing from &lt;a class="link" href="https://phpboyscout.uk/i-built-my-wife-a-judge/" &gt;krites&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;She just showed me what she&amp;rsquo;d already started doing.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve both been playing with Gemini for a long time now. Not in any grand strategic
&amp;ldquo;the future of work&amp;rdquo; sense, just in the way two people in the same house share daft little
experiments with each other. Sometimes to impress, sometimes to make the other one laugh,
and sometimes because one of us has found a use for it that actually sticks.&lt;/p&gt;
&lt;p&gt;This one stuck.&lt;/p&gt;
&lt;p&gt;She&amp;rsquo;d started uploading sets of her photos to Gemini and asking it to critique them. Not
edit them. That&amp;rsquo;s an important distinction. She wasn&amp;rsquo;t handing the machine a frame and
saying &amp;ldquo;make this better&amp;rdquo;. She was asking it to look at her work, build a sense of her
style, and then talk back to her about composition, colour, light, story, balance, the bits
that are hard to improve when you&amp;rsquo;re mostly working on your own.&lt;/p&gt;
&lt;p&gt;Photography can be lonely like that. It looks collaborative from the outside because there
are people everywhere, especially at a wedding, but the improvement loop is often just you,
your screen and a folder full of decisions. There isn&amp;rsquo;t always a team around you to poke a
frame and say, &amp;ldquo;that one nearly works, but the crop is fighting you&amp;rdquo;, or &amp;ldquo;the colour&amp;rsquo;s
lovely, but you&amp;rsquo;ve lost the subject&amp;rdquo;. So she&amp;rsquo;d found herself a coach.&lt;/p&gt;
&lt;p&gt;And I was thrilled.&lt;/p&gt;
&lt;h2 id="she-was-not-asking-it-to-do-the-work"&gt;She was not asking it to do the work
&lt;/h2&gt;&lt;p&gt;The bit I liked most was how she was using it. She&amp;rsquo;d give Gemini a set of photos so it
could build a rough profile of her work: the things she reaches for, the shapes she likes,
the kind of light she keeps coming back to, the little patterns you don&amp;rsquo;t always spot in
your own output because you&amp;rsquo;re too close to it. Then she&amp;rsquo;d pass it raw images for critique
and suggested edits.&lt;/p&gt;
&lt;p&gt;Then she&amp;rsquo;d do the post-processing herself.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the whole point. The machine wasn&amp;rsquo;t replacing the craft. It was giving her something
to argue with while she practised it. She&amp;rsquo;d take the suggestions, try to make the edits
herself, sometimes do the opposite just to see what happened, and keep going until she was
happy with the image. Then she&amp;rsquo;d send the result back, alongside the original, and ask for a
second round.&lt;/p&gt;
&lt;p&gt;Sometimes the response was good. Sometimes it was bad. That&amp;rsquo;s AI for you, it can be bob on
one minute and then confidently wander into a hedge the next. But the loop was useful, and
watching over her shoulder I could see the change. She was getting quicker. More confident.
The images were moving from good to properly, annoyingly good, and a new fine-art direction
was starting to appear in the work.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t interrupt that because it wasn&amp;rsquo;t on your roadmap.&lt;/p&gt;
&lt;h2 id="the-workaround-is-the-spec"&gt;The workaround is the spec
&lt;/h2&gt;&lt;p&gt;This had not featured in krites at all. Not really. I had a roadmap full of culling,
developing, retouching, object removal, local models, decision capture, all the machinery I
thought a photo tool needed&amp;hellip; and a critic that helped Hailey learn from her own edits was not on
the list.&lt;/p&gt;
&lt;p&gt;Which is funny, because the one real user of the tool had already gone and built the workflow
for herself out of whatever was lying around.&lt;/p&gt;
&lt;p&gt;That is about as clear a product signal as you&amp;rsquo;re ever going to get. Not a survey answer, not
a support ticket, not a pretend persona in a planning document. A real person, trying to do a
real job, stepping around your tool because another tool gives her something yours doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;The workaround is the spec.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t mean that in the neat product-manager way, where every bit of user behaviour becomes a
sticky note and a prioritisation meeting. I mean it much more literally. If someone is already
doing the thing, and the thing is working, your first job is not to defend the shape you had in
your head. It&amp;rsquo;s to pay attention.&lt;/p&gt;
&lt;p&gt;The defensive version would have been easy. krites is local-first. I have written quite a lot
about that already, and for good reason. Wedding photos are not disposable pixels. They are
clients&amp;rsquo; memories, and the default position of the tool is that they stay on Hailey&amp;rsquo;s machine.
I could have reached for the principle, folded my arms, and explained why uploading images to a
cloud model wasn&amp;rsquo;t what krites was about.&lt;/p&gt;
&lt;p&gt;But principles are meant to serve the person using the tool, not win arguments against them.&lt;/p&gt;
&lt;h2 id="making-the-exception-explicit"&gt;Making the exception explicit
&lt;/h2&gt;&lt;p&gt;So the job became smaller and more interesting: not &amp;ldquo;should krites ever use a cloud model?&amp;rdquo;,
because she was already doing that, deliberately and usefully. The job was &amp;ldquo;can I make this
workflow quicker, clearer and harder to trip over?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That means an AI review feature that is off until she configures it, explicit about where the
image is going, and advisory only. It can critique. It can compare. It can keep a record of the
rubric and the profile she is building. It can maybe make the whole loop less copy-pastey and
more repeatable.&lt;/p&gt;
&lt;p&gt;What it cannot do is quietly turn itself into the judge.&lt;/p&gt;
&lt;p&gt;The cull still has to be deterministic where it can be. The tool still has to protect the
originals. A review still doesn&amp;rsquo;t get to change a verdict, rewrite an image or pretend its
opinion is fact. It is another thing in her bag, somewhere between a loupe, a notebook and a
very enthusiastic assistant who occasionally needs telling to calm down.&lt;/p&gt;
&lt;p&gt;That shape matters because the feature only makes sense if it preserves the behaviour that
made the workaround valuable in the first place. Hailey was learning by doing. The review was
useful because it gave her friction, language and direction, not because it took the mouse out
of her hand. If I build the feature in a way that edits for her, I&amp;rsquo;ve missed the point so badly
I should probably go and sit on the step for a bit.&lt;/p&gt;
&lt;h2 id="a-user-beats-an-architect"&gt;A user beats an architect
&lt;/h2&gt;&lt;p&gt;This is one of the quiet advantages of building for one person you can actually watch. There&amp;rsquo;s
nowhere to hide. No analytics dashboard to misread, no &amp;ldquo;users might want&amp;rdquo; hand waving, no
imaginary market segment. There is just the person the thing is for, doing something you did
not expect.&lt;/p&gt;
&lt;p&gt;That can bruise the ego if you let it. I built this tool for her, after all, and here she was
using something else for a piece of the work. But that is a stupid way to look at it. She
wasn&amp;rsquo;t rejecting krites. She was showing me the next missing bit, before either of us had the
language to ask for it.&lt;/p&gt;
&lt;p&gt;Good tools grow like that. Not from the clean roadmap alone, but from the little sideways
movements people make when the clean roadmap runs out. The spreadsheet someone keeps exporting
because your report isn&amp;rsquo;t quite the one they need. The shell script wrapped around your CLI
because one flag always comes after another. The photo critique pasted into Gemini because the
tool that owns the library doesn&amp;rsquo;t yet have a way to ask for help.&lt;/p&gt;
&lt;p&gt;Those workarounds are not always features. Sometimes they&amp;rsquo;re warnings. Sometimes they&amp;rsquo;re proof
that your tool is aimed at the wrong job entirely. Sometimes they&amp;rsquo;re a sign that the right answer
is to make the other tool easier to reach, not to swallow it whole. But they are almost always
information, and information from real use is gold dust.&lt;/p&gt;
&lt;h2 id="we-did-the-same-thing-with-a-kitchen"&gt;We did the same thing with a kitchen
&lt;/h2&gt;&lt;p&gt;This isn&amp;rsquo;t only a software thing, either. The campervan has taught us the same lesson with
plywood and plumbing, which is substantially harder to revert than a bit of Go, as it turns out.&lt;/p&gt;
&lt;p&gt;We rearranged the kitchen twice. Not because a drawing convinced us, but because Hailey used it
while the van was half-built. She made drinks, moved things around, worked around the bits that
weren&amp;rsquo;t finished, and those workarounds told us the plan was wrong. The thing looked sensible on
paper, then a real person tried to live with it and the whole spec changed.&lt;/p&gt;
&lt;p&gt;That is annoying. Obviously. It is also the best design feedback you are ever going to get,
because it comes from use instead of imagination.&lt;/p&gt;
&lt;p&gt;So yes, the AI review is going into krites. Not because the roadmap said so, and not because I
woke up one morning desperate to let a cloud model into a local-first photo tool. It is going in
because Hailey found a loop that helps her get better, and my job is not to interrupt that loop
to preserve the neatness of my original idea.&lt;/p&gt;
&lt;p&gt;My job is to build around it.&lt;/p&gt;
&lt;p&gt;The workaround is the spec. Everything else is just me catching up.&lt;/p&gt;</description></item></channel></rss>