This is done for what's know as late randomization. The transaction is actually getting pulled by the driver, not pushed. A call to start_item() is blocked until the driver has call get_next_item() and the sequencer has made its arbitration decision to begin this item. Then you can randomize, or make any other direct modifications to the transaction based on the state of things at the time the request is granted.
Most people don't take advantage of this functionality, so it won't matter (I think) if you call randomize before start_item(). But it's better to be consistent in case you do need the functionality later.