Skip to main content

Product spotlights

Bay Scheduling: Plan Capacity, Stop Bottlenecks

Product spotlights11 min readMay 28, 2026By Gabriel, who runs a working PPF and detailing shop in Canada
A top-down shop layout with several bays color-coded by how loaded they are, one bay clearly overloaded while another sits idle, in Service VIN.
Illustration

The short version

  • Services map to the specific bays and stations that can run them, so the schedule respects what each bay can actually do.
  • A single-capacity bay can't be double-booked — it's enforced by a database exclusion constraint, so your capacity numbers are real, not wishful.
  • AI scheduling ranks open slots by profit and is bay- and skill-aware and cure-time aware, so you fill capacity with the most valuable work.
  • Seeing bay utilization at a glance shows where the bottleneck is before it strangles the day.
  • It's the same calendar as everything else — capacity planning is a lens on it, not a separate tool you set up and maintain.

The bottleneck bay nobody planned for

Every shop has that one bay. Maybe it's the only one set up for the big jobs — the full wraps, the multi-day builds. Maybe it's where all the cure-time-heavy work lands because that's where the heater is, or it's the cleanest room for a ceramic coating. Whatever the reason, it's not interchangeable with the others, and everyone in the shop knows it in their gut. The problem is your bay scheduling doesn't. When you book blind — first open slot, next car, whoever called — everything quietly piles up on that bottleneck while the other bays sit there idle, and you find out at two in the afternoon when the day's already gridlocked.

Capacity planning sounds like a phrase from a consultant's slide deck, and I get why owners tune it out. But strip the corporate paint off it and it's just this: seeing the pileup before it happens instead of discovering it mid-shift. Knowing on Monday that Thursday is going to jam, while you can still do something about it. That's the whole game. Not a dashboard for its own sake — a way to stop overselling a bay you don't actually have.

We're all installers before we're business owners, and this is one of the places that bites hardest. When you're heads-down in a bay all day, the schedule lives in your memory and a couple of sticky notes, and "capacity" is a feeling, not a number. It works right up until it doesn't — until you've promised three cars to a bay that can only run one at a time, and now you're the one calling a customer to push their install. The fix isn't working harder or booking tighter. It's making the schedule honest about what each bay can actually do.

Services mapped to the bays that can run them

Honest capacity starts one level down from the calendar, in your service catalog. In Service VIN, each service is mapped to the specific bays and stations that can actually run it. A full wrap points at the wrap bays. A coating points at the room set up for coatings. Tint points at the tint station. So the schedule already knows a job can only land where it's doable — nobody has to remember that only bay three handles the big stuff, and nobody new can accidentally drop a wrap into a bay that can't take one. You define it once, and the constraint travels with the service everywhere it goes.

This is the part people skip, and it's the foundation the whole thing stands on. If your software treats every bay as an identical bucket of time, its idea of your capacity is fiction — it'll happily tell you you've got four open slots when really you've got one bay that can do the job and three that can't. Map the work to the rooms, and "capacity" stops being total hours in the building and starts being capable hours for this kind of job. Those are very different numbers, and only one of them keeps you out of trouble. You set this up on the same screen where you price everything — it's part of services mapped to bays, not a separate configuration chore.

The nice side effect is that it makes delegation safe. Once the catalog knows which bays can run what, you can hand booking to a service advisor or a front-desk hire without walking them through the folklore of your shop. The rules that used to live only in your head — the ones you'd have to be standing there to enforce — are now baked into where jobs are allowed to go. That's capacity planning doing quiet work in the background before you ever look at a chart.

Real capacity means no double-booking

A capacity number is only worth something if it can't lie to you. This is where most scheduling tools quietly fall apart: they'll warn you a bay looks busy, then let you book over it anyway. You know exactly what happens to that warning at 4:55 on a Friday with the phone ringing and a squeegee in your other hand — you click past it. And now your utilization view shows a bay running two jobs it physically cannot run at once. Garbage in, confident garbage out.

Service VIN handles it differently. A single-capacity bay cannot hold two overlapping jobs — not "shouldn't," cannot. It's enforced by a database exclusion constraint, which is a fancy way of saying the data layer itself refuses to store two bookings that overlap in the same bay. Try to drop a second job onto a taken slot and the move is rejected outright. There's no popup to dismiss because there's no decision to make. The wall holds when you're rushed, distracted, or letting someone new book — which is precisely when double-books used to sneak in.

That constraint is the thing that makes capacity planning trustworthy. Your utilization number reflects what's actually schedulable, because the schedule underneath it physically can't contain an impossible overlap. No phantom double-bookings inflating a bay to 150% while another sits empty. It works the same way no matter which door a booking comes through — the week grid, the online storefront at midnight, a calendar sync, an import — because the rule lives in the database, not in one screen. You can read how the guard is wired on the calendar and bay guard page, but the short version is: real capacity requires a real constraint, and a warning popup isn't one.

Fill capacity with the most profitable work

Here's the trap on the other side of a bottleneck: you fix the pileup, you get the bays balanced, and then you fill every open slot with whatever walks in the door. Now you're busy — booked solid, running flat out — and somehow the month is still soft. Full isn't the same as profitable. A bay running back-to-back express jobs can earn less than the same bay running one well-priced install, and if you're just plugging holes with the next available yes, you'll never see the difference until you do the books.

This is where profit-ranked AI scheduling earns its keep. Instead of just showing you open time, it ranks the open slots by projected profit — costed from your real prices, your film and labor — while staying aware of which bay and which installer's skills the job needs, and staying conflict-safe against the same bay guard. So when you're deciding how to fill capacity, you're steered toward the booking that actually pencils out for a given slot, not just the one that's next in line. You stay in charge of the calendar; it just makes the smart move the obvious one.

I'll be straight about where this sits: the calendar and the bay guard are in the core product, but profit-ranked AI scheduling is a Growth feature, not an Essentials one. I'd rather tell you that here than have you find it at checkout. And it's worth understanding why it can work at all — it only ranks well because the capacity underneath it is honest. A profit ranking is only as good as the schedule it's ranking against. Bays mapped to services, a hard no-double-book constraint, one board everything feeds: get that foundation right, and the smart layer has something solid to stand on. Skip it, and you're optimizing on top of fiction.

Cure time is a capacity constraint too

Here's the one that separates software built for film and coating shops from software built for oil changes: cure time. A ceramic coating might be twenty minutes of hands-on work, but it ties up that bay for hours while it cures. The installer walks away; the bay does not free up. If your scheduler only counts hands-on labor, it thinks that bay is open again at minute twenty-one and cheerfully books the next car into a room that's still occupied by a curing panel. Every capacity plan that ignores cure time is a work of fiction, and it's the exact fiction that gets film shops in trouble.

Service VIN's AI scheduling is cure-time aware, which means the bay stays claimed for as long as the work actually holds it, not just the minutes your hands are on it. That's what makes the utilization picture real for a film shop. A bay doing one coating with a long cure can be genuinely full for the afternoon even though nobody's standing in it — and the schedule treats it that way instead of pretending it's available. Same idea for PPF that needs to sit, or a wrap that has to settle before the next stage.

Once you can see cure time as the capacity it really is, you start planning around it on purpose. You stagger the long-cure jobs so they're not all tying up rooms on the same afternoon. You slot a quick hands-on job into the gap while a coating cures next door, because now the gap is visible instead of invisible. This is the difference between a schedule that reflects a film shop and one that reflects a lube shop with the labels changed. Cure time isn't an edge case in this trade. It's half the job, and it belongs in the capacity math.

Reading bay utilization at a glance

Put all of that together — bays mapped to work, a hard constraint, cure time counted honestly — and you get a utilization view you can actually trust. The point of it is speed of read: one glance and you can see which bay is carrying the week and which one's coasting. You're not auditing a spreadsheet. You're spotting a shape. And a lopsided shape is a message.

The example below is illustrative — a made-up sample shop, not measured data, and definitely not a claim about how full anyone's bays run. Your real numbers come from your own schedule. But the shape is the lesson. When one bay is doing far more than its share while another sits nearly empty, that's your cue that you're booking blind: sending work to the bottleneck out of habit instead of spreading it across the capacity you paid to build. The fix usually isn't more bays. It's using the ones you have on purpose.

Bay utilization at a glance (illustrative)Illustrative example
  • Bay 1 (busy)40%
  • Bay 228%
  • Bay 3 (bottleneck)22%
  • Bay 4 (idle)10%

Illustrative example of a lopsided utilization mix — a sample shop, not measured data. An imbalance like this is your cue to rebalance the week.

Bay utilization at a glance (illustrative)
SegmentValueShare
Bay 1 (busy)4040%
Bay 22828%
Bay 3 (bottleneck)2222%
Bay 4 (idle)1010%

What a lopsided chart is telling you

When one bay towers over the rest, don't just admire the problem — read it as a to-do list. Which services are only mapped to that one bay, and could a second bay be set up to share the load? Are the long-cure jobs all landing on the same day? Is the overloaded bay actually your most profitable room, or just your most habitual one? Rebalancing a week is usually three or four small moves, not a renovation.

Planning a week that doesn't strangle itself

So what does capacity planning look like on a normal Monday? Start by looking at the week as bay lanes, not one undifferentiated pile of appointments. You want to see the load per room, because that's where balance lives or dies. Then a few habits do most of the work. Stagger your cure-time jobs so you're not tying up every room with something that has to sit — spread the coatings across days instead of stacking them on Thursday. Protect the bottleneck bay: if only one room can run the big installs, don't let quick jobs that any bay could handle eat its slots. Fill the gaps around long cures with short hands-on work, since the room's claimed anyway.

None of that is exotic. It's the stuff a sharp shop owner already does in their head on a good day — the trick is having a schedule that lets you see it on every day, including the busy ones when your head is full. That's the whole pitch for treating capacity as a lens rather than a chore: because the services are mapped to bays and the bay guard keeps the numbers real, the utilization view reflects your actual schedule automatically. There's no parallel capacity system to keep in sync. You run the calendar you already run; capacity planning is just the view that keeps you honest about it.

The calendar and the bay guard are in the core product from the Essentials plan at $79/mo CAD, so real capacity — bays mapped to work, no double-books — is table stakes, not an upsell. Profit-ranked AI scheduling, the part that ranks your open slots by what actually makes money and stays cure-time aware, is an Growth feature at $199/mo CAD. Every plan starts with a 14-day free trial that runs on the full product, so you don't have to take my word on any of this — load a real week, map your bays, and watch where the work piles up. You can compare the tiers on the pricing and free trial page. I'm in one of the biggest paint-protection markets on the continent, and a booked-solid winter is exactly when a mis-planned bay hurts most — so this is the kind of thing worth sorting before your next busy stretch, not during it. Get capacity honest, and you get to stop finding out about the bottleneck at two in the afternoon.

Frequently asked questions

How does Service VIN know which bay a job can go in?

Your service catalog maps each service to the bays and stations that can actually run it. So when a job is scheduled, the system knows it can only land in a capable bay — you're not relying on someone remembering that only bay three is set up for the big jobs.

Does 'capacity' account for cure time, or just hands-on time?

The scheduler is cure-time aware, which matters enormously for film and coating shops. A coating might be twenty minutes of hands-on work but tie up a bay for hours while it cures. Capacity planning that ignores cure time isn't real capacity planning; ours doesn't ignore it.

How do I make sure I'm not just full, but full of good work?

AI scheduling ranks open slots by projected profit while staying bay- and skill-aware and conflict-safe. So when you're filling capacity, you're steered toward the most valuable jobs for a given slot rather than just plugging holes with whatever's next. It's a Growth feature built on the same calendar.

Is capacity planning a separate module I have to set up?

No, it's a lens on the same calendar you already use. Because services are mapped to bays and the bay guard prevents double-booking, the utilization view reflects your real schedule automatically. There's no parallel system to maintain.

Gabriel headshot

Gabriel, who runs a working PPF and detailing shop in Canada

Runs a working PPF and detailing shop in Canada · builder of Service VIN

Gabriel runs a working PPF and detailing shop in Canada and built Service VIN. He got his start detailing and wrapping his own car, taught himself color PPF, and spent his day job in digital marketing and SEO before building the shop software he could never find. Six years in, he writes to help other owners get out of the bay and actually run their business.

Keep reading

The newsletter

Get the next one in your inbox

Pricing, quoting, hiring and margin — written from the bay and the books. We send new posts and nothing else.

New posts about twice a month. No sales blasts, unsubscribe in one click.

Run your shop on Service VIN

Quote for margin, book without double-booking, and put your follow-up on autopilot. Try every feature free for 14 days — no credit card required.