Dimitri Glazkov

The OODA Loopthe same dayOne of the lenses for which I tend to reach frequently is…Jank

· 2 min read

Stages of project forking2023To give you an example of this progression, here’s an abbreviated (and…I first learned about jank when I joined the Chrome team. It’s a weird slang word with multiple meanings, so I am going to use a narrower definition, custom-crafted just for this narrative. To get there, I will make a brief detour into the land of rendering Web pages. Hold on to your hats.

Suppose you are visiting a site. I’ll be the browser in this story. You just clicked on a button, and I need to play out a lively animation as a result. Like humans, browsers are mesmerizingly complicated, but at a very high level, the animation is a sequence of frames — pictures of the intermediate states between its beginning and end. Each frame is rendered — that is, created on demand in a very brief moment of time. For example, to play out an animation at a common-for-computers rate of 60 Hz (that’s 60 frames per second), I have just under 17 milliseconds to render each frame.

Rendering itself is a multi-step process, usually called a pipeline (does this start to remind you of something?) To produce a frame, I must go through each step in the rendering pipeline. Think of it as a clock that ticks every 16.667 milliseconds. If I was able to fit all the steps between the two ticks, I have a frame of animation that I can show to you. Yay!

However, if going through the rendering pipeline takes longer than that, the next tick will arrive before I have the frame ready. Bad news. Despite all the work that I’d done, you won’t see this frame. It’s dropped. Worse news: because I had to finish all the steps (those are the pipeline rules), I accumulated a deficit — my work on the frame that follows begins with the negative time balance. For example, instead of 16.667 milliseconds, I might only have 12. What’s the likelihood that this frame will get dropped as well? Pretty high.

The OODA inside2021Because of the way we humans are wired, the expectation gradient is…As a user, you will see this phenomenon as “jank”: instead of a smooth animation, it’ll look like a stuttering janky mess. Put very dryly, jank is the observed effects of a regularly scheduled pipeline-like process not fitting into its allotted time budget.

The model underneath2021It will probably not come as a surprise to you that we…OO and DA2021Each presents two different configurations for the OODA loop: I’ll call them…OODA, unrolled2021Putting jank and the OODA loop next to each other, it’s hard…OODA, unrolledthree days afterPutting jank and the OODA loop next to each other, it’s hard…The OODA Looplinks here, 2021It is my experience that these situations are rare and I am…Micro and macro janklinks here, 2021If our team’s OODA loop runs just a tiny bit slower than…Retained and immediate modelinks here, 2021The immediate mode is the least complicated of the two. In this…Wow. That is very dry. Let’s see if we can make it a bit more useful by applying what we learned here to the OODA loop. Let’s unroll the OODA loop.

Show 4 comments
  1. The OODA Loop – Dimitri Glazkov linked here · November 14, 2021

    […] It is my experience that these situations are rare and I am not going to spend much time considering them. Instead, I want to study the situation where most organizations find themselves: the two loops cycle at nearly identical speeds, and the organizations struggle to get their OODA loops to go faster. Which brings us to the concept of jank. […]

  2. OODA, unrolled – Dimitri Glazkov linked here · November 17, 2021

    […] jank and the OODA loop next to each other, it’s hard not to see the similarity. Both have two […]

  3. Micro and macro jank – Dimitri Glazkov linked here · November 25, 2021

    […] resilience will helpfully wallpaper over these thousand cuts. However, as we’ve learned before, an incident of jank creates a deficit for the next cycle. It is fairly easy to see that this […]

  4. Retained and immediate mode – Dimitri Glazkov linked here · November 25, 2021

    […] of the screen is rendered from scratch every time. Every animation frame (remember those from the jank chapter?) is produced anew in its entirety. Every pixel of output is brand new for each […]