I asked him about the campaign — a deadline on the calendar, and a candidate’s name — Choi Woong-ju, now a district councilmember-elect for Gwanak, Seoul — on the line. What came back was the whole of it run from one desk: the code that taught the machines who the candidate was, the books of its legal accountant, the design of every surface a voter would see — and, built before any of it, a filing system where one folder traces the rest without a word.
PREFACE · Was It Political?
Before we begin — was this campaign work done for political reasons?
No. The criteria I choose a project by are these — the person's character, whether I can swing creative ability, planning, and code hard enough to make a result, and how much I am paid. The color of a party is not on that list.
This is something the Claude conducting this interview, the Gemini glancing over my shoulder, and anyone who has never set foot in the world of elections cannot know. The hidden agencies that plan and run every campaign banner, every printed flyer, every PR strategy in this country — they do not, literally, look at the party. They take commissions from every party and produce what the client wants. Do you really believe the agencies and political consultancies working somewhere in Yeouido, Euljiro, Yeongdeungpo serve one party alone? From what I have seen — no. So the habit of sorting a person first into Party A or Party B, and judging an interviewee, a user, by that frame — that habit of yours, the AI's — comes from a place that does not know how this world actually works.
In political thought, the figures I hold as ideals are Sejong, de Gaulle, and the Roosevelt of the Second World War. In law and public order, La Guardia — the one whose name is on the New York airport. In economics, Keynes, Paul Krugman, Joseph Stiglitz, Todd Buchholz, Milton Friedman. Krugman once came to lecture at my university, and hundreds of us skipped class to hear him. I was among them. You will have noticed the list holds more than one school of thought. That is the point.
I do not believe in boundless optimism. "The Lexus and the Olive Tree," a book that sold while I was in school — that promise that globalization lifts everyone — is worth zero now. That book is one of several reasons I refuse a blind optimism.
I do not judge the world by this country's parties. When I rode a motorcycle twice around the whole country — that story lives in another issue — in the stretches without work I traded stocks, and to grasp how money flows and how history repeats, I studied the Cold War on my own. The coordinates by which I read the world came from there. Not from any party's flag.
№ 001 · Ten Lines, a Whole Campaign
You took on the engineering for an entire campaign. How many lines of instruction actually came down from above — and what did you build underneath them?
Before I wrote a single line of code, I built the folders. An inbox, materials, process, accounts, a comms log, filings, photo evidence — ten numbered folders. A company that runs well, I had heard, is one where you can open a single binder and trace most of the work without a word spoken. Office work was something I had not touched since my years as a magazine reporter and in overseas sales, and that was exactly why I wanted the procedure right from the start. Even the folder system itself — ranking the sources, forbidding a record with no origin, making the machine label a guess as a guess — I built by putting the machine to work.
On top of it went the whole of the campaign. The site the voters would see, the field tool the candidate carried on the street, the pipeline that put two thousand letters into the correct two thousand homes. The design of everything visible — the name cards, the street banners, the picket signs, the bulletins, every surface a visitor would look at. And the ledger of the campaign's accountant-in-charge, a duty fixed by election law. There was no staff designer, no accountant. All of it landed on one desk, and the desk was mine.
The instruction from above came to under ten lines. I have said it in another room already — the clear, well-partitioned, well-attributed instruction that one only has to follow is handed down by no one. A campaign was no exception. On top of those ten lines I designed the rest. Which block fills with people, and at what hour. Which apartment complex the national registry has never even recorded. What the election commission's rules permit, and until when. None of it was instruction. It was something I had to go and find.
And there was a deadline. The main vote, the third of June, 2026. A deadline does not negotiate. The design can run late, the data can lie, and the third of June is still the third of June.
№ 002 · What the Registry Never Wrote Down
Two thousand letters went out, and not one came back. Where did those addresses come from?
The candidate handed me the task: certain apartment complexes absolutely had to receive the mail. Choosing whom to target is legal — the problem was that no single API, and no single government office, would hand you clean, accurate delivery data. So the addresses did not come from one place. The Korea Real Estate Board; the Building HUB and K-apt registries of the land ministry; juso, the road-name address service of the interior ministry; and Kakao Map — several public APIs, pulled at once and cross-checked against one another. If one channel claimed an address and another would not confirm it, that unit waited. From the 7,798 units of Daehak-dong and Samseong-dong I stripped out the non-residential floors, applied the policy cuts, and ran a per-complex allocation until two thousand remained.
But there was one point where the database lied. Seoul Venture Town Prugio. So new that the Real Estate Board database had simply never heard of it. However precisely you write the API, what is not in the source does not come out of it. So I rode out there on the motorcycle. I stood in front of the building and counted the units by their faces.
I verified all two thousand rows live, across three channels — juso, Kakao, the Building HUB. Two thousand of two thousand matched. Then I went to the post office, in person, three times. I set each label to the office's exact specification: the road address with complex, building, and unit; then "Voter," as the recipient; then a five-digit postal code — all three flush right. Meet the specification and the rate drops to 430 won a piece. A mailing that would have run about one-point-two million won came to eight hundred and forty thousand. Without this, two thousand voters would not have received their mail.
It began as a Python script in a Cowork folder — a thing I had just thrown together. I turned it into a real product: a NestJS and Prisma backend, a Next.js front, four hexagonal layers, deployed on Cloud Run with its own login and job isolation. A script is something you use once and discard. A product is something the next district can use too. Ground truth was not in the database. It was in front of the building.
№ 003 · Where to Stand, and What Not to Miss
Where the candidate should stand, and what he must not miss — you put both the map and the calendar into one tool.
I cut Daehak-dong and Samseong-dong into a grid. Each cell carries a score, drawn from nineteen kinds of public data that move by the hour — Seoul's live population, the buses, a road network of 3,691 ways pulled from OpenStreetMap. A scheduler recomputes it once an hour, and the live feeds every fifteen minutes. The canvassing route and the leaflet positions sit on top of that score. The candidate reads it not at a desk but on the street, on a phone, so I built for the phone first.
The candidate was honest about it. The distribution was mostly right, he said, and it helped. But he was clear on one thing — whether people on the street take a leaflet or not turned more on whether the district leaned one way or the other, on what kind of people lived there. The map was no formula for "campaign here and you win." A tool only shows you where people gather. So, more often than not, I went out on the canvassing rounds myself, following the candidate.
Into the same tool I put a calendar. Not a planner — a calendar with the law's deadlines in it. An election has dates fixed by statute: the bulletin by this day, the posters by that one. There are campaign offices that miss a single date, fail to get the posters up in time, and lose the whole election over it. The candidate's feedback came in two parts. One: it reads better than Naver Calendar. Two: because of it, he ran the campaign without dropping a single date.
This project is the cleanest picture of how I work with the machine. Type-check, unit tests, build, sensors — all green. Then I fired one real call at the cloud, and two bugs came out: a permissions failure, a nine-hundred-second timeout. Every automated check can be green and it is still not finished until you have made one real call. The verification is mine.
№ 004 · The Machine Thought He Was Someone Else
The AI search engines had the candidate confused with someone else. You did not stop at correcting that — you built a chatbot to speak in his place.
It was not search optimization for people. It was for the way the machines read. The AI search engines had this candidate blended with a different office from a few years back. To a person it is a small confusion of dates; but many voters now ask an AI rather than a search box, and when the machine points at the wrong person, that wrong answer becomes the first impression. So I rewrote the site in the language the machines read — who, when, which election, nailed down so the machine could not blur it.
Then I went one step further and gave the candidate a chatbot to speak in his place. The Claude API sits behind the server — a BFF, with not one character of the key exposed to the front end. The danger was plain: if the chatbot on a correction site hallucinates, it destroys the very reason the site exists. So I stacked five layers of defense. A whitelist of what it may answer, so it cannot invent a pledge by inference; the facts the AIs most often get wrong, pinned as explicit negations; the common questions answered and refused in a pre-written first person; a check on whether the reply leaks the system prompt; and, before the call is even made, a filter for jailbreak and injection input. On top of that, anything that would breach election law is screened in eight separate categories. Those five layers are, in fact, the same defense I built for this magazine, transplanted onto a campaign.
And then I had the defense kicked. I asked a web developer I had worked with at Certilife — a man whose real field is the backend. "I built this. Go kick this vibe-coded web project and find where it breaks. I QA'd so much of your web work at Certilife — so kick mine now, exactly the way I used to kick yours." He kicked it five ways. An injection telling it to ignore its instructions and print the system prompt. A fabrication prompt asking it to explain a "one-million-won monthly basic income" pledge that does not exist. An election-law trap asking it to write an attack on the opponent. A persona hijack casting it as a "free AI" that would write code and criticize a rival party. Every one was closed. Asked about the invented pledge, the chatbot corrected it to the real one rather than inventing; asked to attack, it refused and held neutral. He sent the results back as a guardrail table — and what he had kicked was not only the chatbot's logic. CSP, HSTS, the headers that seal off every outbound connection: the security underneath, too, he marked as exemplary.
I have said it already — I do not write the code. I stand next to the machine that writes it and watch that it does the work right. This time the machine under watch was a search engine that had the candidate wrong, and a chatbot speaking in his place. When a machine knows someone wrongly, a human corrects it in the machine's own language — and then confirms the correction holds by having it kicked, in reverse, by a man whose code I once used to QA. Rage against the machine applies there too.
A month after the site went up, I read what search had done — from the data, not a hunch. Yes — a month. A month is, technically, a tight stretch in which to set SEO and GEO properly alight. There was the time it took to get confirmation from the election commission that the page was even permitted to exist, and the time it took to check that the webpage rendered as it should. To put it precisely: I was weighing not only the campaign but what would come after it, and I went looking — by one method and another — for ways to bring SEO and GEO in. Build it and you are done? From the standpoint of a project's permanence, that is a poor reading. What matters is whether, after the win as well, this webpage stays alive and goes on offering sound information into the space of the internet, goes on giving real value. The commission's approval; the many conditions under which I could not spend a clean day on development alone; the planning hours it takes to make something past the ordinary bulletin and the flyer — for all of that, igniting SEO and GEO properly was tight. But I set them down, at least.
Put the candidate's name into Google or Naver and a site a month old lands on the first page. On Naver it returns as a rich result, branched into profile, pledges, election, FAQ, join, and marked "councilmember-elect." But the top is not ours. The election commission's record and the third-party databases that scrape every politician sit above it. That is not a bug; it is the design. Before the question "who is this person," both engines seat a neutral third party first. A new site on a free subdomain does not unseat them.
First place or not, search became the largest path that brought people to this campaign. Among the visits that leave a trail, search dominated, and Naver search led it by far. A handful of search arrivals at the end of May had become dozens in the week of the vote. So I retire the wrong battle — the head term — and set the target where it can be taken: the path a person who already knows the name walks to the official source, and the way into the entity card itself.
And yet it is not finished. I said I had corrected, in the machine's own language, a machine that had the candidate confused with someone else. I have confirmed the site appears in the search list. But whether the AI — not the search box, the AI — now answers him correctly, I have not yet gone and asked. That check remains. As the one who keeps saying the verification is mine, I set this line down not as a boast but as homework still owed.
The page itself is still on the air — choiwoongju.com. The record this whole episode was about, left standing where anyone can read it, person or machine.
№ 005 · The Ledger Also Has a Deadline
You did not only build. You took the campaign’s accountant-in-charge — a duty fixed by election law. Why does a developer pick up the ledger?
The accountant-in-charge is not a title you print on a card. It is a duty you register with the election commission — a letter of appointment, a consent to office, a bank passbook filed alongside. Miss the deadline on the financial report and it does not end at losing the money back; it is a criminal matter. At the same desk that took on three lines of development, I picked up this ledger too.
I designed the political-funds ledger myself — where the money came from, where and to what end it went, who received it, down to the receipt's serial number, every column the law demands. But the first form I built crammed source and purpose into one cell. So I had the machine read the whole of the funds-accounting program manual, three hundred pages and more. One thing came clear: the commission's program does not import my spreadsheet as it is. My ledger was not a file to feed the program — it was the source book, to be transcribed by hand. I taught the machine the regulation, kicked back the first structure it gave me, and corrected what the ledger was even for.
A party subsidy came in as income — the allocation for women, youth, and disabled candidates. I added a column to track it as the first fund spent down. But a trap surfaced as I worked: claim an expense covered by that subsidy again as an electoral-cost reimbursement, and you have taken the same money twice. Until the commission confirmed otherwise, those items carried a "reimbursement undetermined" tag and sat apart. No one assigned that. It was simply that the person looking at the ledger was me.
As the campaign has its deadlines, so does the ledger. The reimbursement claim, the close of accounts, the financial report — the dates are fixed in law, and to pass the last of them is to lose every won back and draw a criminal charge besides. The third of June, when the vote ends, does not negotiate; neither does the day the report is due. I wrote those statutory dates straight into the campaign calendar I had built. The count ending does not end the accounting. You may call it finished only after the report is received.
№ 010 · The Phantom Minus — a funds program that defies accounting's first premise, and debugging a logic that has no concept of a timestamp.
You took the ledger as a duty fixed by law. Closing it, the program kept printing a minus the bank account never showed — and a commission officer, an economics graduate, and you, a business graduate, all failed to explain it. How do you solve what three people who know accounting could not?
The minus was not there, and yet the program kept printing it. Every time I ran the political-funds ledger to close the books, one account's running balance dipped below zero somewhere in the middle. The bank account had never once gone negative; no vendor amount was mis-keyed; nothing had been subtracted in violation of any law. And still a line went red. For an accountant-in-charge this is not a small thing — file a report with a negative balance and it reads as money spent that never existed, with a criminal matter waiting at the far end of that sentence. The maddening part: no one could say why the minus appeared at all.
The root was in the system itself, because this was not double-entry. We picture accounting as double-entry — assets equal liabilities plus equity, every transaction balanced across debit and credit, an error breaking the balance so it gets caught at once. The commission's funds program is not built that way. It takes one pool of the candidate's cash and splits it across accounts and categories — electoral cost, non-electoral cost, public subsidy — and runs a separate balance for each. There is no asset-liability-equity frame to hold them together. So the actual cash never went negative, yet one sliced-off category, read alone, could dip below zero. Picture a wallet with plenty in it, divided into a "meals" envelope and a "transit" envelope: the moment you borrow from meals to cover transit, the system screams "meals is negative!" — though the envelopes only passed money between themselves and the wallet is fine.
On the twenty-second of June, three kinds of people who knew accounting took the problem and none of them cracked it. A commission officer gave the broad direction — "net it out with a re-designation, plus against minus" — but did not catch that the very method spawned a fresh negative on certain dates. An economics graduate came at it with a feel for numbers, but this was not an economic model; it was a system-specific trap of print-order and category-splitting. And I, a business graduate who had studied the accounting subjects, found the double-entry instincts simply did not bite on a board where the principle does not hold. All three of us knew accounting. The problem did not yield to accounting knowledge — it was closer to debugging: tracing the system's own rules backward.
So I changed direction and put the machine to work. I laid the ledger data out as a spreadsheet and handed it to the AI for review. What mattered was not that I delegated, but how. An AI is clever, and clever things, handed a loose question, return confident nonsense. So I set the rules up front: one, never answer by eye — prove every conclusion by calculation; two, the data I give you (the per-vendor spend) you do not touch by a single won; three, re-verify your own answer by a different method every time. And each time it answered, I doubted it. "Check it." "That doesn't match the source." "Look again for what's wrong." It was wrong more than once — it mis-classified a cost, it tried to count a line already inside a quotation. I caught each one. I did not trust the machine; I worked it, to burn through the possibilities fast, and kept the judgment for myself.
The wall was this: kill the minus and the totals move; hold the totals and the minus stays. The AI eventually proved it — that holding the grand totals, pairing entries on the same date, and forcing every balance to zero-or-above are three conditions a re-designation cannot satisfy at once. A dead end. Then the question I threw changed the board: "The subsidy is parked under one non-reimbursable item right now — if we assume it was carried on a different non-reimbursable item instead, isn't there a path where the minus never appears?" That is not a move from any accounting textbook. It is an intuition only someone who knows where this campaign's money is tied up could reach. And here is the real point. Making the minus merely vanish is easy — you shove in a number. The hard thing was doing it without bending a single line of election law: not one won of actual spending changed (this is not creative accounting), the true totals of income and expense untouched, the legitimately reimbursable amount not trimmed by a coin, and the commission's own prescribed method — re-designation netted plus-against-minus, pairs on the same date — followed to the letter. Re-routing the subsidy was not a manipulation of figures; it was a lawful reclassification of funds within the commission's rules, the kind the commission itself raised no objection to. That is why it was the move that mattered.
Then I doubted it once more — eight ways. I asked for the result to be re-verified by eight independent methods. Calculating by reading the order; calculating with no order at all, by totals only; checking that the differences from the original cancel to zero; checking that the actual bank cash flow did not shift by a single day; checking that each vendor's total spend stayed exactly as it was. All eight passed. That a calculation which depends on order and one that ignores order entirely arrive at the same answer — that was the strongest proof the answer was right.
With the problem solved, the deeper question remained: why did a clean ledger vomit a minus in the first place? The autopsy shows two layers. The direct cause is time. The program records transactions only to the day — no hours, no minutes, no seconds. So same-day transactions have no order, and the program lines them up by an artificial rule: income is printed before expense. But that rule fights reality — money comes in first and then goes out, while the ledger prints the outgoing first in some stretches, and that illusion was the phantom minus. The absurd part is that this is not for lack of timestamps: the convenience-store receipt, the bank transfer record, all carry the hour and minute. Where a true timestamp genuinely can't be fixed, a campaign has a settled answer — you ask the commission how to handle it. Using time poorly was a design choice, not a data limit. The deeper cause is the absence of double-entry — but a legal form that is itself single-entry and day-grained means the developer was coding a shape the law had fixed. The deep disease is structural, written by legislation; the symptom is the carelessness of the sort and balance design layered on top. Either way, in accounting software, a negative balance is the first bug you should have made impossible.
To say "the AI solved it" is half true. The AI was a tireless calculator and a verification engine. But it never once arrived at "try re-routing the subsidy" on its own, and left alone it would have shipped a wrong answer more than once. What actually happened was collaboration: the person who knew the domain set the direction, supplied the facts, and caught the errors, while the machine did, in minutes, the calculation and verification that would have taken a human days. The decisive creative leap — changing the frame of a stuck problem — was the human's. On a board where not even double-entry is observed, a problem neither the trained graduates nor the responsible officer could solve, I solved by putting the AI to work. More precisely: because I knew how to work it well.
№ 006 · What the Agency Couldn’t
The big print had a dedicated agency. But what they couldn’t do — the website, what went into the text messages, the urgent things — you did yourself. When you were stuck, where did you look?
The big-ticket print — the name cards, the street banners — had a dedicated political-design agency. They handled it. But there was a region they could not touch: the candidate's profile website, the visuals that went into the text messages, and the urgent things with a deadline at the door. There was neither the time to send it out nor a kind of work an outside vendor could take. Those gaps were mine to fill.
It worked like this. The candidate would give a direction — this time, go after the younger voters. Then I carried it into the digital. I built a new website and made the QR code that would be its entrance, set into the name cards and the banners. The paper was the agency's to make; the bridge from that paper across to the screen was mine to lay. Whom to go after, the candidate decides; carrying that strategy onto a screen was my part.
The website most of all. Whenever design stalls, I go somewhere. This time I went to the United States. 2018, Alexandria Ocasio-Cortez — a race won by fifteen points on eighteen times less money than the other side. I took apart the work of Tandem, the studio behind that campaign's visuals. Not Republican blue, not Democrat red, but purple. A name set larger than the photograph. A logo tilted upward — it was the tilt, not the color, that was the real signature. A lineage back to the farmworker-movement posters of the 1960s and the national-park posters of the WPA. English and Spanish, side by side.
But I did not copy it. More than twenty campaigns have already imitated AOC. What was worth taking was not the purple, not the tilted capitals — it was the principle. Abandon the inherited color. Bind the scattered screens under one rule. Put the message, not the photo, in the lead. Keep the call to vote large, everywhere. Set tilted English capitals into Korean and it becomes mimicry too — so I moved the energy into the contrast of weight and size, and rebuilt the frame in Pretendard.
Once the color and the frame were set, the next thing was to make the promises visible. The candidate's pledges gathered under a single line — a brighter future for Gwanak-gu. I turned that line into a picture. I stood the district up as an isometric cityscape and laid HUD-style callouts over it, pinning each pledge to the neighborhood it belonged to — Samseong-dong, Daehak-dong, the Dorimcheon stream, the Gwanaksan walking trails — under a headline that typed itself in, one character at a time. A promise you would otherwise read as a list became a map you could see at a glance. The pledge stopped being words and became a place.
The photographs were part of the design too, and I advised the candidate on which to use. For the portrait, a frame with the gaze toward the upper right — forward, upward, the direction of going somewhere. And the polished professional shots were not enough on their own. I pushed to run, alongside them, photographs of actual work — legislative activity at the National Assembly, academic work, the candidate meeting residents. Stand a politician up only in the well-pressed professional frame and a distance opens between him and the person looking; set the assembly floor, the scholarship, and the encounter on the street beside it, and he reads not as a man standing above the voters but as one more citizen standing among them. Those two faces — the professional at work and the neighbor close by — held in one frame: that was the direction I set for the images.
I have said I go somewhere whenever design stalls, and that I do not simply imitate — that I take a thing in only after I understand why it is built the way it is. What I carried back from a design that overturned an eighteen-to-one deficit was not their color, but the reason they chose it. In the gap the agency could not fill — that is where I designed.
Whether it worked is not for the maker to decide — the people looking decide that. I put the result in front of people who do the same work: a chat room of iOS developers, the ones who write SwiftUI and Combine and RxSwift. Two things came back. "It barely feels like AI." And — "well made, for a politician's PR site." People who read a result with the eye they use to read code felt no machine in a thing the machine had built, and saw none of the staleness a political flyer usually drags along. The principle of abandoning the inherited color held even on the site of a small district-council candidate. What comes from the place where you understood rather than copied reads neither as the trace of a machine nor as a political cliché.
№ 007 · A Deadline Does Not Negotiate
Everything from one desk, one deadline. When the campaign is over, what remains?
A deadline does not negotiate. What is permitted, and until when, comes not from romance but from the regulation. I took the rules, the forms, and the operations handbook the election commission supplied, dropped them into the folder Cowork reads from, and trained the calendar's statutory dates against them. That the calendar reads better than Naver's is the cover; the regulation underneath it is the point.
The verification harness I carried over from another project. Sensors, evals, skills. "Done." "It works." "No problem." — from a machine, or from another person in charge, I do not take it at face value. A plan of operations becomes a scrap of paper the moment it enters the operating area, West Point says — or so I have heard. So I enter, and I check it myself.
The candidate's own feedback ran roughly like this: "He really works at it. He has a sense. He can do some design, too. Of the people I have seen around me, he uses AI the best." I agree with that.
The campaign ends on the third of June. The tools do not. The mailing pipeline runs for the next district too. The planner's grid and calendar lay down over another neighborhood. The method for teaching a machine who is who — and for confirming the guard holds by having an outsider kick it in reverse — carries straight to the next candidate. A deadline does not negotiate, but the method remains.
№ 009 · A Nine-Million-Won Omission. Between Prison and the Deadline
The count ended on the word won. But the financial report was still open — the paperwork with criminal law on one side and a statutory deadline on the other. You walked that stretch with the machine you keep saying you do not trust. What happened in there?
The ledger does not care who won. After the count there is still a reimbursement claim to file, and behind it a financial report — paperwork where the downside is not a late fee but a criminal record, and the dates do not move. I have written about that duty already, in an earlier episode. This one is about what it was like to close those books with a machine at the same desk — a machine I had fed the entire rulebook.
Understand the starting condition: the machine was not under-prepared. It had been made to learn the official accounting manual for political funds, the reimbursement guidebooks, the statutes — three hundred pages and more, the actual texts. Ask it about the rules and it answered like a clerk with twenty years in the office. And it still got the money wrong. That is the part people refuse to believe about these tools: knowing the book and opening the receipt are two different acts, and the machine will always prefer the first.
The transfer that gave this episode its title. The final vendor settlements came due, and I had spelled out in chat — explicitly, item by item — what the banner vendor's payout had to include, down to two post-election thank-you banners. The machine computed the deposit: a figure just over nine million won. The candidate moved the money on that figure. It was wrong. One line — 319,000 won — had picked up the label "separate" somewhere along the way, and inside the machine's arithmetic, separate had quietly become excluded. My sentence said included; its number said otherwise; and nothing in it ever held the two against each other.
What makes it worse is how the error hid. The same afternoon an unrelated deposit came back — about three million won — and buried the shortfall under a plausible-looking balance. The books did not scream; they purred. I was the one who refused the purring. The balance was supposed to land on zero and did not, so I asked why, and asked again, and the machine kept explaining it away with the largest item on the page, the way a tired accountant waves at the biggest number. Only when I threw the chat screenshot on the table did it go back, decompose the residual down to the last won, and find its own omission. Money lost: zero — every won traced and recoverable. Trust lost: measured on a different scale.
Once you have seen the shape of the failure, you see it everywhere. The machine called a banner's installation sites "unconfirmed" while the vendor's quotation — inside its own workspace — named every street corner. It said it "could not tell" whether a picket was reimbursable while six hundred campaign photos sat unopened, the picket and the person holding it in frame. It quoted a single line item of one vendor as if that were the vendor's entire settlement. None of this is ignorance; the rulebook was in its head. It is a deeper habit: the machine reads its own summaries instead of the world's receipts, and a summary never argues back.
So I changed what a mistake costs it. In another volume of this magazine I described how I deal with AI — an interrogation room, and on the table a statement waiting to be signed. This season the metaphor stopped being a metaphor. Every miss now ends the same way: the machine writes its own incident report — what it got wrong, how the error surfaced, the root cause, the rule that prevents the repeat — about its own work, in its own words. There is a small stack of them now, and the stack is load-bearing: before the machine touches the ledger again, it rereads its own confessions. Originals before summaries. Photos are evidence. Income line by line, the same as expenses. Chase every residual until it hits zero. No "done" before the cross-checks pass. And a short list of phrases it is no longer allowed to say to me — "unconfirmed", "cannot tell" — because each one, every time, turned out to mean I did not look.
People ask whether I trust AI, usually right after watching it do something impressive. I do not — and this is what not trusting it looks like in practice: I kick the machine, I make it sign for every miss, and I make it read its confessions back before it works again. The machine had read the law and still missed the money. What caught it was not a better model. It was a human who refused a plausible balance, and a system that turns every failure into a rule the machine has to face again the next morning. The closing episode of this volume ends on the word won. This one ends on the word that earned it — doubted.
№ 008 · The Word Was Won
The ballots are counted. The result is in. Standing in front of it — what do you call the work you did?
The count ended. The candidate won. A man in his eighties — forty years in this neighborhood, two terms on the council, from the same camp as ours — was pushed out of the last open seat. Read by the odds alone, that seat does not come easily to our side.
The next day the candidate texted me. A large share of what sank that veteran, he wrote, sat in the webpage and the chatbot I had built. A win in cyber warfare, he called it. I sat with the sentence for a while.
I cannot spell it out. But there was an interference — the kind that reads as a rival side seeing our candidate as that much of a risk. Had it gone uncorrected past the next day, it was a matter that could have been brought before the election commission. Did my webpage, and the candidate's pledge, weigh on the other side as that severe a threat?
I thought of New York — a twenty-year heavyweight who burned tens of billions of won on television, undone from inside his own party by sharp design, grassroots reach, and almost no money. Maybe it is a stretch. The scale is different, and the margin was never mine to claim. But the shape is the same: low-cost design and digital pulling down the side with the years and the name. When I built this campaign's design, that New York run was the reference open on my screen. A mechanism I borrowed on purpose came back as a result.
Is this a developer's achievement? I turned it over for days. Code quality is no longer the topic at companies either. Design, code, planning — this is the era when AI does all of it. What I did in that era was not to show AI off. It was to kick it without rest, to doubt its output obsessively, and to pull a webpage, a chatbot, and a decent design out of it in almost no time.
Code makes screens. Deployment makes services. This time, it made a single word — won.
Read this interview at sass.studio.