On-demand is great for testing and executing individual programs or quick experiments with a small number of jobs and where performance (in terms of speed and waiting time) isn't a concern.
If you need any of the following, you may prefer to use a reservation:
a guarantee that your job will be run
to run many programs in a short period of time
to run programs in close subsequence with a minimum amount of time in between, such as for iterative workloads like VQE and QAOA
to work interactively, with a short development feedback cycle
With a reservation, your jobs are guaranteed to run as fast as possible and without interruptions. Per second of execution, reservation access is lower cost than on-demand access, if that reservation is fully used.