Schemaläggning som håller.
Så planerar du en vecka med fältarbete som klarar mötet med verkligheten. Varför dubbelbokningar uppstår, varför ett system som vägrar dem är sämre än ett som rapporterar dem, var restiden tar vägen, vad ett delat pass gör med en naiv konfliktkontroll, och när ett löpande avtal slår att planera om varje måndag.
Varför dubbelbokningar uppstår
Nästan ingen dubbelbokar med flit. Det händer på tre ställen, och alla tre handlar om var planen bor snarare än om hur noggrann planeraren är.
Planen är en fil. Den som har filen har sanningen. Ändringen som gjordes klockan sju på morgonen ligger i en version som någon annan aldrig öppnade, och två montörer kör till samma adress. Kalkylbladet är inte problemet; kopian är det.
Ändringen kom per telefon. En kund flyttar tisdag till torsdag, planeraren skriver det på en lapp, och tavlan säger fortfarande tisdag. Den som nu är ledig på tisdagen blir bokad igen samma eftermiddag av någon som läste tavlan.
Uppdraget flyttades, och ingen kontrollerade personerna på det igen. Det är den som överlever en flytt till ett system. Att dra ett uppdrag till en ny tid är inte samma handling som att tilldela någon, så ett system som bara kontrollerar vid tilldelning släpper igenom flytten oprövad. Att flytta ett uppdrag in i någon annans eftermiddag är samma misstag som att boka in dem där direkt, och det måste kontrolleras på samma sätt.
Så uppstår en dubbelbokning går igenom förloppet steg för steg.
Ett schema som vägrar är sämre än ett som rapporterar
Den lockande lösningen är att göra krockar omöjliga. Den är fel. En planerare som blir nekad rakt av skriver uppdraget på ett papper i stället, och då slutar schemat vara där sanningen finns — vilket var det enda det var till för.
Därför ger kontrollen en lista med fynd i stället för ett ja eller nej. Fyra kontroller, två allvarlighetsgrader:
- Dubbelbokad — personen är redan på ett annat uppdrag under tiden. Ett fel.
- Inte anställd det datumet — före startdatum eller efter slutdatum. Ett fel.
- Frånvarande — semester, sjukfrånvaro, ledighet eller utbildning täcker tiden. En varning.
- Utanför arbetstid — bokningen ligger utanför de tider som är registrerade för den veckodagen, eller på en dag personen normalt inte arbetar. En varning.
Ett fel avbryter sparandet en gång: svaret innehåller vad det krockade med, med ordernummer och tid, och planeraren kan bekräfta och skicka igen. En varning stoppar aldrig någonting, och den följer med tillbaka tillsammans med det sparade uppdraget, så att planeraren ändå ser att de har bokat in någon mitt i semestern.
Två detaljer gör att varningarna är värda att läsa. Överlappet är halvöppet i båda ändar, så ett uppdrag som slutar 12:00 krockar inte med ett som börjar 12:00. Och ett avbokat uppdrag är inte arbete, så ett ombokat besök rapporterar ingen krock med den bokning det ersatte.
Det finns också en läsande genomgång av en hel period, och det är den som banderollen ovanför kalendern ritas från: dubbelbokningen du gjorde i går är värd att känna till utan att du ska behöva dra i något för att hitta den.
Restiden är det ingen planerar
Två timmars arbete i Nacka och två i Täby är inte fyra timmar. Det är fyra timmar plus vad E4:an råkar göra, och det är i glappet planen först går sönder.
Tre saker i schemat handlar om det glappet, och det är värt att hålla isär vilken som är vilken.
Planen och löftet är skilda fält. Ett uppdrag bär en planerad start och ett planerat slut, och separat från det kundens fönster: tidigast den får börja och senast. ”När som helst på tisdag” och ”klockan nio på tisdag” är två olika löften, och att pressa in båda i ett fält kostar dig precis den marginal du behövde.
Uppskattningen sitter på uppdraget. Tjänsten i katalogen bär en normaltid, och uppdraget bär sin egen uppskattning i minuter. Det är den siffran du lägger på marginal, inte den på tavlan.
Restid är en egen sorts rapporterad tid. Ett lag stämplar in på restid i stället för arbete, och det förblir restid hela vägen: på fakturaunderlaget blir det en restidsrad i stället för en arbetsrad, och den bär aldrig ROT- eller RUT-avdrag, eftersom resan till platsen inte är avdragsgill.
Det som inte finns: ruttoptimering. Den står på färdplanen och finns inte i produkten, så ingenting sorterar din dag efter körsträcka i dag. Ruttplanering för små team handlar om den variant du gör för hand, vilket för fem bilar oftast är rätt variant ändå.
Den oplanerade kön
De flesta råd om schemaläggning utgår från att arbetet redan ligger på tavlan. Det svåra är högen som inte gör det: uppdraget som bokades i går utan dag, återbesöket någon lovade ”nästa vecka”, besöket som väntar på att en del ska komma.
Ett uppdrag utan planerad start går att filtrera fram som just det, och kön är den lista en planerare arbetar ur. Tre regler håller den ärlig.
Du får boka upp en person innan du har en dag. Att tilldela någon till oplanerat arbete är tillåtet, och uppdraget förblir oplanerat tills det har en starttid. Det är så en planerare håller den enda person som kan jobbet medan kunden bestämmer sig.
Att lägga ut arbetet är det som gör uppdraget schemalagt. Ett bokat uppdrag blir schemalagt när någon tilldelas det med en tid. Ingen behöver komma ihåg ett andra steg, eftersom statusen följer handlingen.
Tar du bort den sista personen hamnar det i kön igen. Ett schemalagt uppdrag som ingen står på är inte schemalagt, så det går tillbaka till bokat och dyker upp i listan över arbete som fortfarande behöver placeras. Att låta statusen stå kvar hade dolt det, och kön hade tyst slutat vara fullständig.
Laget får besked när det finns något att ge besked om: aviseringen går ut med e-post och sms vid en genuint ny tilldelning, och bara när uppdraget har en dag på sig. Att tilldela samma person igen medan man drar ett uppdrag fram och tillbaka hela förmiddagen skickar ingenting, och ”du har ett uppdrag, vid ingen särskild tid” är precis den sorts meddelande som lär folk att strunta i nästa. Sms debiteras med 0,89 kr per styck.
Från arbetsorder till utfört jobb följer ett uppdrag genom hela livscykeln.
Kompetens, och vem som får ta uppdraget
”Anna kan värmepumparna” är ett faktum om din verksamhet som bor i ett huvud tills det är en rad i en tabell. Fritext på ett personalkort går inte att jämföra med någonting, så det är en tabell.
En kompetens är en namngiven sak. En person bär den, på en nivå från 1 till 5, eftersom ett schema som bara vet vem som är behörig inte kan föredra den som är bra på det. En tjänst i katalogen kräver noll eller flera av dem, och en tjänst som inte kräver någon är en som vem som helst kan utföra — vilket är normalfallet och inte får förväxlas med en som ingen kan utföra.
Därifrån går det att filtrera åt båda hållen medan du planerar: visa mig de som har den här kompetensen, visa mig de tjänster kompetensen krävs för.
Var tydlig med vad det här inte är. Kompetens är inte en femte konfliktkontroll. Schemat varnar dig inte för att du har skickat någon obehörig — de fyra kontrollerna är dubbelbokning, frånvaro, arbetstid och anställningsdatum, och det är hela listan. Matchningen är något du gör medan du väljer vem du drar in på uppdraget, inte något som fångar dig i efterhand. Är ett certifikat det du inte får ha fel om, filtrera först och gör det till morgonens första handling i stället för sista kontrollen före sparandet.
Frånvaro, semester och de timmar någon faktiskt arbetar
De timmar någon normalt är tillgänglig är en regel, inte en kalender: en veckodag, en starttid och en sluttid. ”Tisdagar, 07:00 till 16:00” överlever varje enskild tisdag.
Reglerna bär en giltighetsperiod, och det är detaljen som betyder något senare. När en tidrapport från mars ifrågasätts i juni finns regeln som gällde i mars kvar. Att ändra på plats hade lämnat dig att försvara ett schema mot timmar ingen arbetade under.
Frånvaro är något annat och går före veckoregeln. Fyra sorter — semester, sjukfrånvaro, ledighet och utbildning — registrerade som tidpunkter i stället för datum, eftersom en halv dag ledigt är normalfallet och en heldagsmarkering inte kan uttrycka ”går klockan två”. Överlappet är halvöppet, så en frånvaro som slutar 12:00 blockerar inte ett uppdrag som börjar 12:00. En frånvaro som är begärd men ännu inte beslutad ger fortfarande varningen; bara en avslagen ignoreras.
En medveten tystnad: den som inte har några arbetstidsregler alls varnas aldrig för att sakna dem. De flesta organisationer fyller aldrig i det här, och ett schema som varnade vid varje bokning är ett ingen läser.
Och en medveten gräns. Det här rapporterar; det räknar inte. Frånvaro och tider utanför de registrerade kommer tillbaka som varningar en människa läser. Ingenting här tolkar ert kollektivavtal, räknar dygnsvila eller får fram ett OB-tillägg. Det hör hemma i lönesystemet, och ett schemaprogram som låtsades annat hade haft fel på just det sätt ingen upptäcker förrän vid bokslutet.
Vad ett delat pass gör med en naiv konfliktkontroll
Här är buggen som tyst förstör konfliktkontroll, och den är värd att förstå eftersom nästan varje första implementation har den.
Någon har sin tisdag registrerad som två regler: 08:00 till 12:00 och 13:00 till 17:00. Det är lunch däremellan. Boka nu ett helt vanligt uppdrag från 09:00 till 15:00.
Den självklara kontrollen är: finns det någon enskild regel som rymmer bokningen? Ingen regel gör det. Förmiddagsregeln slutar tolv, eftermiddagsregeln börjar ett. Alltså rapporterar systemet en fullständigt normal dag som utanför arbetstid — och det gör det för varje heldagsuppdrag på den veckodagen, för den personen, för alltid. En varning som utlöses vid varje vanlig bokning är värre än ingen varning alls: planeraren slutar läsa dem, och dubbelbokningarna går olästa bredvid.
Rättningen är att fråga dagens regler tillsammans i stället för en i taget. Sortera dagens intervall, slå ihop två som skiljs åt av högst 60 minuter, och fråga sedan om det sammanslagna intervallet rymmer bokningen. 08:00–12:00 och 13:00–17:00 blir 08:00–17:00, uppdraget 09:00–15:00 ligger inuti, och ingenting rapporteras.
Sextio minuter för att det är så en svensk lunchrast registreras när någon över huvud taget registrerar en. Det är ett tröskelvärde, inte ett påstående om vad glappet var till för: ingenting vet vad någon gjorde mellan tolv och ett, bara att ett så kort glapp är långt mycket troligare lunch än ett andra pass.
Fallet som sammanslagningen finns för att bevara fungerar fortfarande. Tiderna 06:00–10:00 och 18:00–22:00 ligger åtta timmar isär, slås inte ihop, och en bokning på eftermiddagen rapporteras fortfarande som utanför dem. Det är ett verkligt delat pass, och att lägga ett uppdrag mitt i det är verkligen värt ett ord.
När ett löpande avtal slår att planera om varje vecka
Ungefär en tredjedel av arbetet i ett serviceföretag är samma arbete, för samma kund, i samma takt. Fönsterputs var fjärde torsdag. Pannservice var sjätte månad. Att planera in det för hand varje måndag är den sortens uppgift som aldrig är riktigt tillräckligt fel för att åtgärdas.
Ett avtal bär en kund, en mall för uppdraget och en återkomstregel, och skriver de uppdrag regeln innebär.
Regelspråket är avsiktligt litet. Dagligen, veckovis eller månadsvis; ett intervall; utpekade veckodagar; och antingen ett antal eller ett slutdatum. Allt utanför det — positionsangivna veckodagar, BYSETPOS, en vecka som börjar på söndag — vägras när du sparar regeln, med den del som inte förstods utpekad för dig. Den vägran är själva poängen. Återkomst är en stor specifikation med hörn där en trovärdig implementation tyst producerar fel dagar, och fel dagar här är ingen renderingsbugg: det är uppdrag som dyker upp på en tavla, tilldelas och körs till. 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 sex månaders bakåtdaterade uppdrag första gången den körs. Arbete ingen utförde är inte arbete, och en tavla full av försenade spöken är en tavla ingen litar på.
Den skriver fram till en horisont ni sätter. En framförhållning mellan 1 och 120 dagar avgör hur långt fram uppdragen syns, och avtalets eget slutdatum sätter taket: ett avtal som tar slut i mars har inte april på tavlan i februari.
En förekomst skrivs en gång. Inte genom att kontrollera först — genom en unik nyckel på avtalet och datumet, vilket är det som håller när den nattliga körningen och någon som trycker ”generera nu” går omlott. Ett avbokat besök räknas som skrivet: den som avbokade nästa tisdag menade det, och att låta generatorn lägga tillbaka det morgonen därpå är precis det beteende som lär ett kontor att sluta använda schemat.
Pausa, radera inte. En kund som gör uppehåll över sommaren vill ha tillbaka samma regel i september, och en radering hade kapat länken från varje uppdrag den någonsin skrev.
Veckor börjar på måndag genomgående — i expansionen, på schematavlan och i rapporterna. En körning av ett avtal skriver högst 200 uppdrag, vilket är en feltryckt framförhållning snarare än ett avtal någon har ingått.
Läs fördjupningarna
- Schemaläggning
Schemaläggning för svenska serviceföretag
Fem till femtio personer i fält, en vecka som ändras två gånger om dagen, och ett kalkylblad som grenar sig i samma sekund två personer öppnar det. Det här måste ett schema bära innan det kan bära en vecka.
- Schemaläggning
Så uppstår en dubbelbokning
Två bilar på samma adress är aldrig ett misstag. Det är tre, och de sker i en bestämd ordning. Här är kedjan, och de fyra kontroller som bryter den.
- Schemaläggning
En arbetsorder från accepterad offert till attesterad tid
Sex tillstånd, ett av dem oåterkalleligt, och ett avslut som måste överleva en stapel täckning. Vad en arbetsorder bär, vad den vägrar, och var den automatiska delen ärligt talat inte är byggd än.
- Schemaläggning
Ruttplanering för fem bilar
Ruttoptimering är inte byggd, och vi tänker inte låtsas annat. Så här planerar små lag geografi för hand, och de delar av systemet som gör det till mindre av en gissning.
- Schemaläggning
Ett schema som öppnar i en källare
Offline är inte en funktion. Det är fyra skilda beslut om cache, kö, ordning och fel — och ett av dem är en vägran att cacha något alls.
Vanliga frågor
Kan systemet hindra mig från att dubbelboka någon?
Det avbryter dig en gång och släpper sedan fram dig. En dubbelbokning eller ett datum utanför anställningen kommer tillbaka som ett fel med uppdraget det krockade med; du kan bekräfta och spara ändå. Frånvaro och arbetstid är varningar som aldrig blockerar och som följer med det sparade uppdraget. Planeraren vet regelbundet något systemet inte vet — att kunden flyttat tiden, att de två adresserna ligger i samma trappuppgång.
Varnar det om jag skickar någon som inte är behörig?
Nej. Kompetenser är en tabell med nivåer, tjänster bär de kompetenser de kräver, och du kan filtrera personal på kompetens medan du planerar — men kompetens är inte en av de fyra konfliktkontrollerna, och ingenting fångar dig i efterhand. Är ett certifikat det ni inte får ha fel om: filtrera innan ni drar, i stället för att lita på en varning som inte kommer.
Hanterar det kollektivavtal, dygnsvila och OB?
Nej, och det ska inte låtsas göra det. Det rapporterar frånvaro och bokningar utanför de arbetstider ni har registrerat, som varningar för en människa att läsa. Det tolkar inget kollektivavtal, räknar ingen dygnsvila och tar inte fram något OB-tillägg. Övertid är en sorts tid någon rapporterar, inte något systemet härleder. Lönen räknas i ert lönesystem.
Planerar det körrutten?
Nej. Ruttoptimering står på färdplanen och finns inte i produkten, på någon nivå. Det som finns i dag: uppdraget bär sin egen tidsuppskattning, och kundens tidigaste och senaste starttid ligger skilda från själva planen. Restid rapporteras som en egen sorts tid som faktureras som restidsrad och aldrig bär ROT eller RUT.
Vilka återkomstregler fungerar egentligen?
Dagligen, veckovis och månadsvis, med intervall, med utpekade veckodagar, och med antingen ett antal förekomster eller ett slutdatum. Allt annat vägras i det ögonblick regeln sparas, med den del som inte förstods utpekad, i stället för att accepteras och expanderas fel flera månader senare. Veckor börjar på måndag.
Får personalen besked när de läggs på ett uppdrag?
Med e-post och sms, när tilldelningen är ny och uppdraget har en dag på sig. Att tilldela samma person igen medan man drar ett uppdrag fram och tillbaka skickar ingenting, och ett uppdrag utan datum är ingen nyhet någon kan agera på. Sms debiteras per meddelande med 0,89 kr.
Se tavlan med er egen vecka på
Tjugo minuter, era uppdrag, er personal. Bokning & schema kostar från 449 kr i månaden plus 45 kr per användare, säljs fristående och har 14 dagars prova-på.