Zones, blocks, and routes: how efficient donation pickup scheduling actually works
The More Pickups team ·
We build donation pickup software, so this is partly a look under our own hood. That said, the underlying model applies whether you’re building it, buying it, or running it by hand.
If your drivers are covering more miles than they should for the number of stops they’re making, the problem usually isn’t the driver. It’s the scheduling model upstream of them. Here’s how a well-structured pickup scheduling system is actually organized, from the top down.
Start with the region
The top level is a region: the metro area or service territory a set of trucks operates in. A region has a warehouse where trucks start and end their day, operating hours, and a scheduling close-time, meaning how far in advance a donor has to book before it’s too late to fit them into a route.
Everything else (zones, blocks, routes) exists inside a region. Run multiple metro areas and each one is its own region with its own hours and trucks. That separation matters. A close-time or capacity setting tuned for a dense urban region will behave differently in a sprawling suburban one, and treating them as one territory is where scheduling drifts from reality.
Zones keep drivers out of traffic
Inside a region, you divide the map into zones: groups of zip codes bounded by natural geography. Highways, rivers, anything that reliably separates “close by” from “across town.” The goal is simple. A driver assigned to a zone should be able to hit every stop in it without crossing the region.
How you use zones depends on your size. A smaller organization with one or two trucks often runs a weekly rotation, Zone A on Monday, Zone B on Tuesday, because there isn’t enough volume in any one zone to justify daily coverage. A larger organization with more trucks runs all zones every day, because each one has enough volume to fill a route on its own.
Either way, the zone keeps a driver’s day geographically tight. Without it, pickups get assigned to whichever route has room, and a driver ends up crossing the region twice in an afternoon for two stops that happened to book the same day.
Pickup blocks: offering capacity you actually have
A pickup block is a zone crossed with a date. Zone A on Thursday the 24th, say. It represents a capacity slot: a specific number of pickups that zone can absorb on that day.
Availability isn’t a number someone sets once and forgets. It’s computed live, as total stop capacity for the block minus the pickups already booked into it. As bookings come in, the block’s remaining availability shrinks. Two things happen automatically at the edges:
- When a block fills up, it disappears from what donors can book. They simply don’t see it as an option anymore. No overbooking, no “we’ll figure it out later.”
- When a booked pickup gets cancelled, that slot reopens automatically. The block goes back to showing available capacity without anyone manually adjusting a count.
Blocks also respect the region’s close-time. Once a date falls inside the cutoff window, it stops showing up as bookable, even if the block technically still has room. That gives dispatch a buffer to actually build routes instead of getting bookings for tomorrow morning at 11pm tonight.
This is the mechanism that lets you post real availability to donors around the clock without a human checking a calendar before confirming. A donor enters their zip code, sees actual open dates for their zone, and books directly against real capacity.
Keep booking and routing separate
It’s tempting to think scheduling and routing are the same problem. A donor picks a date, so why not build the route as bookings come in? In practice, keeping them as two separate systems is what makes both work.
Blocks control inbound capacity: how many pickups a zone can accept on a date, from the donor’s perspective, at the moment they’re booking. Route generation is a separate step that runs later, and it needs to see all of a date’s pickups together, not just the ones that came in through the normal donor-facing flow.
That distinction matters because not every pickup gets booked the standard way. Dispatchers and agents sometimes add pickups directly, bypassing block capacity on purpose. Maybe it’s a VIP donor, a large furniture load that needs special handling, or a pickup rescued from a cancellation elsewhere. If routing were coupled tightly to the booking flow, those manually-added pickups would either break the block logic or get left out entirely. Because routing pulls from the full set of a date’s pickups regardless of how each one got there, a pickup from self-service booking and a pickup from a dispatcher’s manual entry are treated exactly the same. Both are just part of the day’s work when the route gets built.
The day-of details that matter
Once a date’s pickups are locked in, the details that make routes efficient (or don’t) show up in the optimizer’s inputs.
Per-pickup-type stop durations. A box of clothing takes less time at the curb than a couch. If your system treats every stop as the same fixed duration, routes will look fine on paper and run long in practice. Feeding realistic per-type durations into the optimizer is what keeps a route’s estimated finish time close to the actual one.
Add-ons that auto-route. A donor who calls in a pickup after routes are already built shouldn’t have to wait for the next scheduling day. A well-built system slots an add-on into the closest matching existing route automatically, rather than requiring a dispatcher to rebuild a route by hand.
Refused stops still cost drive time. If a driver arrives and the donor refuses the pickup (wrong condition, changed their mind, nobody home), that’s different from a cancellation. A cancellation happens ahead of time and frees the capacity slot for someone else to book. A refusal happens at the door, after the drive is already spent. The truck burned the mileage and the time; the stop just didn’t convert. Systems that only track “completed vs. not,” without distinguishing refusals from cancellations, lose the information that tells you whether a zone’s refusal rate is a scheduling problem or a donor-communication problem.
What good looks like
When this model is working, a few things should be true at once. Donors can see real availability for their zip code without calling anyone. A block quietly disappears when it’s full and quietly reopens when someone cancels. Drivers spend their day inside one zone instead of crossing town. Add-on pickups land in an existing route instead of waiting for a rebuild. And when you look at why a route ran long, you can tell the difference between a bad estimate and a bad day.
If any of those isn’t true for your current setup, that’s usually the piece worth fixing first, not the whole system. It’s also the job dispatch is built to do: turn this model into an actual day of routes in minutes.