Blog

White Elephant and "fixed time, variable scope"

I recently wrote White Elephant is surprisingly effective (link) with Yee Aun, and I realized I hadn't mentioned it here yet. It's an exploration of what makes a gift distribution "good", including simulation and visualization of how White Elephant distributes gifts.

This project felt like the perfect example of what Basecamp's Shape Up calls "fixed time, variable scope":

It’s hard to ship a book when you can always add more, explain more, or improve what’s already there. When you have a deadline, all of a sudden you have to make decisions... We can only judge what is a "good" solution in the context of how much time we want to spend and how important it is.

I love a good Christmas project for this exact reason. Back in 2020, my then-roommate Joanne and I recorded a little album, Christmas? In This Economy?. From our "making of" recap:

The nice thing about making a Christmas album is that there's a hard deadline. It's not like you can release one in January, so this forced us to prioritize. When the dust settled, a lot of the parts were worked to a "good-enough" state instead of aiming for perfection... and we did hit our self-imposed deadline of a week before Christmas.

I didn't read Shape Up until 2023, but I had already lived the experience of "fixed time, variable scope" through the power of holiday music. Why not try it again?

It turns out, it was hard.

We made some good decisions:

  • Use tooling we already knew: Python, Plotly, and plain HTML.
  • Iterate on our early results to find unplanned interesting bits like the "last steal" rule.
  • Push back on outside suggestions (even though some of them were good).

We also could have done better in a couple areas.

Although I tried to do a literature review and looked at fair item allocation, I entirely missed the directly-applicable assignment problem. My friend Arun pointed this out as soon as he read the near-final draft, which shows there's really no substitute for asking someone who knows things. In this case, conversational AI also lives up to the hype after a little clarification:

Bobbie: I'm not looking for algorithms to play White Elephant itself, but algorithms that describe a similar scenario. Are there any?

ChatGPT (abridged): Ah, I see! ...there are indeed algorithms which share similarities. Here are a few:

  1. Assignment Problem deals with finding the optimal assignment of a set of resources to a set of agents...
  2. Matching Algorithms are used to match elements from two sets based on certain criteria...
  3. ...

And while we eliminated difficult-to-understand metrics like min-max fair share, our homegrown Top-k metric also ended up being hard to interpret (as discussed in the post).

Time management was also an issue; we underestimated the time needed to explore and summarize the findings. Running the N=9 simulation took a few hours for my laptop from start to finish; some of the graphs required special tinkering to make them readable; and our time got eaten by various other priorities - friends and family, and wedding planning. That's why we barely got it out on January 1st, instead of my original ideal date of a few days before Christmas. Hofstadter's Law holds true: It always takes longer than you expect, even when you take into account Hofstadter's Law.

Since our time frame was fixed, we didn't have the change to expand scope to fix these issues (and more, like mobile-friendly display). But we did get it out, in a state that we're happy with! And we can always do a "Part 2" later, if we feel like it.


On the topic of timeliness, the first inklings of that post are immortalized as a Git commit from December 2022, a whole year earlier. It just says "White Elephant is a", and nothing else happened for about a year. But there's always a chance to go back and pick up where you left off.

making, codeBobbie Chen