We noticed that our players make a lot of shots when shooting spot up jumpers, but when we make it random or with defense, the shooting percentage decreases by 20 to 40%. That is why we try to make every shot random/different. It teaches players to read the distance and what the defense gives them to get their shot off.
We want our players to have a lot of game-like repetitions to get used to shooting with defense ; The most important thing is that they try to maintain the exact same form. We use contested shooting drills with all ages. Not every player will shoot with a good form, but they should always shoot it high, soft and on balance.
When it is still too difficult for players to get their shot off or to maintain their form, you can use constraints on defense, like keeping their hands behind their back so they can’t block the shot. You can also make it more difficult for the offense by giving a constraint on the amount of dribbles, playing with the distance of the defender, static vs on the move, on the catch vs off the dribble, good pass vs bad pass,…
Spot up shooting (block practice) is great for teaching the technique and focusing on the details of the shot and should always be implemented in the beginning of practice to get a feel for the basketball (form shooting). The duration of time spent on spot up shooting depends on the age and level of the players.
Reading, planning and doing are equally important. When you catch the ball, you need to read & recognize where the defense is. The offensive player has to understand how far away he is from the hoop and has to plan accordingly: how hard, how fast, how high to shoot the basketball, among a 1000 other things. Then the execution comes into play.
Shooting is an art form that requires both block and random practice.