Keeping My Hands on a Done Thing
The feature I almost added to a finished app
A few days ago I opened a document I keep for SetCue and started sketching a feature it does not need. Something small and non-essential, the kind of addition no one had asked for. I wrote half a paragraph about it before I noticed what I was doing.
SetCue is done. It has been done for a while. It does the one thing I built it to do, it does it cleanly, and the people who use it are not waiting on anything. There is no bug in front of me. There is no rough edge I have been meaning to file down. The honest state of the project is that there is nothing left to do, and I knew that, and I opened the document anyway.
I do this with MapleDays too. Every so often I find myself in a notes file, brainstorming some addition the app has no need for, telling myself I am still building. It is a habit by now, not a slip.
And here is the part I keep snagging on. The work is genuinely done, I know it is done, and I keep opening the file anyway. I would rather not hold SetCue still long enough to ask what I am really reaching for when I do.
I call a thing done when it can run without me
Everywhere else, I know exactly what done means. Last week I wrote about building an agent team I will never have to open, a box meant to run a loop without me standing over it. The whole point of that work is the day I can walk away and the thing keeps going. That is the mark I build toward, every time: a system is mature when it no longer needs me in the room.
There are two senses of done sitting on top of each other here, and for me they collapse into one. There is the deployed sense, a system that runs unattended, no hand on the wheel. And there is the maker’s sense, the moment I choose to step back and stop touching it. For most of what I build, those are the same act. A thing is finished when it can run without me, and finishing it is me agreeing to let it.
Which is the strange thing to hold next to the document I keep opening.
In the moment, it feels like craft
When I am in it, the work feels like craft, and that is the part I do not want to skip past. Opening the document does not feel like avoidance from the inside. It feels like care. I tell myself that a good maker keeps refining, that the gap between fine and right is a hundred small passes, that the people whose work I admire are the ones who could never quite leave a thing alone. Adding to SetCue feels like staying honest to it. In the moment, I believe that completely.
The trouble is what I find when I go back and look. The small things I added after the real work was done did not make the apps better. I cannot point to one that did. The passes I told myself were refinement landed on a thing that was already right, and changed nothing in it. So the craft story does not survive contact with the result. I can hold it only while I am inside the moment, never after. And once I have seen that the refining refined nothing, I am left with the harder question of what the reaching was actually for.
There is nothing left to do, and they are still mine
The feature I sketched for SetCue was never about SetCue. I know that now. The app did not ask for it. No user did. The idea arrived from somewhere in me, and what it was really doing was giving me a reason to be in the project again.
The brainstorming, then, is a way to keep my hands on the thing because the thing is mine. While there is something to add, there is a reason to open the file. While there is a reason to open the file, the daily back-and-forth between me and the thing keeps going, the small exchange where I think about it and it waits for me to decide. That exchange is the part I do not want to end. The hand on it is the relationship.
SetCue and MapleDays are mine in a way that has nothing to do with whether they are working. I made them. For a long stretch the two of us were in constant exchange, and I liked being on the other end of it. Stepping back does not take them away from me. But it ends the part where I get to keep returning as though they still wanted something. So I manufacture the want. I find the next thing to add, not because the app is incomplete, but because I am not ready to stop. Stopping feels wrong. It feels like I should be looking for the next thing to fix, and when there is no next thing, I make one.
The freedom I build for systems I cannot give my work
Now set the two beside each other, because they do not survive the comparison.
For Valor and for the agent team I have been building, the one I call Fabrica, I work as hard as I can at exactly one goal: make them not need me. I engineer the autonomy on purpose. I close every seam so the system can stand without my hand on it, and I count each removal of myself as progress. The day Fabrica does not need me to step in is the day it is done, and I am proud of that. I think it is the right way to build.
Then I turn to SetCue, which has already reached that state on its own, and I do the exact reverse. I look for a way back in. I reopen what was closed. In one place I spend real effort engineering myself out, and in the other I spend the same effort putting myself back onto a thing that was already free of me.
The product never pays for this. The clinging does not break SetCue, the half-finished feature would not have shipped, and the app would have gone on being fine. The only one who pays is me. So for a while I filed it under harmless, a private habit with no victim, and left it there.
That is the part I had wrong. Held against each other long enough, the two habits stop looking like opposites and start looking like one thing. Both of them keep me tied to something unfinished. What I cannot do, it turns out, is be in relationship with a thing that is done. I can only stay close to what still has an open loop, what still, in some small way, needs me. The attachment was never to SetCue. It was to the state of not yet being finished with it.
And that is where it stops being harmless, because it does not stop at SetCue. The building I am proud of runs on the same hunger. Engineering Valor and Fabrica to not need me is how I keep a live thing in front of me that, for now, still does. The day one of them is truly done, I do not sit in the quiet of having finished. I start the next one. I have never once run out of open loops, and I am the reason for that. The maturity I am proud of and the clinging I am ashamed of are the same move in different clothes.
It is the fear I wrote about in learning to stay, turned all the way around. There I could not stay with an unfinished thing, because an unfinished thing has not failed yet. Here it is the finished thing I cannot stay with, because a finished thing leaves me no place inside it. Either way I end up beside something that still needs me. I have just learned to call one of them ambition.
Letting it be done without forcing it
I should say what letting go is not, because I know my reflex to overcorrect. It is not archiving SetCue and swearing never to touch it again. If a real idea comes, the kind that arrives because the thing wants it and not because I want a reason, I can go back and build it. That has always been allowed.
What it asks is smaller and harder than that, and after the last section I cannot pretend the small version is the whole of it. The small version is this. Let finished mean finished, and stop generating reasons to touch a thing that has none left. No opening the document to invent the next non-essential feature so the project can stay un-done a little longer. The compulsion is the thing to put down. The project can stay exactly where it is.
So here is the piece I can actually do. The next time I open that brainstorm document for SetCue, I close it. Not after writing half a paragraph. Before. I notice the reach for a reason, and I let the reason go unwritten.
It is a small act against a large habit, and I know that. Closing one document does not teach me to sit in the quiet of a finished thing, or to stop lining up the next open loop the moment this one goes still. That is the longer work, and I do not know yet whether I am built for it. But I can practice on SetCue, which asks nothing of me, and let the asking-nothing be the point instead of the problem.
What it costs is real, and I will not pretend otherwise. I lose the daily hand on it. I lose the small comfort of always having something I could be doing to a thing that is mine, the open loop that told me it still needed me. Closing the document is agreeing that it does not.
The apps were done before I was.