Order is a position column, not a linked list
A linked list would make a move two updates and never need renumbering, but it makes reading a list in order a walk. A position column reads in one sorted scan, which is what a board does constantly. The cost is the move: dropping between two items needs a value between theirs, so position should be a float or a sparse integer, and either way it eventually needs a renumber. Doing that renumber per board, lazily, is cheaper than walking a list on every render.