TL;DR
De flesta schemaprogram för serviceföretag går sönder på samma ställe: de modellerar en kalender i stället för en arbetsvecka. En kalender har bokningar. En arbetsvecka har personer med avtalad arbetstid, personer som är sjuka, en tisdag som lovades bort till en kund för ett halvår sedan, och en planerare som vet något systemet inte vet. Det här måste ett schema bära innan det kan bära en vecka, och vad varje del kostar att få fel.
Kalkylbladet är inte problemet. Grenen är.
Ingen schemalägger i ett kalkylblad för att de tycker om kalkylblad. De gör det för att ett kalkylblad låter dig skriva vad som helst i vilken ruta som helst, vilket är precis vad en riktig vecka kräver.
Felet ligger inte i formatet. Det ligger i att filen grenar sig. Den som har filen öppen har sanningen, och sanningen ändrades klockan sju i morse i en version någon annan inte har öppnat. Två bilar åker till samma adress. En kund ringer och frågar var laget är, och tre personer ger tre svar.
Varje egenskap hos ett riktigt schemasystem är en egenskap som hindrar grenen: en tavla, en skrivning, och en anteckning om vad som ändrades. Allt nedan tjänar det syftet.
Personal är inte användare
Det första modelleringsbeslutet, och det som i tysthet avgör månadskostnaden.
Den som kan skickas någonstans och den som loggar in är inte samma sak. En lokalvårdare på två dagar i veckan är en resurs som ska schemaläggas — hon har arbetstider, kompetenser, ett anställningsdatum, en färg på tavlan — och hon kanske aldrig öppnar programmet. En planerare som aldrig lämnar kontoret är det omvända.
Därför är anställda och användare två skilda poster, och kopplingen mellan dem är frivillig. Du kan lägga någon på tavlan, ge personen arbetstider och kompetenser, och schemalägga i ett år utan att betala för en licens. Licensen är för dem som loggar in: planeraren, arbetsledaren, och de lag som använder fältappen för att stämpla in och beta av en checklista.
Det här spelar störst roll för företag som använder bemanning eller säsongspersonal. Utemiljö dubblar styrkan i april. Du vill inte att priset på schemat ska dubblas med den.
Gränsen som finns ligger på antalet anställda, inte på användarna: 25 på ingångsnivån, 100 på mellannivån, ingen gräns på den översta.
Arbetstid är två regler per dag, inte en
Här är detaljen som avgör om någon någonsin läser era varningar.
Arbetstiden ligger per veckodag som ett klockslag — "tisdagar, 07:00 till 16:00" — i stället för som tidsstämplar, eftersom regeln överlever varje enskild tisdag. Varje regel bär ett frivilligt giltigt-från och giltigt-till, så den som går från fyra dagar till fem i mars inte får sin februari omskriven. När en tidrapport från mars ifrågasätts i juni finns de regler som gällde i mars kvar.
Den del som ser ut som en teknikalitet och inte är det: en dag kan bära mer än en regel. Tiderna 08:00–12:00 och 13:00–17:00 är hur man skriver ned en lunchrast.
Ställ nu den självklara frågan — "ligger det här jobbet 09:00 till 15:00 inom personens arbetstid?" — till varje regel för sig, och svaret blir nej. Ingen av reglerna rymmer jobbet. Varje vanligt heldagsjobb på den veckodagen rapporterar sig självt som avvikande, planeraren ser en varning på allt, och inom en vecka slutar hon läsa varningar över huvud taget. Dubbelbokningarna längre ned i listan förblir olästa tillsammans med dem.
Därför slås dagens regler ihop innan frågan ställs, och två pass som skiljs åt av högst sextio minuter läses som en arbetsdag. En timme, eftersom det är vad en svensk lunchrast skrivs som när någon alls skriver ned den. Det är ett tröskelvärde, inte ett påstående om vad glappet var till för.
Fallet som ändå fångas: tiderna 06:00–10:00 och 18:00–22:00 ligger åtta timmar isär, slås inte ihop, och ett eftermiddagsjobb rapporteras korrekt som utanför dem. Ett delat pass är ett delat pass. En lunch är det inte.
Frånvaron är den andra halvan
Arbetstiden säger när någon normalt finns. Frånvaron säger när hon inte gör det, vad veckoregeln än påstår.
Fyra typer, eftersom fyra är vad ett serviceföretag faktiskt skiljer på: semester, sjukdom, ledighet och utbildning. Tidsstämplar i stället för datum, eftersom en halv dag ledigt är normalfallet och en ren heldagsflagga inte kan säga "går klockan två".
En asymmetri värd att kopiera om du bygger det här själv: semester begärs, sjukdom anmäls. Statusen är godkänd som utgångsläge och planeraren avslår om hon måste, eftersom det som händer klockan sju på morgonen är att någon sjukanmäler sig — och ett system som kräver ett godkännande innan frånvaron syns på tavlan är ett system som visar fel tavla hela förmiddagen.
Att lägga ut arbetet
Att sätta någon på ett uppdrag och att dra ett uppdrag till en ny tid är de två saker en planerare gör hela dagen, så båda är egna handlingar i stället för fält i ett redigeringsformulär. Var och en måste besvara "är det här ett misstag" innan den skriver, och ett fält i ett formulär kan inte det.
Två följder som sparar ett andra steg ingen minns att ta. Att sätta någon på ett uppdrag som har en starttid flyttar det från bokat till schemalagt — att lägga arbete på en person är vad schemaläggning betyder. Att ta bort den sista personen från ett schemalagt uppdrag för det tillbaka till bokat, så att det dyker upp igen i listan över arbete som ska placeras, vilket är den enda lista en planerare arbetar ur.
Konflikterna du får veta om
Fyra kontroller, två allvarlighetsgrader.
Två är fel: personen står redan på ett annat uppdrag i samma tidsfönster, och personen är inte anställd det datumet. Två är varningar: hon är noterad som frånvarande, och jobbet ligger utanför de tider hon normalt arbetar.
Fel stoppar sparandet och kommer tillbaka med krocken namngiven — vilket uppdrag, vilket ordernummer, vilka tider — och planeraren kan skicka samma begäran igen med en uttrycklig åsidosättning om hon menar allvar. Varningar stoppar aldrig något; de följer med i svaret, så att planeraren ändå får veta att hon har bokat in någon mitt i semestern.
Överlappstestet är halvöppet i båda ändar: ett jobb som slutar 12:00 och ett som börjar 12:00 krockar inte. Utan den regeln rapporterar varje rygg-mot-rygg-dag sig själv som trasig.
Och den som saknar arbetstidsregler helt varnas aldrig. De flesta företag fyller aldrig i dem, och ett system som varnar för varje bokning på alla som saknar schema är ett system ingen läser.
Vi har skrivit ett helt inlägg om var dubbelbokningar faktiskt kommer ifrån, eftersom mekanismen är mer intressant än varningen.
Avtal skriver sig själva, men bara framåt
Städning varannan tisdag är en regel, inte fyrtio uppdrag någon knappar in.
Regeln är en iCal-RRULE, begränsad till den delmängd systemet tänker stå för: dagligen, veckovis eller månadsvis, med intervall, med namngivna veckodagar, och med antingen ett antal eller ett slutdatum. Allt utanför det — "andra tisdagen i månaden", en regel som blandar månadsdagar med veckodagar — avvisas med en 422 i samma stund du sparar den, med den del som inte förstods utpekad, i stället för att accepteras och expanderas till fel dagar ett halvår senare. Ingen korrekturläser ett schema som skriver sig självt.
Genereringen tittar bara framåt. En regel som började i januari lägger inte ut ett halvårs efterhandsjobb första gången den körs, eftersom arbete ingen har utfört inte är arbete och en tavla full av försenade spöken är en tavla ingen litar på.
Och en instans som avbokats förblir avbokad. Den som strök nästa tisdags besök menade det; att låta generatorn lägga tillbaka det nästa morgon är precis det beteende som lär ett kontor att sluta använda schemat.
Veckor börjar på måndag. Överallt — i regelexpansionen, i arbetstidsreglerna, i rapporterna.
Vad det inte gör
Ruttoptimering finns inte. Den står som planerad på den översta nivån och är medvetet inte beviljad, vilket betyder att ingenting i produkten kommer att lägga om din dag efter körtid. Onlinebokning finns inte heller, där kunden själv väljer en tid. Behöver du något av det i dag är vi fel svar i dag.
Konfliktkontrollen vet om tid, anställningsdatum och frånvaro. Den vet inget om körtid mellan två adresser, inget om fordon, och inget om personen är behörig för arbetet. Du kan filtrera personallistan på kompetens när du tilldelar, och tjänstekatalogen håller reda på vilka kompetenser ett jobb kräver, men ingenting vägrar en obehörig tilldelning. Det gör planeraren.
Mer om hur man planerar geografi för hand finns i ruttplanering för fem bilar.
Den första veckan
I den här ordningen, eftersom varje steg gör nästa användbart:
- Personalen, med anställningsdatum. Femton minuter. Anställningsdatumen är det som får kontrollen "inte anställd det datumet" att fungera alls.
- Arbetstiderna. Två regler per dag för alla med lunch. Hoppa över dem för de vars tider verkligen varierar; en tom regeluppsättning läses som "ingen åsikt", inte som "otillgänglig".
- Tjänsterna, med tidsåtgång och momssats. Städning är 25 %, persontransport är 6 %, och katalogen är där det avgörs en gång.
- Den här veckans arbete. Inte förra årets. Knappa in veckan ni står i, dra ut den på personerna och låt konfliktkontrollen berätta vad kalkylbladet dolde.
- Avtalen sist. När tavlan är verklig gör du om de återkommande kunderna till regler och låter generatorn fylla horisonten.
Frånvaro och kompetenser kan vänta tills någon behöver dem. Att tavlan stämmer på måndag kan inte det.