SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

Возможности

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

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

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

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

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

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

Проверить проект — значит удалить из него неактуальные задачи, отредактировать актуальные, создать новые, установить задачам даты.

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

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

В какой-то момент не менее опасным отвлекающим фактором становится сам планировщик — серфить в нем так же увлекательно, как в гугле. Перешел с задачи на задачу, с проекта на проект, там дату подправил, там тег добавил, смотришь — а уже 14:20, а не 14:00.

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

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

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

SingularityApp. Что такого космического в нашем планировщике, помимо дизайна

В итоге

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

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

Эти достижения тем более ценны и приятны, что сама разработка SingularityApp — в какой-то мере вызов тому, как создаются приложения. Мы не исследовали рынок, не искали подтверждений, что есть запрос на подобное ПО, не анализировали целевую аудиторию.

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

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

Владимир Завертайлов, CEO & Founder «Сибирикс»
1717
14 комментариев

Хотел перейти с TickTick на это, так как по описанию привлекли некоторые штуки. Но в тиктике уже куча задач, поэтому просто бросить я его не собирался. В нем есть экспорт, в CSV. А в Сингулярити есть импорт из CSV. Отлично, подумал я, всё пройдет хорошо (нет). И вот с чем я столкнулся:
1. Сингулярити требует разделителем запятую. Я понимаю, конечно, что COMMA SEPARATED VALUES, но запятая это реально не практично, ввиду того, что их дофига может быть в самих текстах задач. Точка с запятой были бы реально удобнее, при том, что например Excel именно так и сохраняет по умолчанию (такой разделитель в Windows в региональных настройках)
2. Если импорт не удачный, то тебе просто сообщается, что "Формат неверен", ни словечка о том, на чем он споткнулся, даже лог приложения в AppData\Roaming\SingularityApp молчит.

В итоге импорт превращается в итерационный процесс:
1. Попробовал импортировать -> Нет успеха
2. Почитал еще раз wiki
3. Посмотрел файл, попытался понять что не понравилось, внести правки и снова на пункт 1.

Так после 15 неуспешных попыток я понял, что трансфер пользователей из других систем сингулярку судя по всему не очень волнует, если процесс импорта превращен в такой ад.
Давно приложение у меня не развивало такую ненависть, просто чувствуешь себя идиотом каким-то.

Жаль, продолжу использовать ТикТик. Прощай сингулярка, наша встреча так и не началась.

3

Блин. Только хотел поискать как перенести...

Но вот что больше меня беспокоит: Как настроить приложение для Windows 10 x64?

1. Как сделать так чтобы приложение автостартовало как служба Windows (как это сделано в LeaderTask)

2. Как сделать так чтобы приложение при автостарте, запускалось в свернутом виде, иконкой рядом с часами?

3. Как сворачивать приложение не в панель задач Windows а в область значков рядом с часами по кнопке свернуть приложение ?

4. Почему этих 3х САМЫХ востребованных функций у пользователей Windows нет в настройках программы ?

5. Когда они появятся ?

6. Зачем в названии вашего приложения присутсвует префикс App ? Неужели не ясно что это приложение ?

PS: Устаревшие методы типа создайте .bat файл или поместите ярлык в папку Автозагрузки прошу не предлагать, на дворе 21й век и эти методы для Win 95 использовались. Тут же тупо даже автостарта через ключ реестра нет... Если уж делать нормальное приложение планировщик то оно должно запускать как СЛУЖБА при запуске системы! И уж точно должно уметь сворачиваться не только в панель задач, но и в трей рядом с часами Windows... как это сделано у Всех конкурирующих продуктов. Даже в MacOS все эти функции есть... Зачем Windows то обделили ???

1

Белая  тема у вас неудачная и шрифты несколько тонковаты, а так удачи вам в дальнейшей разработке.

1

Да обе неудачные.
Визуально красиво, но почему-то текут глаза при использовании.
В тиктике норм обе темы, тут почему-то никак, через силу.

Шрифт не только тонкий, но ещё и мелкий.
Не нашёл настройки размера.
Мне тяжко и приходится на 13" маке напрягаться :(

"Мы не исследовали рынок, не искали подтверждений,"   
      Это заметно!  Тех кому дорого things 3, которое вы пытались скопировать, не заманишь бесплатным доступом к жалкому подобию. Сложными конструкциями и повторами такая категория людей не пользуется.
А так интересно конечно, как у вас "складывался естественным образом в течение многих лет" - топорный клон разных кусков из топовых задачников.

1

Ну тут поспорю с автором поста, это первое приложение на уровне things 3 доступное на платформе Windows. И удобное и красивое. Ваш: things 3 или Fantastical или OmniFocus очень круты, но блин их ни одного нет под Windows...