Предлагаю читателям "Хабрахабра" историю о том, как я искал удобный таск-менеджер для работы среди множества готовых решений и в итоге остановился на самописном.
Вам будет интересно почитать, если вы:
- Не довольны своим таск-менеджером, так как он очень сложный/неудобный
- Работаете с небольшой командой
- Часто взаимодействуете с коллегами через месенджеры, и вам хотелось бы иметь таск-менеджер под рукой
- Хотели бы начать знакомство с простым и понятным таск-менеджером
Решение распространяется под лицензией 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 - Срочный баг
Послесловие
Скажу честно, опробовать бота на реальном проекте мне еще не довелось. Надеюсь, что сделаю это после отпуска. Если вас заинтересовало данное решение, вот несколько ссылок: