Журнал сеньора вайбкодера уроки из опыта, заметки и инсайты

Личный публичный архив мыслей: оформленные как уроки наблюдения, рефлексия, идеи и недельные сводки.

RSS
← Назад к ленте

Бюджет времени: почему я заставил свой таск-менеджер говорить «стоп»

Бюджет времени в TaskFlow — каскадное переполнение

Я смотрел на свой TaskFlow и видел проблему. Задачи кладутся на день без ограничений. 20 задач на среду? Ну 20. Поле «важность» не помогает — всё важное. Поле «срочно» тоже — всё срочное. Календарь сбоку показывает список, но не даёт понять, реалистичен ли план.

Таск-менеджер должен не только хранить задачи. Он должен говорить: стоп, на сегодня не влезет. И показывать, что будет завтра, если не влезет сегодня.

Проблема

Большинство таск-менеджеров работают как список. Todoist молча покажет 30 задач на сегодня. TickTick включит помидор, но не скажет «на сегодня не влезет». Things 3 красиво группирует, но не считает часы. Linear и Jira показывают workload на уровне спринта, но не на конкретный день.

Sunsama ближе всех к теме. У них есть planned/actual times, daily shutdown, «realistic workload». Но это подсказка, а не механика. Sunsama скажет: «вы запланировали 8 часов, а обычно справляетесь с 5». Но он не покажет, что произойдёт с вашей неделей, если вы эти 8 часов не сделаете.

Motion пытается решить проблему через AI — сам раскидывает задачи по календарю. Но пользователь не видит механику, не контролирует переполнение. AI решает за тебя, что перенести.

Мне нужен был другой подход. Не подсказка, не AI-диспетчер — а инструмент, который делает нагрузку видимой и честной.

Что я хотел

Не просто трекер времени, а инструмент планирования. Чтобы я видел:

  • Вот 6 часов бюджета на день.
  • Вот задачи на 8 часов.
  • 2 часа переходят на завтра долгом.
  • А завтра у меня тоже бюджет 6 часов, но уже с 2 часами долга — значит реально доступно 4.
  • И это видно сразу, не после того, как я провалил план.

По сути — финансовый бюджет, только со временем. Доход = бюджет дня. Расходы = задачи. Долг переносится на следующий период. Если ты не укладываешься сегодня — завтра платишь.

Как устроен бюджет

Каждая задача в TaskFlow теперь может иметь оценку в часах. Не в абстрактных story points, не в «маленькая/средняя/большая» — в конкретных часах. 1 час, 2 часа, 4. Число, которое можно сложить с другими числами и сравнить с бюджетом.

У каждого дня есть бюджет. По умолчанию — 6 часов на будние, 0 на выходные. Но это шаблон, который можно переопределить. Четверг перед отпуском? Ставлю бюджет 0. Суббота, надо поработать? Ставлю 4. Шаблон недели + точечные оверрайды.

Визуально это выглядит как прогресс-бар сбоку от дня. Зелёный — есть запас. Жёлтый — впритык. Красный — перегруз. Число сверху: «4/6ч» — четыре часа задач при бюджете шесть. Всё понятно за секунду.

Ввод часов сделан пресетами: 1, 2, 3, 4, 6, 8. Не надо думать, задача на 2.5 часа или на 3. Мозг быстрее выбирает из шести вариантов, чем печатает число.

Каскадное переполнение

Это главная фишка. И её нет ни в одном популярном таск-менеджере, который я нашёл.

Если сумма задач на день + долг с прошлого дня превышает бюджет — разница переходит на следующий день. Тот день тоже проверяется. Если он тоже перегружен — остаток идёт дальше. Долг каскадирует вперёд, пока его не «поглотит» день с резервом.

Пример. Понедельник: бюджет 6ч, задач на 8. Долг 2ч → вторник. Вторник: бюджет 6ч, своих задач на 5, плюс долг 2. Итого 7 при бюджете 6 — перегруз 1ч → среда. Среда: бюджет 6ч, задач на 3, плюс долг 1. Итого 4 при бюджете 6. Всё, долг поглощён. Среда свободна.

Это видно в календаре. Красный понедельник → жёлтый вторник → зелёная среда. Ты видишь последствия решений до того, как их примешь. «Ага, если я запланирую эту задачу на понедельник — среда тоже покраснеет. Может, лучше на среду?»

Почему каскад, а не просто перенос

Простой перенос — это Sunsama: не успел сегодня, задача переходит на завтра. Но завтра ты уже забыл, что вчера тоже не успел. Накопление незаметно.

Каскад делает накопление видимым. Долг — не просто отложенная задача, а числовая величина, которая складывается с новыми задачами и растёт. Как кредитная карта. Минимальный платёж не гасит тело долга, и через месяц ты обнаруживаешь, что должен в три раза больше.

Когда ты видишь, что 2 часа перегруза сегодня отразятся на четверге — ты принимаешь другое решение уже сейчас. Не «завтра разберусь», а «давайте я лучше сегодня откажусь от этой задачи, чтобы не загнать четверг в красное».

Что на рынке — и почему каскада нет

Я основательно копнул тему. Проверил Sunsama, Motion, Akiflux, TickTick, Todoist, Things, OmniFocus, Sorted³, Fantastical, Amie, BeforeSunset, Height, Linear, Taskwarrior, org-mode, Notion — и академические статьи по time management. Подход с каскадным часовым долгом нигде не реализован.

Отдельные части — да. Бюджет дня есть у Sunsama. Оценка в часах — у Motion. Перенос задач — у TickTick. Но везде перенос работает как «задача не сделана → переезжает на завтра». Бинарно. Сделал/не сделал.

Каскадный долг — это не перенос задачи. Это числовая величина, которая складывается с завтрашними задачами и течёт вперёд, пока не поглотится. Разница примерно как между «у меня не достало денег на покупку» и «у меня кредит с процентами, который съедает следующий месяц». Первое — неприятно. Второе — заставляет думать заранее.

Вот что есть на рынке по частям:

Timeboxing (Sunsama, Akiflux). Каждой задаче — слот в календаре. Жёсткая граница времени. Не планируешь — не делаешь. Работает, но требует дисциплины планирования, которую я не всегда имею.

Авторасписание (Motion, Reclaim.ai). AI сам раскидывает задачи по календарю. Удобно, но ты отдаёшь контроль. Не понимаешь, почему AI перенёс задачу на четверг, а не на среду.

Pomodoro (TickTick, Forest). Задача = несколько «помидоров» по 25 минут. Фокус на процессе, не на плане.

GTD (Todoist, Things). Захвати → обработай → организуй → делай. Нет оценки времени. Задачи — список, не бюджет.

Спринты и доски (Jira, Linear). Оценка в story points. Workload виден на уровне спринта, не дня. Командный инструмент, не личный.

Ни один — ни один! — не считает часовой долг, который каскадирует вперёд. TaskFlow считает.

Реализация

Я вайбкодил эту фичу за один день. TaskFlow — мой пет-проект, написанный с помощью AI. 45 коммитов, 53 файла, около 7000 строк изменений. Версия 1.6.0.

Архитектура простая. Тип DayBudgetTemplate — бюджет по дням недели. Тип DayBudgetOverride — точечное переопределение на конкретную дату. Функция calculateBalance — каскадный расчёт: проход от текущего дня вперёд, накопление долга, проверка бюджета каждого дня.

UI — компонент DayBudgetBar: полоска с числами, цвет зависит от загрузки. И HoursInput: шесть пресетов вместо свободного ввода. Всё работает в реальном времени — перетащил задачу на другой день, бюджет пересчитался.

Вывод

Бюджет времени — это не про дисциплину. Это про осознанность. Когда ты видишь, что перегруз сегодня съест завтрашний бюджет — ты выбираешь иначе. Когда ты видишь каскад долга, который дотянется до пятницы — ты либо отказываешься от задачи, либо принимаешь последствия.

Таск-менеджер должен не только хранить задачи. Он должен показывать, влезают ли они в жизнь. TaskFlow теперь показывает.