Предлагаю читателям "Хабрахабра" историю о том, как я искал удобный таск-менеджер для работы среди множества готовых решений и в итоге остановился на самописном.


Вам будет интересно почитать, если вы:


  • Не довольны своим таск-менеджером, так как он очень сложный/неудобный
  • Работаете с небольшой командой
  • Часто взаимодействуете с коллегами через месенджеры, и вам хотелось бы иметь таск-менеджер под рукой
  • Хотели бы начать знакомство с простым и понятным таск-менеджером

Решение распространяется под лицензией GNU GPL, ссылка на репозиторий будет в конце статьи.


Програмистские мытарства


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


Так же я заметил одну интересную вещь — я никогда не использую таск-менеджер более чем на 10-20% от его возможностей. Я не пользуюсь декомпозицией, диаграммой Ганта, приоритетами и датой окончания задачи. Как правило все эти функции постепенно становятся невостребованными и наша команда использует только две из них — постановка задачи и ее маркировка для поиска.


К счастью, мы никогда не работали с задачами в условиях сжатых сроков, от того, весь функционал таск-менеджера у нас сводился к todo-листу с несколькими дополнительными функциями.


Таск-бот


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


Решение было написано мной за несколько ночей в свободное от работы время. В качестве языка был использован PHP, так как это мой основной (на данный момент) ЯП, а так же несколько открытых пакетов и Doctrine 2. Бот пока не использует webhook для получения сообщений от пользователей, а работает на простом полинге. Такое решение было выбрано мной чтобы не усложнять реализацию на начальном этапе, ведь будущее проекта еще туманно. Само решение доступно на GitHub, но на время бета-теста я подготовил рабочий демо-стенд, который вы сможете использовать для ознакомления с ботом.


Возможности


Функционал бота разделен на две категории: работа с метками и работа с задачами. Метки используются для поиска задач по ключевым словам, а задачи аккумулируют все остальные данные.


Работа с метками


Под меткой бот понимает любое слово, смайл или username пользователя (с ведущим знаком @), которым помечаются задачи. Задача может быть помечена любым количеством меток, по которым, в будущем, ее будет просто найти. Для удобства использования, в боте используется механизм "текущих меток". С его помощью любой пользователь определяет в начале сеанса использования бота список меток, который будет применяться ко всем создаваемым задачам.


Рассмотрим пример работы с метками. Предположим вы решили создать несколько задач для вашей команды, занимающийся проектом "Зевс". Между вами и ботом будет следующий диалог:


Вы: /ms зевс backend
Бот: ок
Вы: /t Новая задача
Бот: ок
Вы: /t Еще одна задача
Описание задачи
Бот: ок
Вы: /ts
Бот:
1 - Новая задач
2 - Еще одна задача

Все создаваемые вами задачи будут помечены вашими текущими метками (зевс и backend), которые вы задали с помощью команды /ms.


Текущие метки индивидуальны для каждого пользователя. Это позволяет работать с ботом команде разработчиков и не мешать друг другу. Для получения списка ваших текущих меток используется команда /ms (без аргументов), а для получения списка всех меток, используется команда /ms *.


Работа с задачами


Задача включает следующие данные:


  • Заголовок — название задачи
  • Описание — подробное описание задачи (может отсутствовать, если заголовка достаточно)
  • Даты создания, последнего изменения и завершения
    Задачи так же можно комментировать, но комментарии добавляются в конец блока описания.

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


Разработчик: /ts
Бот:
1 - Новая задач
2 - Еще одна задача
Разработчик: /t 1
Бот:
Старт: 12.07.2017

Метки: зевс backend
Новая задача
Разработчик: /t 1 c
Комментарий разработчика
Бот: ок
Разработчик: /t 2 t
Новое название для задачи
Бот: ок
Разработчик: /d 2
Бот: ок

Как видно из примеров, команда /t позволяет не только создавать задачи, но так же просматривать их и редактировать. При редактировании задачи, помимо идентификатора целевой задачи используется флаг, определяющий редактируемое поле. Доступны следующие флаги:


  • title (t) — редактирование названия задачи
  • description (d) — редактирования описания задачи
  • marks (m) — редактирование меток задачи
  • comment © — добавление комментария задачи
  • subscribe (s) — подписка на изменение задачи
  • unsubscribe (us) — отписка от изменений задачи

Для завершения задачи используется команда /d. Завершенные задачи автоматически помечаются "виртуальной" меткой "выполнено", что позволяет получить к ним доступ в будущем, на пример так:


Вы: /ts выполнено зевс backend
Бот:
2 - Новое название для задачи

Так же к "виртуальным" меткам относится "сегодня". Этой меткой помечаются все созданные или завершенные за последние сутки задачи.


Как я уже говорил ранее, бот умеет оповещать участников об изменении в задаче. Под изменениями понимается:


  • Изменение названия задачи
  • Изменение описания задачи
  • Комментирование задачи
    Если вы подписаны на оповещения конкретной задачи, бот напишет вам в личный чат при каждом изменении и укажет, что и как было изменено у конкретной задачи.

Работа с пользователями


Очень часто при постановке задач участникам проекта необходимо сразу же указать ответственных и подписать их на оповещения по этим задачам. Для этого используется специальная метка @username (username заменяется именем целевого пользователя). Если пользователь с таким именем есть в базе данных бота (взаимодействовал с ним когда-либо), он будет автоматически подписан на оповещения.


Пример:


Вы: /ms зевс backend @developer @manager
Бот: ок
Вы: /t Срочный баг
Бот: ок

Просмотреть все задачи, участниками которых являются конкретные пользователи так же просто, ведь используются обычные метки:


Разработчик: /ms зевс @developer
Бот: ок
Разработчик: /ts
Бот:
3 - Срочный баг

Послесловие


Скажу честно, опробовать бота на реальном проекте мне еще не довелось. Надеюсь, что сделаю это после отпуска. Если вас заинтересовало данное решение, вот несколько ссылок:


Поделиться с друзьями
-->

Комментарии (24)


  1. pinal
    12.07.2016 12:15

    Ждем бота-менеджера, который в купе с ботом-таскменеджером будет раздавать задачи и расставлять приоритеты, закрыть спринт :)


    1. Delphinum
      13.07.2016 04:14

      Это уже уровень Apple, я такое не потяну )


  1. jacob1237
    12.07.2016 12:21

    Чем Ваше решение принципиально отличается от Taskwarrior?


    1. mamkaololosha
      12.07.2016 13:01
      +1

      Я бы еще попросил указать на фатальный недостаток Taskwarrior.


    1. Delphinum
      13.07.2016 04:00

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


  1. justabaka
    12.07.2016 13:04

    По-моему, если человек неспособен разобраться в крайне популярных (и неспроста) jira/redmine/youtrack хотя бы на уровне воркфлоу «создать-решить/отфутболить-закрыть», ему нечего делать в разработке, где все на несколько порядков сложнее.

    P. S. Пользуйтесь спеллчеком, пожалуйста.
    P. P. S. Когда уже пройдет этот хайп с различными ботами, которых пытаются насильно скрещивать со всем подряд?


    1. avost
      12.07.2016 16:56
      +1

      Скажите, а вы пользуетесь _всей_ функциональностью, например, жиры?
      И,… вы, похоже, статью не прочли? Автор же внятно написал какие именно проблемы с «крайне популярными» трекерами он решает этим ботом. Зачем подстраивать себя под кем-то придуманный и неудобный в конкретной ситуации воркфлоу? Потому что он «крайне популярный»? Плохая причина. Людям, делающим дурную работу в больших количествах вместо того чтобы делать мало, но полезной работы, нечего делать не только в разработке, но и где бы то ни было вообще. Наверное, кроме армии. Там крайне популярны воркфлоу типа «копать от меня и до обеда» и «чем бы солдат ни занимался, лишь бы зае...<как следует устал>».


      1. justabaka
        12.07.2016 17:33
        -2

        Так а никто и не говорит про всю функциональность. Автор внятно написал только, что ему «неудобно»/«непонятно»/«задачи обсуждаются в X, а ставятся в Y», после чего пошел костылизировать свое видение Slack+%TASK_MANAGER% в форме бота для Telegram. В принципе, его право, но аргументация вялая и весьма странная, особенно, если учесть количество телодвижений, совершаемых при работе с «тикетом» через бота, явно избыточных в сравнении с обычным таск-менеджером.

        Кастомизация workflow (читай: настройка рабочего инструмента) это, по-вашему, «дурная работа»? Потыкать мышкой в GUI теперь сложнее написания готового продукта с нуля, серьезно? Это примерно как пойти писать свой desktop environment на каком-нибудь javascript, если на купленном ПК не обнаружится предустановленных привычных вам нескучных обоев на рабочем столе. Вы же явно не ожидаете, что весь софт будет идеально настроен именно под вас из коробки, не придумывайте глупости.


        1. avost
          12.07.2016 18:13

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


        1. Delphinum
          13.07.2016 04:02

          Вы же явно не ожидаете, что весь софт будет идеально настроен именно под вас из коробки

          Я к этому стремлюсь.


      1. iqiaqqivik
        12.07.2016 23:40

        А вы про армию на основе собственного опыта, или так, «бабка в поезде напела»?

        Жира прекрасно интегрируется со слаком, кстати, а так как пару недель назад в API слак-сообщений впилили, наконец, кнопки — скорость создания такого бота увеличится с 10 в минуту до ста в минуту.

        Ну и самое главное: жирбот в слаке — это дуплекс, веб для людей никто не отменял. А велосипед выше — нет.


        1. avost
          13.07.2016 05:40

          Про армию — на основе. А что?
          Что касается бота — ну, вот, человек, получается, в абсолютно верном направлении движется.


          1. iqiaqqivik
            13.07.2016 08:53

            У меня другой опыт просто. Не суть.

            Человек изобретает трехколесный велосипед, который умеет ездить только вперед, в то время, как концерн «Данлоп» выпускает новые вилки к своим пятистам моделей байков.


            1. avost
              13.07.2016 09:09

              А белаз выпускает самые большие в мире самосвалы. И что? Он возит 450 тонн песка за раз, но мне нужно в день ведро. Я могу белазом привезти ведро песка, но это уж больно геморройно. И на всё остальное времени не останется.
              Зы, а что, действительно в армии не занимались тупой деятельностью, вроде шагистики, покраски травы и выравниванием сугробов? А только полезной боевой подготовкой? Круто. Наверное, это была израильская армия? ;)


              1. vvscode
                15.07.2016 12:21

                /оффтоп если вы в чем-то не видите смысл ( считаете тупым ) — это не значит, что смысла в этом нет


                1. avost
                  15.07.2016 12:31
                  -1

                  Конечно, смысл есть — надо же чем-то занять ввереный личный состав иначе он начнёт дисциплину хулиганить. Смысла нет там чуть раньше — накуа сажать за забор этот личный состав на джва года, если вся тн «боевая подготовка» укладывается в три недели (для особо тупых в четыре), а на гражданке даже самый тупой из этого личного состава принёс бы многократно больше пользы. Но — два года! Я за это время произвёл 3 (буквами — три!) выстрела из АКМа. Я с тех пор отщен крутой зольдатн! Умею три раза выстрелить из автомата и в совершенстве владею искусством выравнивания сугробов! Вся вражеская армия скончатеся на месте увидев мои совершенные (совершенно бессмысленные) квадратные сугробы.


    1. Delphinum
      13.07.2016 04:00

      «Прочь из профессии»?


  1. customtema
    12.07.2016 22:16

    Отличное решение!

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

    Я мечтал об экспорте конспектов бесед из скайпа в гуглодоки. Пользуюсь привычкой, конспектировать тезисы из устной беседы в чат скайпа. Помогает решить целый ряд вопросов. Потом копирую в гуглодок, или в Libreoffice, или отправляю копию коллегам на почту, или забываю обработать материал, и он теряется…

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

    Спасибо за пост.


    1. Delphinum
      13.07.2016 04:05

      Возможно ли упростить синтаксис?

      Интерфейс сильно зависит от используемого SDK. Если будет спрос, возможно, сделаю и интеграцию с Google Docs.


  1. chemistmail
    12.07.2016 23:12

    Хорошая идея.
    Продумать диалоги, переделать команды с учетом локализации, привязать к github, bitbucket.
    Добавить консольную утилиту для добавления, просмотра задач, событий.
    Добавить аналого gists по тегам, пользователям, событиям.
    Добавить календарь.
    Добавить отчетность по пользователям (текущие задачи и тд)
    Добавить возможность формировать задачи по предустановленному порядку. ( Сформировал хотелку, сообщение менеджеру, акцепт от него, включена в список актуальных задач)
    Добавить возможность создавать иерархию задач.
    Продуманный диалог с нормальной лексикой.
    Размечтался в общем.
    Но идея не плоха.
    Финт ушами для интерфейса, предусмотреть возможность контекста. В зависимости от контекста диалог конкретизируется.


    1. Delphinum
      13.07.2016 04:06

      Для описанных вами задачь уже есть прекрасные решения.


  1. 3fed
    13.07.2016 04:07

    Первый пункт — «Програмистские мтарства». Кажется, что у вас потерялись буквы «м» и «ы».
    Этот же пункт, второй абзац, самый конец. Там, в слове «маркировка», «е» подменяет «и». «и» заболела наверно.

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


    1. Delphinum
      13.07.2016 04:09

      Примного благодарен, но лучше о таком в личные сообщения. На хабре любят именно так )


      1. 3fed
        13.07.2016 21:59

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