It's necessary, order_shards/1 will do lists:keysort(#ordered_shard.order, OrderedShards) if the head of the list is an ordered shard. That is, the list has to be be one kind of thing or the other, not a mixture. We do downcast at the end;

    Shards = ushards(DbName, live_shards(DbName, Nodes, [ordered]), ZoneMap),
    mem3_util:downcast(Shards).

So I'm leaving this.