Почему это хаос-менеджмент планировщик, а не просто планировщик задач.
SingularityApp. Что такого космического в нашем планировщике, помимо дизайна
Сибирикс

SingularityApp

Что такого космического в нашем хаос-менеджмент планировщике, помимо дизайна
«Неважно, куда вы записываете свои задачи», — говорил Максим Дорофеев в «Джедайских техниках». Помните? Главное, чтобы это была не голова и чтобы вы доверяли этой системе. Так вот. Отгадайте, куда свои задачи с недавних пор записывает он сам? Да, да, да, да, да, черт возьми! В наш SingularityApp!

Мы разработали планировщик, на который перешел автор книг, тренингов и YouTube-канала о личной эффективности. Это примерно как собрать спорткар, вручить ключи от него известному гонщику, сказать что-нибудь вроде «Надеемся, вам понравится» — и после тест-драйва получить фидбэк в виде чека. Кайф.

Возможности

С самого первого анонса мы позиционируем SingularityApp как хаос-менеджмент планировщик, а не как планировщик задач, таск-менеджер или todo-лист. И это в нас говорит не снобизм. Хотите просто фиксировать, когда у вас следующая тренировка и что купить по дороге домой — пожалуйста.

В SingularityApp есть для этого всё: чек-листы, теги, напоминания, возможность поставить задачу на повтор. Но мы действительно замахнулись на большее — сделать мощный, начиненный крутыми фичами софт для выживания в хаосе (это когда тебя разрывает между бесконечными «надо» и «хочу» и ты не знаешь, за что хвататься и как всё успеть).

И тут неважно, что именно вы практикуете — джедайские техники Дорофеева, GTD Дэвида Аллена, управленческое планирование Фридмана, эссенциализм МакКеона. Всё равно, если когда-нибудь эти парни соберутся на общий слёт и подерутся, то точно не из-за фундаментальных принципов личной эффективности. В них они не противоречат друг другу. А в переводе с языка коучей на язык разработчиков эти принципы звучат так:
На языке коучей


Головой нужно думать, а задачи лучше хранить во внешней системе — это должен быть инструмент, который всегда под рукой.

На языке разработчиков


  • Поддержка популярными OC;
  • Облачная синхронизация;
  • Распечатка и распознавание;
  • Виджет быстрой постановки задач.

Задачи мало собрать в одном месте — их нужно еще регулярно обозревать, актуализировать и брать в работу.
  • Режим проверки;
  • Работа в двух окнах;
  • Напоминания;
  • Виджет списка дел.

Задачи нужно декомпозировать на четкие шаги и формулировать так, чтобы даже человек, который находится не в контексте, понимал, что нужно сделать.
  • Бесконечная иерархия задач, проектов, тегов;
  • Неограниченное количество символов в названии и описании задачи;
  • Чек-листы;
  • Теги.

Задачи нужно доводить до конца, а для этого — как можно меньше переключаться на отвлекающие факторы.
  • Режим фокуса;
  • Помодоро;
  • Рекурсии;
  • Лонгтап для быстрого доступа к папкам и функциям приложения.

В SingularityApp есть это всё и гораздо больше

планировщик задач

Поддержка популярными операционными системами. Облачная синхронизация. Распечатка и распознавание

В разработке хаос-менеджмент планировщика есть одна особенность — такое приложение нельзя выпускать поэтапно: сначала для одной OC, потом для другой и т. д. Иначе это станет серьезным барьером для его использования.

У человека должна быть возможность утром открыть приложение, скажем, на маке, и освежить план на день, потом по дороге на работу ответить на звонок и создать новую задачу уже на айфоне, на работе чекать задачи на винде и т. д. И эти изменения, разумеется, должны синхронизироваться на всех устройствах.

Поэтому разработка шла в четырех параллельных потоках: начали с десктопа и промосайта, а на определенном этапе подключили PWA и кроссплатформенное мобильное приложение.
планировщик задач
И только когда отладили приложение на всех устройствах и синхронизировали его с облаком, выпустили бета-версию.

Тут же оказалось, что у нас для облака избыточно спроектирована структура данных и из-за этого есть проблемы со связями между объектами. Заново переписали структуру, но у SingularityApp уже были первые пользователи и мы не могли им просто сказать: «Ребят, извините, у нас теперь структура покруче, а ваши данные накрылись». Поэтому сделали одновременную поддержку старой версии структуры и новой, а пользователи уже сами решали, обновляться им или нет.

Теперь SingularityApp исправно синхронизировался на всех устройствах, но нам этого было мало — мы хотели в какой-то мере вообще преодолеть его зависимость от гаджетов. Реализовали такую фичу — распечатываешь план на сегодня из SingularityApp и дальше хоть весь день сиди на цифровой диете и не прикасайся ни к одному устройству. Просто отмечай на распечатке, какие задачи выполнил (галочками), какие не выполнил (крестиками), какие выполнил частично (точечками), какие перенес на следующий день (стрелочками). Вечером откроешь камеру в SingularityApp, сфотографируешь распечатку — и все статусы перенесутся в приложение.

Провернули эту штуку сначала на TensorFlow и нейронных сетях, но символы то распознавались некорректно, то не распознавались вообще. В итоге переделали всё на OpenCV, остались довольны.
планировщик задач

Бесконечная иерархия задач, проектов и тегов

В SingularityApp есть папка «Входящие» — сюда удобно вносить задачи, как только они приходят в голову, быстро и не раздумывая над формулировками. «Барбершопы в Телеграме»? Ок. Так и записываем. Но оставлять задачу в таком виде можно только до разбора «Входящих», иначе она будет прокрастинироваться месяцами, просто потому, что сформулирована в очень общих чертах и непонятно, с какой стороны к ней подойти.

Поэтому, когда переносим ее из папки «Входящие» в нужный проект, сразу подробно расписываем и декомпозируем на четкие шаги. В итоге получаем дерево с подзадачами на семи уровнях — видим весь флоу, оцениваем объем работы, расставляем даты и устанавливаем крайний срок.
планировщик задач
Вот так разгуляться нельзя больше ни в одном планировщике — у каждого из них есть ограничения: только N уровней в деревьях, X символов в названиях, Y задач и Z проектов в принципе. Мы избежали этого. В SingularityApp можно создавать бесконечно много задач, проектов и тегов, с неограниченным количеством уровней внутри и такими длинными названиями и описаниями, какие только не лень набрать.

При этом у нас деревья отлично ладят с драг-энд-дропом и умеют с его помощью разбираться и собираться. То есть можно создать дерево с 15 уровнями, а потом взять мышкой седьмую ветку и вытащить ее на первый уровень. Эта ветка со всеми подзадачами станет отдельным деревом. В итоге у нас будет 2 дерева: первое с шестью уровнями, второе с девятью.

Чтобы всё это работало без осечек, писали автотесты и покрывали ими разные кейсы:

  • А что, если мы удалим сначала дочернюю задачу, потом — родительскую, а потом восстановим их из корзины? Как они восстановятся?
     
  • А что, если у нас родительская задача назначена на пятницу, а дочерняя — на понедельник? Как они будут выводиться в папке «Планы»?
     
  • А что, если мы сделаем родительскую задачу рекурсивной? И т.д.

Тесты делали интеграционные — с имитацией поведения пользователя. Как будто он прям открывает приложение и, например, драг-энд-дропом перетаскивает какое-то дерево задач к закрепленной задаче вверху проекта. Это только один сценарий. А их было около 1500. Работало это все медленно. Долго ждали каждый коммит на проверке. В итоге построили ферму из четырех серверов, чтобы они у нас проверяли коммиты.

Режим проверки. Работа в двух окнах. Напоминания

Когда декомпозируешь на совесть, планировщик забивается таким количеством проектов и задач, что в какой-то момент просто теряешь над ними контроль. В итоге планы копятся, а дела не делаются.

Чтобы до дестроя не доходило, мы разработали в SingularityApp режим проверки проектов. Устанавливаешь для каждого проекта интервал, с которым готов его проверять: неделя, две, месяц, полгода. И теперь раз в несколько дней переводишь приложение в этот режим — просто нажимаешь на дымящуюся чашечку кофе в верхнем тулбаре. В режиме все проекты маркируются: зелеными точками — те, у которых ещё не подошла дата проверки, красными — те, которые пора проверять.
планировщик задач
Проверить проект — значит удалить из него неактуальные задачи, отредактировать актуальные, создать новые, установить задачам даты.

Отдельно писали и отлаживали межоконное взаимодействие, поэтому какие-то вещи можно делать сразу в нескольких окнах. Это удобно, в том числе когда проверяешь проекты. В одном окне открываешь сам проект. В другом — папку «Планы». В третьем — корзину. И раскидываешь мышкой задачи между окнами. Перетащил задачу в корзину — она удалилась из проекта. Перетащил в папку «Планы» на какой-то день — она и в папке «Планы» появилась, и в проекте осталась, только стала отображаться вместе с датой.

Если это задача из разряда «подождите, мне надо подготовиться», для нее можно установить напоминание — чтобы в назначенный момент (за день, час, 30, 15, 5 минут) операционная система сообщила, что задача приближается. На этапе разработки эта фича заставила нас понервничать — нужно было завязаться на механизме каждой операционной системы, а у них у всех свои особенности, прихоти и настроение.

На андроиде и iOS, например, если по умолчанию включен режим энергосбережения, подавляется фоновая активность приложений. При этом каждый андроид в этом случае ведет себя по-своему: Sumsung так, Xiaomi по-другому — и попробуй найди универсальное решение. В итоге мы пришли к тому, что когда пользователь запускает SingularityApp в первый раз после установки, приложение просит его убрать все ограничения по настройкам уведомлений и энергопотреблению, иначе, говорит, могут быть проблемы с напоминаниями.
планировщик задач

Помодоро. Режим Фокуса. Рекурсии

При словах «отвлекающие факторы» в сознании всплывает всем известный набор: социальные сети, мессенджеры, телефонные разговоры, кофе-чай, музыка.

Чтобы увеличить сопротивление этим соблазнам, мы прямо в SingularityApp внедрили помодоро — таймер, в котором можно задать интервалы для работы и отдыха: «Сейчас я 25 минут буду выполнять задачу, а потом 5 минут поговорю по телефону, потом снова 25 минут сконцентрируюсь на задаче, а после этого 5 минут попью чай». Несмотря на то что эта фича крута настолько, что увеличивает производительность в разы, в ее разработке самым сложным оказалось подобрать музыку для сигнала таймера.
планировщик задач
В какой-то момент не менее опасным отвлекающим фактором становится сам планировщик — серфить в нем так же увлекательно, как в гугле. Перешел с задачи на задачу, с проекта на проект, там дату подправил, там тег добавил, смотришь — а уже 14:20, а не 14:00.

Решили бороться с проблемой с помощью режима фокуса. Это работает так: выделяешь проект, на котором хочешь сконцентрироваться, переходишь в режим фокуса — и все проекты исчезают, остается только выделенный. Теперь, даже если зайти в какую-то системную папку, например, в «Планы», в ней не будет никаких задач, кроме задач этого проекта.
планировщик задач
Мы вообще за то, чтобы в SingularityApp как можно меньше времени уходило на организацию задач и как можно больше оставалось на их выполнение. Разработали, например, подробные шаблоны для повтора задач. В них один раз задаешь какое-то условие — «повторять каждый месяц третьего и десятого числа в 15:00» или «повторять каждый год в первую субботу июня и последний четверг декабря» — и дальше SingularityApp сам по этим шаблонам создает задачи.

При этом, когда пользователь настраивает повтор, он просто выбирает в предложенных ячейках значения: 1 нед; Вт; 11:00. А рядом, в сводке, SingularityApp синхронно переводит всё это в понятное предложение: «Повторять каждую неделю по вторникам в 11:00. Следующий раз: завтра, 28 июля, 4 августа». В написании и отладке этой фичи самым сложным было как раз научить приложение говорить вот таким человеческим языком, используя слова «завтра», «послезавтра», «через три дня».
планировщик задач

В итоге

Зимой мы выпустили релиз — и сразу взяли гран-при как «Золотой сайт» и «Золотое приложение» в ключевом и старейшем в Рунете конкурсе интернет-проектов.

Весной выкатили апдейт, появилась возможность импорта из других планировщиков — и Максим Дорофеев, специалист по продуктивности, перенёс в SingularityApp свои задачи и проекты.

Эти достижения тем более ценны и приятны, что сама разработка SingularityApp — в какой-то мере вызов тому, как создаются приложения. Мы не исследовали рынок, не искали подтверждений, что есть запрос на подобное ПО, не анализировали целевую аудиторию.
Владимир Завертайлов
Владимир Завертайлов
CEO & Founder «Сибирикс»
Прототип SingularityApp складывался естественным образом в течение многих лет. Ты просто в силу специфики профессии пытаешься как-то удержать под контролем огромное количество задач, экспериментируешь с софтом, пробуешь всё, что есть на рынке, тут отмечаешь: «О, это прикольно», там: «А вот это можно было сделать лучше» — и так лет 15, а на шестнадцатый садишься, отрисовываешь уже сложившийся в сознании прототип, собираешь команду и говоришь: «Котят, сейчас мы с вами будем делать огонь».

И тебе в кайф. И команде в кайф. И жюри в кайф. И Дорофееву в кайф. И вам, мы надеемся, тоже будет в кайф.
планировщик задач

Готовый проект