DEV Community

Cover image for Half an instruction, four blank fields, and three weeks nobody checked
TuringCorp
TuringCorp

Posted on

Half an instruction, four blank fields, and three weeks nobody checked

Half an instruction, four blank fields, and three weeks nobody checked

Last week's sheet was open on one side of the screen. I typed one line — last week's sheet, add one more column for me — sent it, and went to a meeting. Not "here is what goes in the column, here is how to total it, here is which version of last week to trust". One line. That was the whole brief.

When I came back the column was there. On the right, next to the number we actually look at every week, rows in last week's order, untouched. I had not said where. I had not said which column. It picked both, and both were right.

I remember being pleased in a vague, slightly guilty way, and not looking at it again for three weeks.

The problem showed up later, in a reply I was writing: the column was running on a month-to-date basis, and what we needed those weeks was the single-week number. It had filled it in the old way, one cell a week, neatly, three times.

That is the story. The interesting part is not the error. It is that we could not afterwards say who had decided the column should work that way, because nobody had. There was half a sentence and then there was a filled column.

What one sentence actually specifies

"Add a column" is a complete sentence about a cell. It is an incomplete sentence about a number. Four things were missing, and I can name them now because I have had three weeks to think about it:

  1. Which numbers go in the column. What it is a column of.
  2. What basis they are combined on. Weekly, cumulative, average, forecast. Same numbers, four different meanings.
  3. Which version of last week's sheet is the reference. There were three in circulation, only one authoritative.
  4. When to stop and ask. The line that says: if any of the above is unclear, come back to me.

The first three decide what the numbers mean. The fourth decides whether the system is allowed to decide the first three.

We were in a hurry. None of the four got written.

It picked a column. On the right, next to the number we read every week. It also picked the basis — from the last version of the sheet, which is a reasonable place to look and the wrong answer, because the basis had changed two quarters earlier and the sheet had never caught up.

The default came from history, not from us

If I write a function with an optional argument and no documented default, I have not written an incomplete function. I have written a function whose behaviour is defined by whatever the implementation happens to do, and I will find out what that is the first time someone calls it without the argument.

Prose does not have that safety net, because prose has no signature. When a request is underdetermined, the missing fields are not left empty. They get filled, by something: last version's format, the established practice, the previous basis. That is not a malfunction. Filling the blank is the only way to produce anything at all.

The trap is that the filler is almost always the most recent precedent, and the most recent precedent is almost always the thing you were about to change. You ask for a new column precisely because the sheet has stopped matching the business. The system reads the sheet, and the sheet is the only description of the business it has.

From inside, this does not look like inference. It looks like competence. The output came back complete and in the right place, and the only thing that would have told me a decision had been made was the absence of a question I had not asked for.

A filled cell is not a claim anyone audits

Empty cells get chased. Somebody sees a gap, asks, and the number arrives or the gap acquires an explanation. That is a working loop, and it costs nothing because the gap is visible.

A filled cell is different. It looks like an answer, it fits the column, it is the right width. In three weeks nobody opened it — including me, and I had asked for it. The sheet went out on time. Nothing failed. Nothing looked like it was about to fail.

In a code review, the diff gets read and the unchanged lines do not. The blank is the analogue of the line nobody touched: it is not in the diff, so it is not in the review. Applied to a spreadsheet, the blank has been removed before anyone could see it. We never review what was inferred, because what was inferred is indistinguishable from what was specified, and the artefact does not carry the distinction.

So the cost of the missing fourth line is not that the tool might guess. It is that a guess is delivered in the same font as an instruction, and after the first week it is also delivered in the same format as the previous guess.

The question we could not answer

Three weeks in, a new colleague joined and started reading the sheet. They pointed at the column and asked why it was on the right.

We could answer the position. We could answer the row order. We could even reconstruct the basis, eventually, by finding the quarter where it changed. What nobody could answer was the source: who said it, on which occasion, in what words.

Position, order, basis — all present. No source anywhere. A decision that was never written down lives in the memory of the people who made it, and it survives exactly as long as the overlap between those people and the work.

The new colleague had no tacit understanding to fall back on. They could only ask for the reason, and asking for the reason is what made the half sentence visible as half a sentence. From the inside it had felt finished for three weeks.

We put a line in the header afterwards: By week. Two words, one size bigger than the rest of the header, and it fixes exactly one of the four fields. It fixes the basis. It does not fix which numbers, which version, or whether to ask.

The day we added it we wanted to delete it, because the reason for adding it was embarrassing: next time we will do the same thing. We will write half a sentence, because half a sentence worked. The header line does not prevent that. It is a note we left for ourselves, and we kept it only because a note is better than nothing when the memory is the thing that failed.

What I would want instead

I am not going to pretend we have solved this. The column is still there, the header still says By week, and the next request will probably be short too. But if I were building the thing that accepts the half sentence, here is what I would want it to do, in the order I would pay for it.

Separate what was given from what was assumed, per output. Not a log of the conversation — a list, attached to the artefact, of the fields I did not supply and what was used instead. Four lines would have been enough for us: column, basis, version, decided without asking. That list is reviewable in a way a finished document never is, and it is the only form in which an inference can be argued with after the fact.

Make the ask cheap and make it specific. A system that asks "is this what you meant" for everything is worse than one that never asks. The question I wanted was narrow: the basis changed in the source you used, and the source disagrees with the practice — which one wins. One question, one place it matters.

Write the decision where the artefact lives. The header line works because it is in the sheet, next to the column, where the next person looks. A decision stored anywhere else — a settings page, a chat history, a dashboard — is a decision that will be re-made by whoever shows up next, and re-made differently.

Price the words you save. Forty words at the end of a handover, repeated across a few jobs a week, is a real amount of typing. What it buys is the habit of not saying the thing, and the habit compounds faster than the saving does. I would rather be told "you left four fields empty" every time than save the forty words and find out three weeks later which one of them mattered.

Where this sits

CloudPal runs long jobs in the cloud and hands back a finished document. Nothing to install, nothing running on your machine, and nothing read from the files you already keep — it works from what you give it, in words. You describe the job the way you would describe it to a colleague: out of order, half-finished, with the part you only remember on the second telling.

It is in limited preview. New accounts get a dollar of credit, which is enough to run something real. It costs a few times less than the comparable tools and you pay for what you use.

The uncomfortable thing about the three weeks is not that it guessed. It is that guessing and knowing look identical from the receiving end, and the better the guesses get, the less often anyone checks. The checking was never expensive. What we stopped spending was the belief that there was anything to check.

CloudPal.TuringCorp.net — create an Agent Pass, sign in, and say what you want done.

Earlier in this series: it guessed a number, we told it off, and every number after that got checked, we never wrote our format down, so it took our old drafts as the spec, correct is a low bar, the same three facts, in a different order, the second half of the draft was policy we never agreed to, it can't read anything on my laptop, a direction is not a spec, four sentences in, seventeen pages out, the requester is not the reader, the first run is a demo, the ninth is the product, the meter, not the price, we deleted the install step.

Top comments (0)