AnyKanban

Docs › Move work

Put a column in priority order

In Progress holds four business requests and the team needs to agree which one is worked first. Drag Be ready for the 2027 regulatory reporting regime to the top of the column: the order is written to a real field on the work item, so the List view and the query results page show the same order. It is not a private arrangement of your own screen.

Before you start

Steps

  1. Open the board. The filter bar may stay as it is.
  2. Press and hold on the card Be ready for the 2027 regulatory reporting regime and start moving; the drag begins after about 4 px.
  3. Move the pointer up inside the same column. The gap that opens between two cards is the slot the card will occupy.
  4. Release it in the gap at the top of In Progress.
  5. Select Refresh in the board header, then open the List tab: the rows come back in the same order, because the query sorts by the same field.

What you should see

The card sits at the top of the column and stays there through the next automatic refresh, because the position is data rather than a local view state. In the normal case exactly one work item is written: the moved card takes a new rank read off its new neighbors, the midpoint when it lands between two cards and a step past the last one when it lands at an end, and the neighbors are left alone.

Notes

When the numeric gap between two neighbors is used up, the board places the cards near the drop again (on a short column, all of them). It stays between the cards it loaded and, at the edge of what it loaded, between the nearest items outside the board. Before it saves, it also reads the items in that stretch that are not in this column, and places the cards around them. It reads, in the moved card's project, the items of its own type, of every other type in the column (a bug among change requests, for example) and, on a board that writes its backlog's order, of every type on that backlog level and, when that backlog is the one for requirements, of the project's bug types. Closed and removed items count too, so one that is reopened is still where it was. So nothing moves past such an item that you cannot see in the column, whether it sits beyond the cards you can see or between two of them. Items of a type that shares the order but appears in neither place, such as user stories on a board of bugs, are not read, and on a board that mixes projects, the items of the other projects are not read. A card with no rank is never given one this way, and a card this board shows but may not reorder stays where it is while the cards around it keep to their own side of it. When there is no room left, the card keeps its order and a message says so. When the read fails, the card keeps its order too, and the message says the order could not be checked, so the move is worth trying again. When Azure DevOps is limiting how many requests you can make, the board cannot read that stretch, so the card keeps its order and the message says to try the move again. Once the pause is over, the same move works. A stretch can also hold more items than the board reads at once: more than 200 items of the types it reads, counting the cards the board shows as well as the ones it does not. The board then reads a smaller stretch around the drop when it can, and when that is still too full, the card keeps its order and the message says there are too many items there. The same move gives the same answer every time, so place the card somewhere else. A move to another column or lane from the same drag is still saved. Your own card's write is the one that is retried and reported if it fails; the background respacing is dropped silently on a conflict, because the next refresh re-sorts anyway. The card's right-click menu does the same job without dragging.

While a filter hides part of the column, a drop lands by one rule, the same one the native board uses: between two visible cards, directly above the lower one, after every hidden card between them; at the top of the visible list, directly above the first visible card; at the bottom, directly below the last visible card. The hidden cards keep their own ranks, and the card's new rank lies strictly between two neighboring ranks of the whole column, so no other card can hold it. Move to position counts the whole column, hidden cards included, so the number it asks for is a position in the full column.

A work item that has never been given a value in the order field sorts after every item that has one: Azure DevOps puts an empty value last, and so does the board. Items of a type outside the backlog usually start out that way, because nothing in Azure DevOps gives them a value. So a card dropped below such an item lands directly above it instead, the last place a value can hold, and is shown there at once rather than moved there by the next refresh. A card with no value of its own cannot be placed below another item without one, because any value would sort it above all of them: a drag there, or Move to bottom or Move to position to such a place, is refused, the card stays where it was, and a message says why. Move to top, or a drop directly below the last card that has a value, gives the card a value and works. A drag of such a card to another column is still saved, and the card takes the place its empty value gives it there.

The List offers the same menu on every row, and there the order entries count the List instead of a column. The List has no columns: its order is the order field across every item the board loaded. So Move to top puts the row first in the whole List, and Move to position asks for a number between 1 and the number of rows, hidden and not yet shown rows included, under the title Move to list position. Move to column from a row moves the item to that column as the card's entry does, but writes no new rank, so the row keeps its place. Rows with no value in the order field follow the same rule as cards: they come after the rows that have one, and a row with no value cannot be placed below another row without one.