SparkDevNetwork / Rock

An open source CMS, Relationship Management System (RMS) and Church Management System (ChMS) all rolled into one.
http://www.rockrms.com
580 stars 353 forks source link

Volunteer Scheduling #2705

Closed jonedmiston closed 6 years ago

jonedmiston commented 6 years ago

Below is a first stab at the volunteer scheduling feature for v8. Before jumping to the pictures a few quick points:

Configuration

The basic configuration is nearly 100% the standard Rock Check-in model. This is great as check-in will naturally work right along with the scheduling.

So we start with a Group/Location/Schedule arrangement. image

So far nothing new... Next we add the ability to set minimum/desired/maximum capacities for each location/schedule combination. (This might also make check-in more powerful too)

image

Next up we'll have GroupMembers select their schedules. The options here (weekly, every other week, etc) will be defined on the Group Type.

image

And... the group member can also have an assignment which types them to a location and/or schedule. Hopefully in most cases people are just assigned to a schedule for simplicity, but both are there if desired.

image

Showing some of the permutations on assignments.

image

The system will then be able auto-assign people to the correct place using this logic.

image

Screens

OK, so let's start to look at some possible UI to drive this. First from the admin side.

This first screen allows the scheduling to be created. Most people would be assigned from the Group's Group Members. But you could also pull people from an alternate group or data view. You can also add a single person to the resource list to pull from.

This process would be done on a week-by-week basis.

image

Confirmation emails would look something like this, but of course would be configurable.

image

Next we would have a Schedule Toolbox for the workers to use. The first tab allows them to confirm on-line and see upcoming schedules.

image

The next tab would allow them to set their preferences.

image

Note that black-out dates could be global (I'm going on vacation) or specific to a single group (I need a break from the kids).

The final tab allows them to sign-up for additional schedules that they were not assigned to.

image

Finally, how about a light analytics block that allows you to have accountability.

image

Data Model Changes

Here's some high-level changes needed to the data model to support these features.

image

edit: 6/28/2018 updates in purple

Conclusion

OK, so that's what we have so far. Let us know your thoughts. I guarantee this will change.

NuclearTacos commented 6 years ago

This is amazing!

I REALLLLLY like the options provided. In the realm of "easy-ish feedback" I think that hooks into Workflows would be extremely helpful. That would open the door to lots of super helpful TTW setups.

On the less-likely-to-be-helpful-feedback, what sort of scheduling frequencies are allowed? (based on the chart, I'm assuming that it's any schedule that you can make for a small groups, check-in, etc.)

So volunteers at my church in the nursery generally volunteer even or odd months. Is that a possibility? To make it worse (and I just found out about this a week ago) some teams volunteer even or odd days... So someone would be working with the Greeter team on Sunday the 7th, but not Sunday the 14th.

I know this is a lot to ask and I'm assuming that it's just not in the cards, but I would think that the even/odd months practice isn't that uncommon. (I'd ask in Slack before I take my own word for it)

My preliminary thought on how to handle this would be if I could define schedule frequency types somewhere, and have them evaluate SQL statement to a true or false result, the admin could write their own weird schedules to their heart's desire. Bi-weekly, odd months, odd days. You'd probably need to pass a schedule start date from the user for things like bi-weekly into the SQL to get everyone on their desired weeks.

edit Also, I think it'd be helpful if we had a Person-centric serving page. Where you'd be able to see a person's serving history and see things like the average amount of time it took them to respond to an RSVP, or if they do so an hour before they're scheduled to serve. Being able to access the prerequisite information in SQL would be more than adequate. That way we could just use DD blocks to get the relevant information.

JimMichael commented 6 years ago

I think this looks like a great start!

jeremyhoff commented 6 years ago

I concur w/ Chris Rea regarding schedules needing flexibility. At first blush, looks great - we'll scrutinize. Thank you!

rutledgek commented 6 years ago

This looks like a great start. Am I reading "This process would be done on a week-by-week basis" correctly? That this would only allow scheduling 1 or 2 weeks in advance?

jonedmiston commented 6 years ago

@rutledgek I think the automation would be something we could easily add in the future. I'm a little nervous about making it a 1.0 feature though.

watermarkgeek commented 6 years ago

Love this. Excited for the direction.

KelleyLangkamp commented 6 years ago

If I'm looking at the Group changes correctly, SchedulingMustMeetRequirements means a volunteer who is out of compliance for a background check couldn't be accidentally scheduled in a group that requires background checks? That is awesome!

I love the analytics page too. That is really helpful.

I share @rutledgek concern about doing the schedule week by week. Most of our volunteers are on a rotation of some sort. The biggest concern is going to be when a volunteer has a date blacked out and the coordinator/staff may not notice it until Monday (really Tuesday because most staff is off on Monday) and then has to find someone to fill that opening before the weekend.

My only real question is if/how group roles work with this. Some of our ministries have preferred to have their entire team in one group with different roles for each person vs having multiple groups. They especially seem to like it that way if they only have to look one place to check for compliance issues with our child protection and background check process.

jonedmiston commented 6 years ago

Now that this has been out here for a bit a few follow-ups.

Scheduling Frequency

The scheduling would have to be on a week-by-week basis (which really is a unique occurrence) to cover for people's block-out dates. You should be able to work out as far as you want into the future though.

Scheduling Patterns

The plan was to use iCal to allow for creating the patterns. We would update the current schedule builder to allow for more patterns (supported by iCal) like supporting 'The 1st and 3rd Sunday of the Month" as a single option. I don't believe the iCal protocol has a pattern for 'Every Sunday during an odd month' so that might be an issue. It's possible we could make a new one 'Every Sunday on these Months (January, March, May, etc.) (RRULE BYMONTH=1,3,...)

Odd days seems well... odd...

jeremyhoff commented 6 years ago

A common workaround is to over schedule then delete. It becomes a question of which is easier/faster - deleting a few of the many dates, or individually creating a few dates. Hard to capture every single use case, but this workaround makes the gap smaller!

like supporting The 1st and 3rd Sunday of the Month" as a single option...

Great! I believe that, along with supporting the ad-hoc dates as seen in Calendar Items will suffice.

ball7571 commented 6 years ago

This is a great start! This is going to be huge for our ministries and volunteers...really excited about this. Jon, most of these things below are more nice additions that I just wanted to throw out there.

External My Account Page - As a volunteer, would I be able to see the next time I was scheduled and where I was scheduled to serve?

Data View - Would we be able to see/receive an alert when volunteers are not fulfilling the commitment they signed up for? I am assuming this would be configurable but wanted to ask.

Prioritize Volunteers with Specific Tags/Skills - We have certain rooms where we need to prioritize volunteers with a CPR background or other specific skills we capture during the volunteer process. Then when we are trying to fill spots in those rooms, those with those needed skills are prioritized for those first.

NuclearTacos commented 6 years ago

@edmistj Being able to schedule people on every on months a,b,c,d would be fantastic! I'm fine telling high maintenance people that they're high maintenance, so I wouldn't sweat the "Only odd Sundays". 😉

Being able to filter Group Members by their Group Member Attributes would be adequate for a system like that (since the coordinator could just filter on their even/odd preference) and select everyone "manually".

WoodsonJ commented 6 years ago

@edmistj Looks like a great start, and we can relate to the weight this project brings. I know I'm late here, but wanted to know if you could provide the requirements list you have considered, so that we can possibly offer up some non-redundant thoughts on this project. Thanks!

jonedmiston commented 6 years ago

Here is a link to the combined input we received. https://www.dropbox.com/s/rlwexm14gjv3uhe/Volunteer%20Scheduling.docx?dl=0

Note: Just because the feature was listed doesn't mean our solution addresses every need.

WoodsonJ commented 6 years ago

@edmistj Again great job getting this project off to a solid start! Below are some of the features/requirements and points of clarification about v 1.0

Thanks in advance for all the work you are doing!!

luke-infoministry commented 6 years ago

The last suggestion on @WoodsonJ makes about serving preferences by family / household is especially good - the ability to select [Always serve with] [Prefer to serve with] [Prefer not to serve with] [Never serve with] (probably with slightly nicer verbiage) would be good in situations where couples/families either want serve together, or if for some reason are unable to serve at the same time for childcare purposes, etc.

Also schedule conflict alerting is pretty important.

jonedmiston commented 6 years ago

We've started a new conversation for this feature to discuss our nearly final plans. https://github.com/SparkDevNetwork/Rock/issues/3108