{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

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

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

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

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

Возможности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На андроиде и iOS, например, если по умолчанию включен режим энергосбережения, подавляется фоновая активность приложений. При этом каждый андроид в этом случае ведет себя по-своему: Samsung так, 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 — в какой-то мере вызов тому, как создаются приложения. Мы не исследовали рынок, не искали подтверждений, что есть запрос на подобное ПО, не анализировали целевую аудиторию.

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

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

Владимир Завертайлов, CEO & Founder «Сибирикс»
0
14 комментариев
Написать комментарий...
Sergey Grabak

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

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

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

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

Ответить
Развернуть ветку
Сергей Алексейчиков

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

Ответить
Развернуть ветку
vitexeon mr.

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

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

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

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

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

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

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

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

Ответить
Развернуть ветку
Anatoly Ivanov

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

Ответить
Развернуть ветку
Сергей Алексейчиков

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

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Vladimir Zavertaylov

В планах на разработку есть статистика и карма. В ближайшее время выкатим "тухлость" (или в терминах Дорофеева — "задача-дни").

Ответить
Развернуть ветку
Владислав Романов

функционал ок, но дизайн тлен. не смог пользоваться и снес :/

Ответить
Развернуть ветку
Sergey Grabak

И еще дополнение, Импорт в приложении вроде как есть, а вот Экспорта нет. То есть переходить с сингулярити на что-то другое тоже будет приключением.

Ответить
Развернуть ветку
vitexeon mr.

7. Зачем инсталляцию по умолчанию фигарить в ...\ProgramData\ почему не дать пользователю выбрать место для установки ?

Ответить
Развернуть ветку
Сергей Алексейчиков

Парни, фотографирую приложением, но пишет, что «Возникла ошибка при попытке распознавания».
iPhone XS 512, iOS 14.4.2, SingularityApp 2.12.0 (2)

Ответить
Развернуть ветку
Henry Miller

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

Ответить
Развернуть ветку
vitexeon mr.

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

Ответить
Развернуть ветку
Евгений Галанин

Визуально полный клон tick tick, особенно всякий базовый функционал типа помодоро таймера.

Ответить
Развернуть ветку
11 комментариев
Раскрывать всегда