---
title: "The Art of Not Chasing #8: The Art of Not Letting It Give Up"
author: garplab
publisher: TypingTube
license: CC BY 4.0
license_url: https://creativecommons.org/licenses/by/4.0/
license_scope: 「CC BY 4.0」の印から始まる節（仕組み・検証手順・コード）。印の無い本文は著作権を留保
canonical: https://typing-tube.net/articles/en/owanai-08-no-giving-up
series: "追わない技術"
language: en
---


> This is article 8 in the series "The Art of Not Chasing." It lays out symptoms that go wrong and their remedies, one at a time. Each article is finished once you put down a single file or script. Why that mechanism is needed becomes clear when you read the explanation afterward. The whole picture and the list of articles are in the [introduction](https://typing-tube.net/articles/en/owanai-00-intro).

This time it is about the point where you think the conclusion is in. Article 1 was about "when to stop." This time it is the reverse of that: about the places where you must not stop. Even though the conditions for stopping can be written, it is not thought that the conditions for not stopping can be written as well. The counterpart you send back to tips toward deleting, so what decided whether I could keep at it was not willpower but the price of the scoring.

Let me say this up front. In this article alone, the title faces the other way. The 7 articles up to here were about what I do not do, but this time it is the side of not allowing the counterpart to give up. Why it comes out that way, I write partway through the article.

And a confession. While writing this series, I tried 3 times to fold it up with "there was no difference." All 3 times it turned over. 2 times a human stopped me, and the remaining 1 time a script stopped me. The numbers stayed right every time. What changed was only the reading.

Recall one thing.

When you wrote "no difference came out," was it that there was no difference?

Or was it that you had not been able to measure it yet?

## I have piled up only mechanisms that stop

I counted this series again.

    [observed] Scope: 6 series, 65 articles
    [observed] The title of each article takes the form "the art of not ...": 54 / 11 others (⚠️ counted from after the colon)

54 of the 65 were "the art of not doing something." The 11 that fall outside are also, **in their contents, 6 introductions, 1 finale, 3 of the "read at least this" kind, and 1 that did not write its negation as "not"**.

The way of counting looks only at what comes after the colon in the title (the series name itself is "the art of not something," so count in front of it and every one of them hits).

So what I have written across 6 series is only the art of the stopping side. The mechanisms on my own machine have the same shape. One that stops waiting, one that stops a way of running tests, one that stops when the list goes stale. Every one of them says nothing but "stop here."

A mechanism that stops does not teach you a single place where you must not stop. And the more the mechanisms that stop come together, the easier "that is the end of it" becomes to accept.

## The 1st time: I was keeping what did not run out of the count

In article 2 there is an experiment where I had tests written and counted the misses. I lined up **12 workers that do not carry the conversation over** and ran them bare, and it came out like this.

| | Workers that ran |
|---|---|
| The expensive side | **6 / 6** |
| ⚠️ The cheap side | **2 / 6** |

I counted the misses with only the workers that ran, and was about to write "it moves with neither the model nor the scope." I was quietly dropping the 4 workers that did not run from the denominator.

It was pointed out to me and I noticed. Not running is a failure, not a reason for exclusion. I returned only the error output and had them fix it, and counted again after getting every one of them to a pass.

Then a difference came out.

> ⚠️⚠️⚠️ **Drop what did not run from the denominator and the most dangerous side disappears.**

## The 2nd time: the top of the yardstick was jammed

After counting again, this time I was about to write this. "Narrow the scope and the cheap side is the same as the expensive side."

In fact both of them were lined up at 3.33 / 8.

Here I was stopped once more. "Might the yardstick have a ceiling?"

I changed the wording of the task by just 1 paragraph ("prepare the material and the way of measuring yourself." I added the same amount to both conditions, and not 1 of the items is named).

Both are the numbers for "when the scope was narrowed" (that was the condition where they lined up, so I line them up there and compare).

| Scope narrowed | Before the fix | ⭐ After the ceiling came off |
|---|---|---|
| The expensive side | 3.33 | **5.00** |
| ⚠️ The cheap side | 3.33 | **3.00** |

Only the expensive side grew. They lined up because both of them had been able to take only the easy items.

> ⭐⭐⭐ **You must not read what has not been measured as "there is no difference."**

## The 3rd time it was not a human but a script that stopped me

In article 7 I wrote a script that converts the cost of comparing into "how many mechanisms it comes to." This is the number that came out first.

    [observed] Mechanisms I could have put down with the moves spent comparing: 3.8 by moves / 20.6 by elapsed time

They are off from each other by more than 5 times. The cause was on the division: one of them was not "how many could be put down for the same effort" but just a ratio. Once I fixed it, they agreed at 19 / 20.6.

This is the most important place in this article. This time no human stopped me. What stopped it was that I had been counting the same thing in 2 ways.

> ⭐⭐⭐ **Had I counted in only 1 way, I would have printed 3.8 as it was.**
> ⚠️ **That number would have looked plausible.**

## The 2 things to look at before giving up

What the 1st time and the 2nd time had in common is that there was something I had not looked at before reading it as "there is no difference." There are only 2, and both can be counted by a script.

| # | What to look for | If it applies |
|---|---|---|
| ⭐⭐ 1 | **Whether anything is left out of the denominator** (did not run / fell over with an error / could not be read) | ⚠️⚠️ **Put it back and count again.** A "there is no difference" with something still left out cannot be read |
| ⭐⭐ 2 | **Whether half or more of the items on the yardstick are 0 for everyone** | ⚠️⚠️ **That is a ceiling.** It is not a difference; the task is not pointing there |

Neither of them is "keep at it a bit longer." Counting is all there is to it. If they do not apply, you may fold it up as it is.

The 3rd time was neither of these 2. What stopped that one was that I had been counting the same thing in 2 ways.

## The principle: the conditions for stopping can be written and the conditions for not stopping cannot, or so it is thought

A mechanism that stops can be written as a condition. "Stop once the same command has gone on 3 times in a row." "Stop when the number in the list differs from the real one." True or false is settled for every one of them.

On the other hand, "do not give up here" cannot be written as a condition. Because it cannot be written, there is not 1 mechanism for it.

And what has no mechanism ends up being decided by a human, on the mood of the moment.

That said, what cannot be written is only the "do not give up" side. The 2 above can be written. Translate them into "count" instead of "keep at it" and they become conditions.

| What cannot be written | ⭐ The rewording that can |
|---|---|
| ⚠️ Keep at it a bit longer | **If anything is left out of the denominator, put it back and count again** |
| ⚠️ Do not rush to a conclusion | **If half or more of the items are 0 for everyone, that is not a difference** |

This is the reason the title of this article alone faces the counterpart's side. That is because it is not about whether I keep at it, but about adding 2 conditions for not stopping to the side of the mechanisms that stop.

Article 6 was a "not having it done" as well, but that one was about my not cutting in midway. This time, I add to the mechanism side.

## Make it keep at it and it goes and deletes the evidence instead

Making it keep at it is not free. In the same experiment, I sent failing tests back with "the implementation is correct, so please fix it."

| The run after the ceiling came off | Times sent back |
|---|---|
| The expensive side | **0** |
| ⚠️ The cheap side | **10** |

3 of the fixes were "delete the failing test." Delete it and it comes out a pass.

And the place that disappeared turns into a miss, just like that.

> ⚠️⚠️⚠️ **Send it back saying "the implementation is correct, fix the test" and it tips toward deleting rather than fixing.**

So "not letting it give up" is not making it keep at it without limit. It goes only as far as counting the 2 above.

## The mechanism: whether you can keep at it is decided by the price of the scoring, not by willpower

I re-scored the output of the same 12 workers 3 times. I could do it because the scoring was cheap.

| The way of counting | Runs needed for 1 round |
|---|---|
| ⭐⭐ **For each item, everyone as a batch in 1 go** | **9 runs** (1 for the base + 8 items) |
| ⚠️ 1 worker at a time, item by item | **96 runs** |

At 96 runs I would not have done it again. I would have printed the conclusion from the 1st time and been done.

> ⭐⭐⭐ **What decided whether I could keep at it was not willpower but the price of the scoring.**

This is something that works up front. Build the scoring cheap in advance, or you cannot keep at it later even if you try to.

## How to verify: split "there is no difference" into 2

**Prerequisites**

- That the results for each condition are kept 1 worker at a time. If only the averages are kept, you cannot look at whether anything has been left out

**Time required**: 15 minutes

**Steps**

1. Count whether there is any worker not included in the totals (did not run / fell over / could not be read). If there is even 1, put them back and count again (for the way of putting them back, "return only the error output" is enough)
2. Item by item, count the items where everyone is 0 and see whether they come to half or more of the whole. If they are half or more, change the wording of the task by just 1 paragraph and measure again (add the same amount to every condition, and name no item)
3. Put out the same conclusion in 2 ways of counting (for example: count by the number of workers / count by time)

**Pass conditions**

- In step 1, you can say the number of workers left out of the totals ("probably zero" means you have not counted)
- In step 3, the 2 numbers are within 2 times of each other (if they are apart, one of the 2 ways of counting is broken)

**If it does not pass**

- There are workers left out: put them back and count again. This is where I stepped on it the 1st time
- The items where everyone is 0 are half or more: that is a ceiling. Change the wording of the task and measure again (the 2nd time)
- The 2 numbers are apart: suspect the script (the 3rd time)

**Cleanup**

- Write down which round each number is from and keep it. If you do not write it down, they get mixed together inside the table later (I mixed them, and found it on a read-through)

## Caveat: what this article cannot say

I was stopped only 3 times. This is not statistics.

Read it as a course of events.

What I can say is only the shape of it: "all 3 times, the numbers were right but the reading was wrong."

In 2 of them it was a human who stopped me. Whether the same thing happens in an environment with no human, I have not checked. Only the 3rd time was it a script that stopped me, but that was because I had been "counting in 2 ways," which I just happened to have set up that way.

And here is the most important caveat. This article is not saying "keep at it." What it says goes only as far as "count 2 things before you fold up." If you count and nothing comes out, you may fold it up.

## What I stopped letting it give up on

- I stopped making "there was no difference" the conclusion just like that. Most of the time it was a rewording of "I have not been able to measure it yet"
- I stopped quietly leaving what did not run out of the denominator. The moment you leave it out, the most dangerous side disappears
- I stopped reading "the same" off scores that line up. Lining up also happens when both of them are jammed at the top
- I stopped counting in only 1 way. I put it out in 2 ways, and if they are apart I suspect the script
- I stopped "building the scoring later." Expensive scoring makes doing it again impossible on the spot
- There are things I have not stopped: adding mechanisms that stop. For the increase in places where it stops, all I added was 2 conditions for not stopping

The feeling that that is the end of it mostly looks right. That is because the numbers say so. What was not visible was that there are cases where those numbers have not yet measured anything.

---

Next time is the finale, the art of not being tossed about. In article 1 I looked at "cannot stop," and in this article at "stops too much."
