I usually make them based on whatever secondary positions they have. I do this more often for CPU teams and use it as a way of ensuring they are using any position "stacks" appropriately. For CPU teams, I will also occasionally add secondaries to help alleviate issues.
In the rare case I want to change a player on my team to a novel position; I go through a specific sequence. For example, let's say I wanted to move Elly de la Cruz from SS to CF in my Reds franchise. I would do this:
1. I would force him to play a minimum of 20 games in CF without him having the secondary - so yes, dealing with the OOP penalty. Obviously, the best time to do this would be during ST (if I sim ST, I don't get too OCD about if the sim stat engine actually plays him there....I just use it as my own "head canon"). Alternatively, he would have to spend a month in the minors while "learning" the new position.
2. Once point 2 is complete, he will be given CF as a secondary position.
3. He will then need to play a full season (or a large percentage of a full season) in CF (while it is still listed as a secondary). Once that is done, he will then be considered a CF for the next season (his old primary becoming his new secondary).
The couple of times I have done this, it worked really well in seeing that player grow familiar with the position while also being forced to deal with the "growing pains".
Comment