All articles

Nobody owns your app

Someone asks why your signup behaves the way it does — why the welcome email goes out twice, or why a user gets in before confirming the address — and you cannot answer. Not because you are not technical. Because the answer was never written down anywhere. It lived inside a chat with an agent three weeks ago, and that chat is closed.

This is the quiet cost of building this way, and it is different from a bug. The code records what happens. It does not record why anyone decided it should happen that way: why auth sits on this provider, why prices live in this table and not that one, why there is a second copy of the user profile. The agent knew, for about an hour. Then the session ended and the reasoning went with it.

It compounds, because every new session starts blind and re-derives that reasoning from whatever it can read. Sometimes it derives something different, and you end up with two ways of doing the same thing side by side: two date formats, two places that send mail, two shapes for the same record. Neither is wrong on its own. Nothing breaks today.

The part that actually costs money shows up later, as avoidance. There is a screen you do not touch. A payment path you route new features around. A table you would rather add a column to than fix. You are still shipping, but only in the areas you still understand, and the frozen area keeps growing while the rest of the product moves.

Getting ownership back does not start with reading the code. It starts with writing one page by hand that the code cannot tell you. Walk your app the way a user does, screen by screen, and for each screen write where its data comes from, what it writes, and which outside service it touches. Then write down the decisions you remember making, and the reason, even when the reason is that the agent suggested it and it worked.

Then write the parts you already know are fragile — the ones you have been avoiding. That list is the most valuable thing on the page, because it is the only honest map of your product anyone has. It is also the part people skip, since writing it means admitting how much of your own app you are quietly steering around.

Then put the page where it gets read instead of in a document nobody opens. In the repository, in the file your tool loads at the start of a session, so the next session begins with your map rather than a guess. If you work across several tools and chats, a shared memory layer such as Memocore holds one copy that all of them read, so you are not maintaining the same page in four places. Either way the point is the same: the context stops dying with the chat.

You will know it worked when you can answer a question without opening the editor. Ask yourself what breaks if you change the signup flow, and you should be able to name the two or three things it touches. Not from memory of the code, which nobody has. From the map.

Writing the first version takes an evening for a small app, a day or two for one that grew through a few months of sessions. The slow part is not the writing. It is walking through the parts you have been avoiding, which is exactly why they belong on the page.

Read next