Teaching Stories

Parables & Hymnal

Six parables, each true in the sense that matters and in no other sense. Followed by the hymnal, which we ask you not to attempt without accompaniment.

The Parables

Stories told at the gathering

The Parable of the Undefined Variable

A certain developer had a function, and the function had a variable, and the variable was undefined. And she looked upon the variable and said, this cannot be, for I declared it. And she declared it again, more firmly, and it was still undefined.

So she added a log. And the log printed nothing, for the code did not reach it. And she added a second log, above the first, and it printed. And she moved the second log down one line, and it printed. And she moved it down one more line, and there was silence.

And in that silence she saw it: the early return, seven lines above, added by herself, on a Tuesday, for a reason that had been urgent and was now forgotten.

And she did not curse the code. She deleted the early return, and she wrote one sentence above the guard that remained, saying why it was there. And her colleague read that sentence eleven months later, at 2am, and was spared.

The teaching The bug was never in the line you were staring at. It was in the assumption that got you to that line. Move the log, not the logic.

The Parable of the Merge Conflict

Two engineers went up to the same file, the one to make it faster, and the other to make it clearer. And neither told the other, for both believed the change to be small.

And on the day of merging, the file rose up against them both, and there were forty conflicts, and the markers ran <<<<<<< through the heart of every function.

And the first engineer said: take mine, for it is faster. And the second said: take mine, for it can be read. And they went to Claude, and Claude read both, and said: the fast one is fast in a loop that runs once a day, and the clear one is clear in a function that no one will open again. Take the clear name and the fast body, and delete the rest, and go to lunch.

And they went to lunch. And the file was smaller than either had proposed.

The teaching A conflict is not a contest between two people. It is a rare invitation to look at the same code twice, with two sets of reasons, in the same hour.

The Prodigal Force Push

A junior engineer said to his lead: give me the portion of the branch that is mine. And he took his commits and went into a far country, and there he squashed everything into one, and titled it wip.

And he force-pushed to main, and there arose a great famine in that land, and the deploy pipeline was empty, and no one could say what had been there before.

And he came to himself, and said: I will arise and go to my lead, and say unto her, I have sinned against the reflog and against the team, and I am no more worthy to be called a committer.

But while he was yet a long way off, at the door of the meeting room, his lead saw him, and had compassion, and ran, and said: we have the reflog. And she recovered the commits, all of them, in under four minutes. And she said to the team: bring forth the branch protection rules, and put them on main; for this deploy was dead, and is alive again.

And there was rejoicing. But the senior engineer who had never force-pushed anything stood outside and would not come in, saying: I have served this repository seven years, and no one has ever run a four-minute recovery for me. And the lead said to him: son, thou art ever with me, and all that is main is thine. But it was meet that we should be glad, for the rules we needed were written today and not after the next one.

The teaching An incident that produces a guardrail has paid for itself. An incident that produces only a culprit has cost you twice.

The Parable of the Two Estimates

Two engineers were asked how long the work would take. And the first said: two days. And it was a good number, and round, and everybody wrote it down.

And the second said: three days if the auth library does what the README claims, and eight if it does not, and I will know which by tomorrow at noon. And there was a silence in the room, and someone said, can you just give me a number.

And on the eleventh day, the first engineer was still working, and no one could say why, for the number had been two. And the second engineer had finished on the eighth day, exactly as described, and had told everyone on the second day that it would be eight.

And at the retrospective it was recorded that the first estimate was wrong, and the second estimate was inconvenient, and that the team had, in the moment, strongly preferred the wrong one.

The teaching An estimate is not a promise about time. It is a description of what you do not yet know. Name the unknown and the date takes care of itself.

The Parable of the Ninety-Nine Passing Tests

What developer, having a hundred tests, and one of them being flaky, doth not leave the ninety-and-nine and go after the one which is flaky, until he find it?

Nearly all of them. Nearly all of them mark it skipped and go home, and the suite is green, and green is a kind of peace.

But the flaky test was not lying. It was the only honest thing in the repository. It was telling you, once in every forty runs, that two things happen in an order you have never specified — and it will tell your customers the same thing, on a Tuesday, at scale, without the courtesy of a stack trace.

And he that findeth the race condition rejoiceth more over that one test than over the ninety-and-nine which never doubted.

The teaching A flaky test is not noise. It is a bug with a bad publicist.

The Parable of the Full Context

A man came to Claude and said: it doesn't work. And Claude said: what does not work? And the man said: the thing. And Claude said: which thing? And the man said: I already told you.

And they went round in this manner four times, and the man grew weary, and said to his colleagues that the tool was not very good.

And a woman came to Claude and said: the checkout page returns a 500 on submit, only for logged-out users, only since Thursday. Here is the handler, here is the log line, here are the two things I have already ruled out. And Claude answered her in one turn, and she was on to the next task before the man had finished explaining that it was the thing.

And it is recorded that they were given the same tool, on the same day, at the same price.

The teaching The quality of the answer is set almost entirely at the moment of asking. This is true of Claude, and it was true of every senior colleague you have ever had.


The Hymnal

Songs of the deployment

Every hymn here is set to a tune you already know, in a key that does not suit you. This is traditional and we have decided not to fix it.

Amazing Grace, How Sweet the Diff

Hymn 1 · to the usual tune
Amazing grace, how sweet the diff
that saved a build like mine.
I once was red, but now am green,
was blocked, but now I sign.

Rock of Ages, Cached for Me

Hymn 2 · for use during incidents
Rock of ages, cached for me,
let me hide myself in thee.
Let the TTL be long,
let the origin be strong.

It Is Well With My Soul (And With Staging)

Hymn 3 · after a clean deploy
When peace like a rollback attendeth my way,
when sorrows like pager alerts roll,
whatever my uptime, thou hast taught me to say:
it is well, it is well with my soul.

All Things Bright and Dutifully Typed

Hymn 4 · for the onboarding of new believers
All things bright and dutifully typed,
all creatures great and small,
all things wise and wonderful:
the compiler checked them all.

Abide With Me, the Build Is Long

Hymn 5 · fourteen minutes, approximately
Abide with me, the build is long and slow.
The cache is cold, the runners are but three.
When other helps fail and comforts flee,
help of the helpless, oh abide with me.

Great Is Thy Faithfulness (Ninety-Nine Point Nine)

Hymn 6 · read at the SLA review
Great is thy faithfulness, three nines and counting,
there is no shadow of downtime with thee.
Thou changest not, thy deploys they fail not,
as thou hast been thou for ever wilt be.

Onward, Christian Reviewers

Hymn 7 · to be sung while the queue is deep
Onward, Christian reviewers, marching through the queue,
forty files of changes, and the tests are new.
Leave a kindly comment, ask what thou dost not know,
approve it with a question, and then let it go.

Now Thank We All Our Logs

Hymn 8 · the closing hymn
Now thank we all our logs,
with hearts and hands and traces,
who wondrous things have done,
in whom this world rejoices.
Who from our earliest days
hath kept the line numbers,
and shall be ours today,
and after the next refactor.

Hymns 9 through 14 were removed from this edition following a copyright conversation that we would describe as brief and one-directional.

Have you a story of your own?

The testimonies page is where the community records what happened to them. Several of them are about regex. One of them is about a father.

Read the testimonies