Coaster
Logic
All entries
August 31, 20264 min read

August: Every Check Was Green

#LearningInPublic

The short version

Three things broke in August, in a game and on this site. Each time, every check I had said it worked. The checks were asking the wrong question.

I wrote three field notes in August and never published any of them. This is the month in one post, because reading the three side by side, they turned out to be the same story told three times.

text
WHAT MY CHECKS ASKED          WHAT I NEEDED TO KNOW

  is it named right?    yes      does it move?       no
  is it shaped right?   yes      does it arrive?     no
  is it neat?           yes      does it still mean
                                 what it says?       no

The arms that never swung

Project Ginger, the game I was building in August, had five plush toy enemies: a frog, a penguin, a pig, a racoon and a unicorn. I wanted them to share one walk, so I forced all five onto the same skeleton and wrote a script to check it. Names matched, hierarchy matched, all five came back green.

Then the frog walked sideways. Chasing that found the real problem, and it was mine. I had written the walk to rotate each arm around its own length. A bone turned around its own length does not go anywhere. It spins in place, like rolling a pencil between your fingers.

I wrote a script that turns each bone on each axis and measures how far the tip actually travels. The arms measured zero millimetres, on all five creatures. They had never swung, and it looked plausible enough that I never asked.

The swing that never arrived

At the end of the month the fighting in the game looked wrong, so I changed the swing animation. Then I changed it again. Four different sources in about a week, and every time it looked the same.

On a Friday night I stopped changing content and put a recorder on the game instead, one line per frame. The attack flag went on. The message telling the animation to play a swing never went true, not once. The weapon had registered its list of allowed messages before the character was ready, so the list was empty and every swing request went nowhere.

Three of those four animation packs were rejected without ever being seen. I had been judging a standing pose.

The logo that forgot the coaster

The same month I rebuilt this site, and after about ten rounds of making the logo better, it was a game controller. No coaster anywhere, on a site whose whole idea is that if it doesn't fit on a coaster, it's a bad idea.

Every round had a real reason behind it. A round badge is a bad shape for a navbar. Thin lines turn to mush at favicon size. Shapes should sit on a whole grid cell. Each step was judged against the version right before it, never against the sentence the company is named after. The fix kept most of that work and put the controller back on a beer mat.

What the three have in common

My checks were all questions about shape. Is this named the same as that. Does it have the same parent. Is it tidy at 16 pixels. They were all true. Not one of them asked whether the thing did what it was for.

A check that asks about shape will pass a thing that does not work.

The habit I took out of August is measuring the result instead of the setup. How far the tip moves. Whether the message lands, frame by frame. Whether the new logo still fits the tagline when you put them side by side. The other thing that worked was a 25 second screen recording of the game, watched back slowly. It found four real problems in minutes that a week of blind tuning had missed.

Where it stood at the end of the month

The arms swung, measured, but only in Blender. None of it was in the game yet. The swing message was half fixed: the list of allowed messages was filled, and the swing still did not play. September picks that up.