The placement plan has no hallway
Reading Rebalancer made me separate the conditions for a destination from the steps needed to reach it.

It fits in the room
Imagine drawing a furniture layout on paper. The bookcase fits against the wall, and there is room to pull a chair out from the desk. It looks like a good arrangement. The hallway the bookcase must travel through is missing.
Space in the room and the journey into it are slightly different problems.
Meta’s Rebalancer documentation brought that scene to mind. Rebalancer assigns objects, such as tasks or data shards, to containers, such as servers, using specified constraints and optimization objectives.
I found its capacity and load-balancing examples useful. A memory limit and a preference for similar loads across hosts both belong under “place things well,” but they have different jobs.
I have not installed the tool or run a placement problem. Reading the official documentation and paper has made me consider what I would write down before delegating one.
Must and preferably
Take a hypothetical shard-placement problem. Each server has a storage limit. We have agreed to keep replicas of the same shard in separate designated failure domains. A placement that violates that agreement cannot become acceptable simply because it balances load neatly.
Then we can discuss how much balance to pursue. If a small improvement requires moving several shards, we need to decide whether those moves are worth making. Without measured loads or transfer times, I cannot attach numbers to which choice is better.
“As even as possible” sounds simple. Even by which measure? Equal shard counts need not mean similar memory use. Giving everyone the same number of boxes does not give them the same weight to carry.
I would read the placement request twice: have I described something mandatory as a preference? Have I fixed a preference so tightly that I removed useful choices?
Requirements can conflict too. Asking for separated replicas without enough available failure domains sends us back to the inputs. Running the score calculation longer will not create another place to put them.
If I dislike the result, I should read my objective before blaming the algorithm. It might have done exactly what I asked, while producing something other than what I wanted.
After getting an answer
Rebalancer explicitly says its local search does not guarantee a global optimum. A placement obtained that way cannot be described as the best among every possible assignment. I would preserve its constraints, objectives, and solving method.
Then comes the work of realizing the plan. Moving a hypothetical shard between servers requires decisions about where data resides during copying and when readers switch paths. A final assignment alone does not specify that sequence.
The OSDI 2024 paper’s introduction discusses shard migration alongside spreading replicas across failure domains and avoiding too many simultaneous changes that could destabilize the system. It is a reminder to consider conditions during the transition as well as at the destination.
The execution procedure is a question I am adding after reading, not a claim that Rebalancer performs my service’s copying and cutover. Changing an assignment in a calculation and moving live data remain distinct activities.
Time to draw the hallway
If I were reviewing this hypothetical task, I would write the first move beside the final placement: where the first shard goes and how its existing replicas remain available. Describing that step might expose a condition missing from the plan.
A condition that matters during execution needs to be checkable by whatever carries out the move. Free space in the final arrangement does not supply temporary space for a copy.
Back in the room on paper, the question becomes modest. We know the bookcase fits against the wall. How will it get there from the front door?
Keep the placement plan. Draw the hallway beside it.

