Your Project Software Is Guessing at Resource Leveling

Every project management package has a button that fixes an over-allocated schedule. Microsoft Project calls it Level Resources. Primavera calls it resource leveling. You click it, the bars slide right, the red goes away, and you get a new finish date. What none of them tell you is how far that new date sits from the best one available. There is a sibling technique, resource smoothing, that gives up the freedom to move the finish date at all — I lined the two up head to head in resource leveling vs. resource smoothing, measured.

I went looking for someone who had actually measured it. I found a paper from 1999 — and then noticed something strange about what happened to the topic afterwards.

Bar chart of daily crew demand on a 17-task renovation project. Demand sits at two or three people most days but spikes to five for four days in late October, above the dashed line marking the three-person crew that is actually available.
Nothing is over-allocated on paper. The plan just quietly assumes five people for four days.

Continue reading “Your Project Software Is Guessing at Resource Leveling”

Why My Free Shift Scheduler Became 13 Different Tools

The staff scheduler started as one page: give it your shifts, your people, and your coverage requirements, and it hands back a roster. That’s still true. What changed this week is that the one page became thirteen — a nurse scheduler, a firefighter scheduler, a police scheduler, a warehouse scheduler, and nine more — all running the exact same engine underneath. Same solver, same rules, same workbook format. Different pages. Here’s why I did that instead of leaving well enough alone.

Staff scheduler industry page showing a fixed 24/7 shift scheduling card
Continue reading “Why My Free Shift Scheduler Became 13 Different Tools”

CBC vs CP-SAT: My Lineup Optimizer Got 8x Faster

Two months ago I wrote about CBC vs HiGHS on my staff scheduler, where swapping solvers turned a model that took minutes into one that took seconds. So when my daily fantasy lineup optimizer started feeling slow, I reached for the same fix — and HiGHS came back three times slower. This is the story of CBC vs CP-SAT on that model, why my own previous result did not transfer, and the failure mode I found on the way that was worse than being slow.

Continue reading “CBC vs CP-SAT: My Lineup Optimizer Got 8x Faster”

How Route Optimization Algorithms Actually Work

People hear “route optimization algorithm” and picture something exotic — a black box, maybe a little AI magic. It isn’t. Underneath every routing tool, mine included, is a decades-old idea from combinatorial search, dressed up with a few tricks to make it fast enough to run in your browser instead of overnight on a mainframe. I’ve spent twenty-plus years building these models for real fleets, and the algorithm part is the least mysterious piece of the whole system. Here’s what’s actually happening when you click “optimize.”

Continue reading “How Route Optimization Algorithms Actually Work”

Do You Need a Route Optimization API?

Every so often someone emails me asking for a route optimization API — they want to hit an endpoint from their own app, get routes back as JSON, and skip the whole “upload a spreadsheet” workflow entirely. Fair ask. But before you go shopping for one, it’s worth understanding what you’re actually paying for, because “API” in this space covers everything from a thin wrapper around a free library to a genuinely expensive enterprise platform.

Continue reading “Do You Need a Route Optimization API?”