How about this for a randomization method? Call it the "reverse draft" method.
- Open signup for n days.
- Randomly order registered players 1..#p
- In order, the players from 1 to #p choose which team they want to be on, with the restrictions that:
- The chosen team must not have more than 2 members more than the team with the fewest members
- The chosen team may not have more than 1/3 of its members from the choosing player's previous team, if any (except if all teams have more than 1/3 their members from a previous team)