I sometimes provide on-site ruby on rails consulting that clients book in advance.
How do I deal with clients that commit to a time slot and when that time comes, they want to reschedule it for a later slot?
This creates a problem in my client pipeline as then I have less chances of getting another client to fill the created gap.
You can charge an amount upfront at the point of booking.
I would suggest it is 25% of the booked time. This is paid to lock in the time and it will come off the bill once the job is completed.
eg. You are booked for 16 hours (2 days). You could charge 4 hours upfront at the point of booking and then the remainder once the job is completed.
This way they are committed to a time before contracts a are signed.
If they really want to reschedule they loose the booking fee. NOTE: you can always take the second booking time without charging the fee in order to be "nice" to them. This becomes a bargaining chip you can use.
The risk you run is that people may be put off making the commitment. You may loose a percentage of customers but you will end up with the ones who are more organised and willing to pay.
You can opt to waive for specific clients in specific cases. Again its a point you can bargain against.