Всеки, който е попълвал отчет за времето, познава петъчния следобед. Гледате седмица, в която със сигурност сте работили, и се опитвате да си спомните кое беше миграцията и кое беше грешката, която ви изяде вторника. Часовете са отработени. Никой обаче не е записал за коя задача са, защото за това трябваше да спрете работа и да натиснете бутон.
TimerOS отчита часовете автоматично от самото начало. Досега обаче не можеше да каже за какво са отишли. От v1.3 настолното приложение съпоставя отчетеното време с отворените ви задачи още докато работите, и то на собствения ви компютър. Ето по какво преценява и кога нарочно се въздържа.
Защо гадаенето е истинският риск
Очевидното решение е системата да види какво има на екрана, да намери задачата с най-близко име и да запише времето към нея. На демонстрация изглежда чудесно, но на практика вреди, защото отчет, верен на 80%, е по-лош от отчет, попълнен на 60%. Грешните 20% изглеждат точно като верните редове. Тогава или проверявате всичко, а това отнема повече време от самото попълване, или фактурирате на клиент работа по друга поръчка.
Грешното записване струва повече от липсващото, защото не се вижда.
Затова съпоставянето е предпазливо по замисъл. Не записва нищо без сериозни основания, а когато ги няма, времето остава продуктивно, но неразпределено. Приложението приема това за нормален резултат и не ви натяква за него.
Какво всъщност чете
Във v1.3 само едно: заглавието на прозореца, който гледате. Името на приложението и адресът в браузъра не се използват. Те помагат само да се определи дали сте продуктивни, или неактивни, и не влияят на избора на задача. Кодът за оценяване получава адреса, но нарочно не го използва.
Заглавието се разделя на думи и се сравнява с думите от отворените ви задачи и подзадачи. Думите от името на задачата се броят изцяло, а тези от описанието ѝ получават тежест 40% и могат само да повишат резултата, но не и да го понижат. Редките думи тежат повече от честите, а около 130 общоупотребими английски думи (fix, bug, update, task) не се броят изобщо. Затова при „Fix login bug“ и „Fix export bug“ решават думите, които наистина се различават.
Какво трябва да изпълни едно съвпадение
Преди да се запише каквото и да е, задачата кандидат трябва да изпълни всички тези условия:
- Две съвпадащи думи или една уникална. Една обща дума никога не стига. Единична дума стига само ако се среща в точно една задача от целия ви списък, затова номерата на заявките вършат работа.
- Резултат поне 0,45. Това е делът от думите в името на задачата, които се откриват в заглавието на прозореца, като редките думи тежат повече.
- Преднина от 0,15 пред втория. Ако разликата между две сходни задачи е по-малка, приложението не записва нищо, вместо да избере едната напосоки.
- Шейсет секунди без колебание. Една и съща задача трябва да печели всяка проверка в продължение на цяла минута, преди да получи първото си записване. Петнайсет секунди в друг прозорец не стигат за никакво записване.
Още два фактора
Думите сами по себе си не казват какво вече знаете за работата, затова още два фактора коригират резултата. Задача със статус „В процес“ получава с една четвърт повече тежест. Има значение и графикът: задача, по която работите в рамките на планираните ѝ дати, получава малък бонус, а ако започва след повече от седмица или е просрочена с повече от две седмици, тежестта ѝ пада до 60%. Датата идва от същия надежден часовник, който използват смените, така че промяната на часовата зона на компютъра ви не ѝ влияе.
Кога да остане на задачата и кога да я пусне
Другата половина от проблема е стабилността. Ако съпоставянето променя решението си на всеки пет секунди, денят се нарязва на хиляди парчета. Получава се подробна, но безполезна картина.
Затова веднъж избраната задача се задържа. Друга задача трябва да я изпреварва непрекъснато цели две минути, преди записването да премине към нея. Така бърз поглед към друга заявка не разбива блока, в който работите. Ако трийсет минути няма ново потвърждение, задържането изтича. Задача, която сте приключили в единайсет, няма да трупа часове цял следобед.
Има и втори начин. Ако задача, инцидент или заявка за промяна стои отворена в самия TimerOS двайсет секунди, това се брои направо. Тук няма какво да се гадае: пред вас е самият запис. Само така към инцидентите и заявките за промяна изобщо се записва време.
Какво излиза от компютъра ви
Всичко описано дотук протича на вашия компютър, в настолното приложение, написано на Rust. Списъкът с думи се съставя от възложената ви работа, а оценяването и изборът на задача също стават там.
Синхронизира се само списък с идентификатори на задачи и брой секунди за всяка, в същия формат като останалите часове от деня. Заглавията на прозорците никога не се изпращат: приложението ги чете локално и синхронизира само резултата. Същото важи и за определянето на продуктивно и неактивно време, за което сме писали отделно.
Описаното тук съпоставяне не е AI. Няма модел, няма сървър за изчисления, няма нищо, което да изисква видеокарта. Това е фиксирана формула за оценяване: едни и същи данни винаги дават един и същ резултат, независимо дали режимът на проследяване е „Автоматичен“, или „Само правила“. Затова можем да публикуваме точните прагове, а вие можете да предвидите решенията му.
По какво това се различава от автоматичното отчитане другаде
Записването на активност във фонов режим не е нещо ново. И Toggl Track, и Clockify го правят без пуснат таймер. Разликата е в онова, което получавате накрая.
Нито един от двата подхода не е категорично по-добър. „Записване и преглед“ никога не записва грешно, защото изобщо не записва към задачи; работата остава за вас в петък. Съпоставянето прехвърля тази работа на компютъра и приема, че понякога ще сгреши. Затова панелът за преглед и възможността за отмяна са по-важни от самото съпоставяне.
Какво нарочно не направихме
- Без резервно записване към проекта. Когато първата версия не можеше да разпознае задача, записваше времето към проекта. Премахнахме това пет часа по-късно, във v1.3.1. „Малко време, горе-долу на верния проект“ изглежда правдоподобно и точно това прави отчета ненадежден.
- Без натякване. Редът „Неразпределено“ показва времето, което не е съпоставено с никоя задача, и ако искате, можете да го разпределите с едно натискане. Не светва в червено и не ви напомня постоянно.
- Без скрито презаписване. Часовете по задача идват само от отчетено време. От v1.15.0 вече не можете да ги замените с ръчно въведено число.
- Фактурирането нарочно дойде по-късно. Грешното записване става грешна фактура, затова разпределените часове не влизаха във фактури, докато съпоставянето беше ново. От v1.15.0 фактурите по отработено време включват отчетените часове по всяка задача, така че преди да фактурирате, прегледайте разпределеното време.
Никога не сме целели отчет, който се попълва сам и безупречно. Искахме да заменим припомнянето с проверка. Списък се проверява за две минути в петък, а вторника така или иначе нямаше да си спомните.