Your team can put in their working hours and enter time-off requests and add in their scheduling conflicts, but all the evidence points to the fact that -- things change. Emergencies, illnesses, appointments that get rescheduled, car trouble, etc. A good solution accounts for changes in a way that's as painless as possible.
Allow staffers to swap shifts, complete with email notifications. Enable mediation, and manually approve/deny swaps on a case-by-case basis.
Allow staffers to 'Give Up' Shifts to an open pool. An email alert goes out to all staffers on that schedule...including Admins. Staffers are responsible for their shifts until someone picks it up.
Can a staffer only work 3hours of their 6 hour shift?
Allow them to split shifts and 'give up' the portion of the shift they can't work.