Сегодняшняя статья будет про уведомления об изменениях в задачах Redmine. О том, какие средства есть в коробочном Redmine и о том, что мы доработали сами.
Любой task-трекер имеет средства уведомления об изменениях в задачах, и Redmine — не исключение.
Электронная почта
Коробочный Redmine может уведомлять пользователей об изменениях в задачах по электронной почте. Довольно стандартная функциональность, но опций по ее кастомизации не очень много.
Достаточно просто расширять опции, но, как нам показалось, уведомление посредством письма — не самый лучший вариант сообщить о том, что в задаче что-то изменилось. Со временем, ты просто перестаешь обращать какое-либо внимание на все письма, валящиеся к тебе в ящик, ассоциируя их со спамом.
Кстати, у уведомлений по электронной почте в Redmine есть еще один фатальный недостаток. Redmine не отдает страничку с задачей пока не отправит письмо на сервер и, если с почтовым сервером происходит что-то плохое, то страничка с задачей не отдается пользователю достаточно долго (до 15 секунд).
Автор статьи потратил не мало времени, анализируя проблему долгого открытия странички с задачами, и как оказалось администраторы сети поменяли настройки почтового сервера.
RSS
Почти на все списки задач, комментарии к задачам и т.д. можно завести RSS –feed и использовать его в RSS-ридерах мобильных телефонов, например. Достаточно удобный способ, которым даже IT-ки пользуются редко.
Моя страничка
Стандартная «Моя страница» позволяет вывести лимитированный, преднастроенный и вшитый в код программного продукта, набор блоков. Преднастроенного набора блоков практически сразу начинает не хватать. Помимо прочего, есть еще одна глобальная проблема со списком задач, которые отображаются в блоке на моей страницы – нет никакого уведомления о том, что меняется внутри задачи.
Что сделали мы, чтобы оперативно информировать пользователей об изменениях в задачах.
Кружочки-индикаторы
Мы придумали и реализовали синие, светло-зеленые и темно-зеленые кружочки. Что они означают!?
- Зеленый кружочек рядом с задачей означает то, что вы никогда не читали это задачу.
- Синий кружочек означает то, что вы читали задачу, но с момента последнего прочтения в задаче что-то изменилось и, возможно, пользователю необходимо ознакомиться с изменениями.
- Темно-зеленый кружочек с циферкой внутри означает то, что на вас назначено n-ое количество задач и в них ничего не менялось с момента последнего прочтения.
- Аналогичное значение имеют светло-зеленные и синие кружочки со счетчиком внутри.
Кружочки моментально прижились в компании и стали ненавязчивым и в тоже время информативным средством уведомления пользователей об изменениях в задачах.
Мы оформили эту функциональность в виде отдельного плагина — «Unread issues», и с радостью делимся им с сообществом.
Помимо кружочков-индикаторов, которые добавляются во все списки задач, плагин также позволяет определить запрос задач, на основе которого будут считаться индикаторы-счетчики для моей страницы. Это очень удобно, если пользователей, например, не нужно уведомлять об изменениях в определенных трекерах.
Кружочки индикаторы для других сущностей и проблемы с производительностью.
Кружочки-индикаторы так хорошо прижились, что мы сразу стали использовать их для других сущностей:
- Количества непрочитанных документов,
- Количества регламентных действий, которые необходимо выполнить сотруднику. Например, количество заявок для согласования, количество оценок, которые необходимо проставить сотрудникам и т.д.
Поскольку счетчики отображались в главном меню и пересчитывались практически при каждом обновление страницы, а SQL — запросы по их вычислению бывали сложными, Redmine притормаживал.
Со временем появился плагин «Ajax counter», который позволяет вычислять и отображать счетчики асинхронно. Это позволяет пользователям получать страницу еще до вычисления всех счетчиков.
Этот же плагин позволяет устанавливать интервал обновления счетчика, чтобы значение для него не пересчитывалось каждый раз при обновлении страницы. Так например, для регламентного действия «Ознакомиться с приказами» можно поставить интервал в 1 час, поскольку новые приказы выходят редко.
Плагин «Ajax counter» находится в свободном доступе тут: bitbucket.org/dkuk/ajax_counters. Думаю, что он может быть полезен программистам, которые разрабатывают под Redmine.
Блок «Что мне нужно сделать?»
Мы используем Redmine как единую корпоративную среду. И в этой среде, сотрудники часто забивают, а иногда и просто бойкотирую обязанность выполнять регламентные процедуры.
Ну, например, есть правило, которое гласит, что сотрудник обязан ознакамливаться с изменениями в задачах, назначенных на него, в течение трех дней. И кто-то не делает этого регулярно, объясняя свои действия неудобством программы и непонятностью интерфейса.
Поэтому, появился замечательный блок на моей странице «Что мне нужно сделать?», в котором популярно расписано, что сотрудник должен сделать сегодня, в ближайшие семь дней, в текущем месяце, а за одно и то, что должны сделать его подчиненные.
Блок «Что мне нужно сделать?» здорово уменьшает входной порог для работы в системе.
Действия для блока могут задаваться в сторонних плагинах. Например, плагин «KPI» задает свой список действий для блока: согласование аванса, закрытие ЗП и т.д.
Также, действия для блока могут задаваться на основе стандартных запросов задач Redmine. Вы можете выбрать какой-то запрос и определить в нем поле с датой, по которому будет считаться срок необходимого выполнения задачи. Этот подход дает большую гибкость, поскольку превращает любой запрос задач в регламентное действие. Например, легко создать регламентные действия вида: «Проверить задачи», «Дать обратную связь по задачам» и т.д.
Кружочки-индикаторы и блок «Что мне нужно делать?» перекрывают потребности сотрудников в информирование об изменениях.
Чуть раньше у нас были уведомления по протоколу XMPP в jabber-клиент, но потребность в них со временем отпала. К тому же, постоянно сыплющиеся сообщения вида «В задаче такой-то произошли изменения», очень быстро достают пользователя.
Надеюсь, статья будет полезна. Пробуйте наш плагин «Unread issues». Любая обратная связь приветствуется!