I do some research on the ports of call, then book directly with locals for my shore excursions. One can save a lot of money this way and get a better experience. Check websites such as Tripadvisor, etc. to get ideas on what to do at various ports of call and also find reviews of excursions and operators.
The cruise excursion operators track the boat schedules and know exactly when you'll arrive, even if you are running late.