This is very broad coverage question. I change things if the movement(s) seem to be plateau-ing. I change things if the muscle(s)/joint(s) seem to be getting over trained. I change things if the program requires adjustments for some reason (an athlete starts their season, ends their season, has had an injury, etc. or a client seems to be getting bored, etc.) I change things as part of the design. As in when a client has gained the strength to perform multi-joint movements as opposed to isolation exercises, etc. I try not to change things before the current exercise has had a chance to be effective or just to change things. My program design changes have a purpose.