Русский
Русский
English
Статистика
Реклама

Atlassian

Как мы обрабатываем жалобы пользователей с помощью JIRA (REST API)

09.07.2020 08:06:27 | Автор: admin


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


Все жалобы пользователей должны где-то храниться, быть приоритезированы, удобно отслеживаться, и, более того, должны быть вовремя обработаны. Но не всегда есть возможность выделить достаточно ресурсов на разработку и поддержание подобной системы, ведь всегда найдется задача в бэклоге с более высоким приоритетом. Ниже я расскажу, как мы достаточно эффективно и быстро решили эту задачу в Uxcel используя JIRA REST API.


Для чего нам Report a problem?


Добавим немного контекста для чего мы предоставляем функционал жалоб и что нам нужно?
Uxcel веб-сервис для обучения UI/UX в игровой форме. Обучающим элементом у нас является Практика в большинстве случаев это 2 изображения, где одно верное, а другое нет. Что позволяет натренировать глаз находить недочеты даже в визуально идентичных элементах. Каждая практика помимо изображений имеет подсказку (hint наводку на верный ответ) и описание (description) с теорией, касающейся данной задачи.



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



Чтобы не изобретать велосипед со своими бордами, тикетами и backlog-ом, а также чтобы хранить все задачи команд в одной системе и даже в общих спринтах, было решено для этих целей использовать JIRA + REST API.


Организация тикетов в JIRA


Для каждой практики у которой есть хотя бы 1 жалоба создается BUG в JIRA в выделенном эпике Practices Reports. А сами жалобы хранятся в виде комментариев к соответствующим багам-практикам. В дополнение к этому, для разных видов практик добавляется Label (в нашем случае такие как: Course, Gym, UEye). Общая логика представлена на схеме ниже:



Таким образом, контент-команда выбирает наиболее приоритетные практики (в виде багов) для исправления в каждом спринте.


А теперь давайте взглянем на технические подробности реализации.


Интеграция с JIRA REST API


Первым делом нужно создать API token в JIRA, чтобы получить доступ к JIRA API. Для использования на продакшене рекомендую создать отдельного пользователя от имени которого и будут создаваться тикеты, иначе придется отбиваться от постоянных уведомлений, в то время как для отдельного пользователя их проще сразу все отключить.


Получение API токена:




  • Задаем имя токена -> нажимаем Create


Готово. Сохраняем куда-нибудь созданный токен, терять его нельзя.


Теперь можно выполнять API запросы к JIRA. В каждый запрос передается заголовок, содержащий емейл (пользователя для которого был создан токен) и сам токен их передаем посредством реализации HTTP basic authentication.


Пример кода (весь код на TypeScript для NodeJS):


private generateAuthHeader(): string {    // конвертируем строку email:apiToken в Base64    const basicAuthValue = Buffer.from(`${this.jiraEmail}:${this.jiraApiToken}`).toString('base64');     return `Basic ${basicAuthValue}`;}

Примечание: для хранения ключей и паролей мы используем AWS Secrets Manager. Прямо в коде такие данные хранить не безопасно. Больше информации тут.

Создание бага через API


Осталось совсем немного подготовки. Для того чтобы создать баг, нам нужно знать его Issue ID в JIRA. Один из способов его узнать вызвать GET запрос на получение информации обо всех типах:


GET https://{id}.atlassian.net/rest/api/3/issuetype 

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



Во вкладке Authorization выбираем Type: Basic Auth, вводим email и api token.


В ответе нас интересует эта часть:


{    "self": "https://{id}.atlassian.net/rest/api/3/issuetype/10004",    "id": "10001",    "description": "A problem or error.",    "iconUrl": "https://${id}.atlassian.net/secure/viewavatar?size=medium&avatarId=10303&avatarType=issuetype",    "name": "Bug",    "untranslatedName": "Bug",    "subtask": false,    "avatarId": 10303}

После того как узнали Issue Id типа BUG (10001) нам нужно узнать Project Id, к которому баг будет принадлежать. Похожим образом можем получить список всех проектов и найти id нужного.


Для этого делаем GET запрос на


GET https://{id}.atlassian.net/rest/api/3/project/search

И последний подготовительный шаг: как я выше упоминал, мы храним баги в отдельном эпике (Jira Epic). Его id знать не обязательно, достаточно скопировать его Key (расположен перед названием эпика, либо в адресной строке, например UX-1).


Все готово к созданию первого бага через API.


Я использовал npm пакет Got для создания HTTP запросов для NodeJS.

await got.post({    url: `${this.jiraApiHost}/issue`, // jiraApiHost = https://{id}.atlassian.net/rest/api/3    headers: {        Authorization: authorization, // созданный Basic Auth Header в методе generateAuthHeader        'Content-Type': 'application/json'    },    responseType: 'json',    json: {        update: {},        fields: {            issuetype: { id: this.jiraBugTypeId }, // полученный id типа BUG (пример - 10001)            project: { id: this.jiraPracticeReportProjectId }, // id проекта (пример - 10005)            parent: { key: this.jiraPracticeReportEpicKey }, // ключ Epic (пример - UX-1)            summary: practiceTicketName, // имя практики формата -  [practiceId] practiceName (#reports)            labels: [practice.label]        }    }});

API Reference


Баг создан. Далее рассмотрим остальные методы необходимые для настройки полного цикла обработки жалоб и ведения их в JIRA, такие как: Поиск, Обновление статуса, Обновление информации, Добавление комментария к багу.


Поиск бага через API


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


Пример кода:


// формируем JQL запрос, ищем по типу BUG в эпике где хранятся жалобы по id практики (которое есть в названии каждого бага)const jql = `issuetype = Bug AND project = CNT AND parent = ${this.jiraEpicKey} AND text ~ "${practiceId}" order by created DESC`; const response = await got.get({    url: `${this.jiraApiHost}/search?jql=${jql}`,    headers: {        Authorization: authorization    },    responseType: 'json'});const practiceJiraTicket = response.body['issues'] && response.body['issues'][0];

API Reference


В случае если для практики баг найден, нужно обновить его статус, если проблема была решена и баг находился в статусе CLOSED.


Обновление статуса бага через API


Чтобы обновить статус, воспользуемся Transitions. Но для этого нужно узнать Status ID для TODO / OPENED статуса (статус зависит от настроек JIRA).


Возвращаемся к Postman:


GET https://{id}.atlassian.net/rest/api/3/project/{projectIdOrKey}/statuses

По id проекта получаем все статусы, находим статус, который указывает на открытое состояние тикета и сохраняем его id.


Запрос на перевод бага в открытый статус:


await got.post({    url: `${this.jiraApiHost}/issue/${practiceJiraTicket.key}/transitions`, // где practiceJiraTicket - найденный объект бага    headers: {        Authorization: authorization,        'Content-Type': 'application/json'    },    responseType: 'json',    json: {        transition: {            id: this.jiraToDoStatusId // id статуса полученного выше (пример - 10006)        }    }});

API Reference


Следующий шаг после перевода найденного бага в открытое состояние обновление названия (а если нужно, то и описания либо приоритета).


Обновление названия бага через API


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


Код вызова API для обновления бага:


await got.put({    url: `${this.jiraApiHost}/issue/${practiceJiraTicket.key}`,    headers: {        Authorization: authorization,        'Content-Type': 'application/json'    },    responseType: 'json',    json: {        update: {            summary: [{ set: newPracticeTicketName }]        }    }});

API Reference


Далее добавим детали самой жалобы в виде комментария к уже подготовленному багу.


Добавление комментария через API


Каждая жалоба пользователя хранится в виде комментария к багу-практике.


Код создания комментария:


await got.post({    url: `${this.jiraApiHost}/issue/${practiceJiraTicket.key}/comment`,    headers: {        Authorization: authorization,        'Content-Type': 'application/json'    },    responseType: 'json',    json: comment // подробности о формировании объекта ниже});

API Reference


Объект comment формируется в виде Atlassian Document Format.
На сайте так же есть Builder, который значительно упрощает генерацию объекта: просто форматируем текст под свои нужды в редакторе при этом параллельно создается итоговый JSON объект.


Готово! Теперь можно принимать, хранить, обрабатывать, закидывать в спринты и удобно искать жалобы пользователей используя JIRA.


Как у нас выглядят жалобы в виде комментариев:



Итоговый вид нашего списка багов в JIRA (название содержит id, #N число жалоб, % верных ответов):



Дальше все зависит от вашей фантазии и требований. Например, можно:


  • реализовать асинхронную обработку жалоб, чтобы пользователь не ждал пока пройдет вся цепочка запросов к JIRA (у нас реализовано средствами AWS SNS)
  • добавить поле priority для багов и менять приоритет в зависимости от числа жалоб для более удобной фильтрации в борде
  • дополнительно информировать модераторов в Slack при появлении новой жалобы со ссылкой на созданный баг (slack/webhook пакет очень прост в интеграции)
  • настроить JIRA Webhooks, чтобы при закрытии бага автоматически рассылать уведомления всем пользователям, которые жаловались на практику с благодарностью за участие в улучшении продукта
  • автоматически назначать баг на автора контента, на который поступила жалоба.

Всем спасибо за внимание! Надеюсь, статья была для вас полезной :)
С радостью отвечу на ваши вопросы!

Подробнее..

Из песочницы Trello начало работы и скрытые фишки

17.07.2020 16:20:19 | Автор: admin

Что такое Trello, и как оно работает?




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


P.S. если вы хоть раз открывали приложение trello листайте до основы работы.




Как начать работу


В самом начале мы видим экран, на котором на предлагают создать доску, давайте сделаем это. Необходимо всего лишь ввести название доски и выбрать фон (я всегда выбираю наиболее нейтральную фотографию или еще лучше просто однотонный цвет, чтобы ничего не отвлекало от карточек внутри доски, и они контрастировали с задним фоном). Готово, мы создали свою первую доску.


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


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


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


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




Основы работы


Давайте посмотрим направо и быстро изучим основные вещи, которые мы можем добавить на карточку.


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


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




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


Интересная модель: когда я готовился к ЕГЭ, и у меня было большое количество вебинаров, которое нужно было посмотреть, я просто создавал чек-лист с вебинарами и в строчки вносил ссылки на эти видео, а затем отмечал по мере просмотра.




Третья функция карточки это создание сроков. Мы можем задать срок выполнения той или иной задачи, записанной на карточке, и trello напомнит нам заблаговременно, что срок карточки скоро истекает и будет менять цвет маркера времени на карточке в зависимости от того, сколько времени осталось до намеченного срока. Также мы можем добавить календарь на всю доску, и у нас появится еще одна полезная функциональность доски.


Как это сделать:


  1. В правом верхнем углу доски нажимаем на кнопку меню.
  2. Далее, в открывшемся меню мы видим раздел Улучшения.
  3. Открываем этот раздел и вбиваем в поиск календарь, по-русски или по-английски в зависимости от версии приложения.
  4. Видим карточку calendar и нажимаем добавить.
  5. Готово, теперь на нашей доске есть календарь.

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




Четвертая штука это вложения, на них мы остановимся поподробнее. Для меня, человека, который из-за учебы работает с огромным количеством файлов, это одна из самых полезных функций карточки. В эти вложения можно очень просто добавлять картинки или файлы, перетащив их из папки на компьютере или телефоне на карточку (drag and drop).


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





Вот мои шаблоны, копируйте, пользуйтесь.












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




Шаблоны


В Trello существует огромное колличество шаблонов досок, и вам не обязательно каждый раз придумывать самому, как правильно расставить колонки, и как из лучше будет назвать их.
Для того, чтобы использовать шаблон нужно на самом первом экране нажать на кнопку шаблоны (слева), и далее выбрать нужный вам шаблон из того множества, которое там представлено. Когда вы определились с выбором шаблона, просто нажимаем добавить шаблон, и у вас появляется новая доска с этим шаблоном, которую вы далее можете настраивать под себя, как вам удобно.


P.S. я использую шаблон, который можно найти, вбив getting things done.




Синтаксис


Итак, мы рассмотрели основные вещи, которые можно добавить на карточку, и теперь перейдем к оформлению самой карточки.


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




Заголовки


Если вам нужно выделять заголовки, ставим # (чем больше хэштегов перед заголовком, тем меньше будет шрифт заголовка).


Заголовок H1


Заголовок H2




Шрифты


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



Курсив и Курсив
Жирный текст и Жирный текст
Жирный и курсивный текст




Выделение


Выделение части текста рамочкой другого оттенка, ставим (>) перед текстом и все красиво.


Очень глубокомысленная цитата. Пожалуйста, прочтите её внимательно.

Оскар Уайльд



Линии разделения


Линии разделения текста на абзацы и блоки, также если мы создадим новую карточку, добавим (---) в название карточки и больше ничего не будем писать, у нас появится пустая карточка\линия, которой можно делить карточки на блоки внутри колонки.


(***)
(___)




Зачеркнутый текст


Символ (~)
~~ зачеркнутый текст ~~
зачеркнутый текст




Как посчитать количество карточек?


Если на доске открыть меню и вбить в поиск карточек символ ($), то над каждым столбцом появится количество карточек в нем.




Заключение


Trello это достаточно продвинутая программа, которая может очень сильно помочь, как в организации личной жизни, так и в управлении проектом. Если вы дочитали до конца, и так и не поставили это приложение, то советую вам сделать это прямо сейчас, возможно оно изменит вашу жизнь, как оно изменило мою.

Подробнее..

Проектные решения игра по твоим правилам

18.08.2020 10:04:18 | Автор: admin
Не секрет, что чем крупнее программный проект, тем больше его успех зависит от результатов работы аналитиков, в частности, от выбора правильной стратегии составления и согласования проектных решений. Однако как организовать работу этих творческих сотрудников? И как сделать так, чтобы результаты их деятельности были одинаково понятны как представителям заказчика, так и программистам? Как оценить возможные сроки выполнения и значимость этой работы для проекта? В этой статье я попытался сформулировать свои рецепты оптимизации управления аналитической работой на проектах по созданию программного обеспечения для государственных заказчиков. Приветствуется любая критика.

Источник

Рамки исследования


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

Дж. Коплиен

Поскольку на текущий момент на рынке труда в IT фигурирует более двух десятков разновидностей вакансий аналитик, сразу оговорюсь, что я буду говорить об аналитической работе на госпроектах по созданию заказного программного обеспечения. Как показывает мой опыт, бизнес-аналитик, не разбирающийся в механизмах автоматизации бизнес-процессов, не может подготовить адекватную постановку задачи. Как не может быть адекватным системный аналитик, не понимающий бизнес-целей автоматизации. Поэтому, с моей точки зрения, аналитик, работающий на заказных программных проектах, должен совмещать в себе компетенции бизнес-аналитика, системного аналитика и UX-дизайнера. Кроме этого, как правило, ведущий аналитик на таком проекте должен выполнять функции Product Owner (если заказчик вам позволит). Именно об организации деятельности таких универсальных солдат пойдет речь далее.

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

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

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

Однако конкретность желаний заказчика не является гарантией того, что ему понравится конечный результат. В ходе моих проектов была выявлена следующая закономерность: все функциональные замечания заказчика, зафиксированные в ходе всех видов испытаний (не путать с выявленными ошибками!), касались требований, по которым превентивно не было согласовано с заказчиком проектное решение. В этом отношении показательна статистика, которую приводит Наталья Руколь, когда при анализе результатов одного из проектов выяснилось, что почти 70% выявляемых на стадии сдачи ошибок вызваны непониманием исходных требований со стороны разработчиков.

Казалось бы, после того, как уточнены требования к программному продукту, нужно сформировать пакет проектной документации в соответствии с ГОСТ РД 50-34.698, согласовать ее с заказчиком и потом разработать ПО в полном соответствии с утвержденным проектом. Зачастую именно о такой последовательности действий приходится слышать от вчерашних студентов-отличников (троечники, как правило, вообще не знают о существовании таких документов) и многих опытных топ-чиновников, которые никогда не несли персональной ответственности за конечный результат разработки программного обеспечения.

Как подсказывает мой опыт, формирование проектной документации это только финальная часть работы аналитика. В качестве аналогии можно привести научно-исследовательскую работу, в результате которой должен быть сформирован отчет в соответствии с ГОСТ 7.32 или написана диссертация. Однако эти документы являются всего лишь формой оформления полученных научных результатов. Проведение бесплодных экспериментов, статистическая обработка белого шума, поиски крупиц требуемой информации в тоннах псевдонаучной макулатуры все эти неотъемлемые составные части научной работы всегда остаются за кадром. Точно так же в случае с проектной документацией. С одной стороны, она является неотъемлемой частью программного продукта. С другой в ней оформлены только конечные результаты аналитической работы.


Источник

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

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

Проектные решения VS проектной документации?


Как всё прекрасно на бумаге,
Как легко следовать словам.
Как просто сделать так, что ты непогрешим.

Б. Гребенщиков

Несмотря на то, что определение понятия проектное решение дано в ГОСТ 34.003-90, в моем случае значение этого понятия было открыто в ходе мучительных и безрезультатных попыток согласования с представителями заказчика нескольких взаимосвязанных, но неоднозначных требований, когда клиенты просто игнорировали предлагаемые нами описания постановки задач (ОПЗ), сформированных в строгом соответствии с РД 50-34.698-90. После осознания того, что решение со стороны заказчика не будет принято вплоть до начала испытаний, был предпринят следующий манёвр: в адрес заказчика было отправлено наше проектное решение (т.е. решение, которое формально он был не обязан согласовывать).

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

Получившийся коктейль одновременно по форме был похож на документ, оформленный в соответствии с требованиями РД 50-34.698-90, однако по факту он не соответствовал ни одному из форматов, приведенных в этом ГОСТ. При этом, то, что было в нем написано, понимал обычный, неподготовленный представитель заказчика. Требования, уточненные в этом документе, были совершенно понятны как для заказчика так и для исполнителя. Были определены границы требований, необходимый объем планируемых работ и чем собственно эти работы должны были завершиться.

В сопроводительном письме присутствовала примерно такая фраза:

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

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

Что забавно, сначала в ответных письмах в случае, если заказчик не присылал необходимые уточнения, мы использовали фразу работы приостанавливаются. После нескольких таких писем один из представителей заказчика устроил форменный скандал в связи с тем, что мы согласно подписанному контракту не можем приостанавливать работы и отсутствие разъяснений в отношении требований не является основанием для прекращения разработки. Однако на формулировку о том, что работы не могут быть продолжены у него не нашлось возражений.

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

Описание слона не по ГОСТ


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

Фредерик Брукс

На мой взгляд, основным критерием хорошего описания постановки задачи (проектного решения) является не выполнение формальных требований ГОСТ, а однозначное описание условий успешного завершения работ по выполнению требований заказчика. С этой точки зрения, фактически неотъемлемой частью любого проектного решения является описание тестовых заданий по проверке требований.


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

  1. Перечень требований заказчика (которые будут реализованы в рамках проектного решения).
  2. Список определений и сокращений.
  3. Перечень нормативных документов, регламентирующих автоматизируемый процесс.
  4. Описание порядка применения программного обеспечения (use case), которое может включать:

    описание автоматизируемого процесса (как правило, в формате BPMN не забывайте отмечать, как выполняется то или иное действие: автоматически, автоматизировано или вообще без компьютера) и предполагаемого результата;
    перечень ролей и их полномочий;
    определение необходимости ведения истории изменения объектов учета (необходимость хранения и последующего анализа предыдущих значений атрибутов объекта) пренебрежение данным пунктом может увеличить время разработки в разы;
    определение необходимости протоколирования действий пользователей (определение таких действий, связь с историей изменения объекта).
  5. Описание доработки:

    описание новых классификаторов и требования по доработке имеющихся, определение порядка их сопровождения;
    описание пользовательского интерфейса (UI) и правил его отображения (в случае, если в рамках проектного решения определяются схемы процессов, все экранные формы должны быть связаны с действиями на этих схемах);
    описание печатных отчетов и правил (алгоритмов) их формирования.
  6. Электронный обмен данными:

    описание форматов и регламента взаимодействия через API;
    описание форматов и регламента (последовательности) загрузки внешних данных в ручном режиме (в виде файлов);
    описание форматов и регламента (последовательности) выгрузки данных в ручном режиме в виде файлов.

    В качестве примеров проектного решения по электронному обмену данными может здорово пригодиться пакет стандартов, разработанный некоммерческим партнерством Стандарты некоммерческого обмена информацией (партнерство распалось в 2011 г., в настоящее время эти стандарты продолжает сопровождать компания ). Также могут помочь нормативно-эксплуатационные документы, размещенные на техническом портале Системы межведомственного электронного взаимодействия (СМЭВ).
  7. Определение полномочий доступа:

    определение атомарных действий, по которым должно (может) производиться ограничение доступа, определение иерархии этих действий;
    определение перечня атрибутов объекта, по которым должно (может) производиться ограничение доступа.
  8. Сценарий (синопсис) проведения тестирования, который включает последовательность выполнения и названия отдельных тестовых заданий, а также ожидаемый результат выполнения этих тестовых заданий. При наличии времени на проектирование в этот раздел могут включаться описание тестовых заданий (по шагам) и краткое описание тестовых данных. Именно в этом разделе должны находить отражение пользовательские истории (собранные и запротоколированные во время проведения информационных обследований), начальные условия выполнения программы, условия (ограничений) успешного завершения, альтернативные варианты завершения процесса. Сценарий проведения тестирования в обязательном порядке должен быть узнаваем со стороны заказчика.

Повторюсь это не фиксированная структура для проектного решения, это формальный перечень вопросов (checklist), ответы на которые должны быть при необходимости отражены в том или ином виде в проектном решении. Как показывает практика, если разработка в отношении одного из описанных выше элементов не предполагается будет лучше, если вы укажете это в проектном решении явно. Или почти явно (не надо пугать заказчика). Главный критерий однозначная трактовка. Важно не переборщить, чтобы вместо решения заявленного требования в результате его согласования не родилось пять новых. Например, фраза Справочник типов объектов должен содержать только актуальные значения и фраза В справочнике типов не предусматривается хранение истории изменений означают одно и то же, но вторая фраза с высокой долей вероятности приведет к тому, что вам придется описывать и реализовывать механизмы версионности этого самого справочника. При формировании проектных решений важно понимать, что его назначение зафиксировать правила, по которым вы гарантированно сдадите связанные с этими решениями требования.

Лучше один раз увидеть


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

Виллард Британ

Многое (если не все) на проекте зависит от того, как представители заказчика представляют себе конечный результат. Поэтому уже на начальных этапах проектирование макетов пользовательского интерфейса имеет ключевое значение для успешности проекта. Уточняйте и конкретизируйте требования заказчика в понятных ему терминах внешнего описания программного продукта. Диалог с представителями заказчика, основанный на обсуждении макетов экранных форм, показал себя гораздо более эффективным, чем диалог по обсуждению форматов входных и выходных данных и алгоритмов их преобразования (основные разделы в ОПЗ, созданном в соответствии с ГОСТ).

Отработка в рамках проектных заданий всех элементов пользовательского интерфейса, кроме прозрачности понимания границ реализации, также обеспечивает решение целого ряда проблем:

  1. Прототипирование пользовательских интерфейсов позволяет более точно определить сроки реализации функционала. Согласно статистике, точность экспертной оценки сроков программного проекта, выполненной на основе утвержденных макетов UI, в несколько раз выше, чем точность оценки на основе концептуальных требований технического задания.

    Источник: Стив Макконел. Сколько стоит программный проект. ISBN: 978-5-91180-090-1
  2. Грамотный UX-дизайн позволяет обеспечить формирование проектной и эксплуатационной документации еще до завершения кодирования. Сразу после согласования проектного решения, параллельно с разработкой, становится возможным формировать руководство пользователя (замена макетов интерфейса на скриншоты осуществляется во время выполнения задач тестирования).
  3. Фиксация макетов пользовательского интерфейса облегчает нахождение решения спорных вопросов при определении новизны требований. Если на согласованном макете UI не было поля, значит, его добавление это новое требование, выходящее за рамки согласованного проектного решения (следующий пример раскроет последствия добавления всего лишь одного поля на форму).
  4. Иногда, форма внезапно может оказать существенное влияние на содержание. Описанный далее случай произошел на четвертой неделе активного UX-проектирования и регулярного обсуждения с заказчиком макетов пользовательского интерфейса одной из подсистем АСУ. Заказчик охотно шел на общение, были уже предварительно согласованы схемы основных процессов и более 80% экранных форм. Мало того, чтобы ускорить разработку была уже создана база данных и по отдельным задачам в полную силу работали программисты. На одном из рабочих совещаний вдруг заместитель начальника управления (для которого собственно и создавалась подсистема) спросил: А где у вас тут поле даты?. Как выяснилось, он имел в виду, что программа должна иметь возможность отразить состояние дел (или сформировать отчет) на любую произвольную дату, и это при том, что ведение истории изменений ранее не обсуждалось. Все представители заказчика подразумевали, что это было совершенно очевидно и не требовало дополнительных пояснений. В результате небольшое замечание увеличило время разработки подсистемы почти в два раза. Надо отметить, что макеты форм практически не изменились, просто на некоторых добавилось поле По состоянию на дату Х.

Источник

Хотелось бы сказать несколько слов о принципах проектирования пользовательских интерфейсов для автоматизированных систем управления. Несмотря на лавинообразный рост использования мобильных устройств, для автоматизированных систем управления, применяемых в государственных учреждениях, настольные компьютеры и ноутбуки остаются вне конкуренции (так же, как и для решения задач программирования и системного администрирования). В настоящее время для прототипирования интерфейсов появилось множество разнообразных средств. Однако за разъяснением особенностей применения Figma или Axure в интересах мобильных устройств теряются 10% примитивных способов, которые позволяют проектировать 90% пользовательских интерфейсов АСУ.

Моя практика показала, что для значительного сокращения проблем при разработке ПО надо придерживаться нескольких простых правил при проектировании пользовательских интерфейсов.

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

Я не буду приводить здесь пример интерфейса IntelliJ IDEA или PhpStorm, однако попробую препарировать на составные части основные составляющие такого UI, с точки зрения аналитика автоматизированной системы управления.

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


Каждая из опций меню главной навигационной панели открывает доступ к формам-спискам объектов. Списки объектов (каталогов) и форм (карточек) отображения этих объектов формируют львиную долю пользовательского интерфейса. Унификация этих двух типов форм в рамках проекта и формирование на их основе навигационной структуры позволяют на порядок сократить количество запросов пользователей, связанных с недоработками пользовательской документации.

В рамках описания любой списковой формы при проектировании должны быть определены:

  • перечень выводимых полей-атрибутов;
  • требования к режимам просмотра списка (отображение по умолчанию, группировка, сортировка);
  • требования к подчиненной форме, связанной с элементом списка (карточка (таблица) оперативного просмотра);
  • требования к панели фильтров (выборка записей по заданному перечню атрибутов);
  • описание групповых операций (одновременные действия над несколькими элементами списка, например: сравнение элементов списка, изменение атрибутов для нескольких элементов списка, изменение прав доступа для нескольких элементов списка);
  • описание форм (панелей) оперативных статистических отчетов (мониторинга) по результатам выборки списка;
  • описание требований к отчетам для вывода на печать и алгоритм их формирования;
  • требования по оповещению пользователей (внешних систем) при изменении объектов.

При проектировании списковых форм хорошо зарекомендовали себя следующие правила:

  1. Все элементы управления формой должны располагаться в верхней части в форме панели инструментов при этом вероятность того, что пользователь потеряет их, сводится практически к нулю. При этом практика показала целесообразность отказа от строки иерархического меню в пользу ленточного интерфейса (ribbon).
  2. Для всех списков, как правило, на ленте должны присутствовать четыре группы элементов управления:
  3. При формировании статистических отчетов (в т.ч. и для вывода на печать) желательно не создавать специализированные формы для предварительной настройки этих отчетов. Сама списковая форма с ее возможностями выборки, сортировки и отображения объектов должна обеспечивать предварительную настройку требуемых отчетов. Другими словами по возможности отчеты должны формироваться на основе выбранных критериев при формировании списков.

В рамках описания карточки объекта при проектировании должны быть определены:


  • макет карточки просмотра;
  • перечень действий, которые можно произвести с объектом учета (CRUD, изменение статуса, согласование и т.п.) и требуемые для этих действий полномочия доступа;
  • описание правил валидации атрибутов при добавлении/редактировании;
  • перечень возможных информационных сообщений;
  • способы просмотра истории изменений объекта.

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

  1. В случае, если в ходе разработки требуются изменения уже существующих интерфейсов, не стоит изобретать велосипед. Здесь лучше всего себя проявил Paint.NET (с помощью которого, кстати, подготовлены картинки к этой статье). Не имеет смысла заново перерисовывать формы, проще изменить готовый скриншот.
  2. Если вы разрабатываете новый интерфейс пользователя, а ваш заказчик бумажная крыса, в таких случаях лучше всего себя зарекомендовал MS Visio со стандартным набором элементов управления. Не раз видел, как заказчик, который наотрез отказывался посмотреть разработанный интерактивный прототип, увлеченно обсуждал предлагаемые проектные решения, выполненные с использованием MS Visio, и рисовал очень интересные каракули на макетах, распечатанных на бумаге в цвете, выполненных в стиле привычного ему Windows.
  3. Если вы разрабатываете новую подсистему, а ваш заказчик - продвинутый пользователь, то интерактивные прототипы вне конкуренции. При этом с наилучшей стороны показал себя подход, когда эти прототипы строятся на основании того же самого фреймворка, который используется для создания интерфейса пользователя. В случае одного из моих успешных проектов прототип программного обеспечения строился на основе инструментов DHTMLX. Вместо базы данных для имитации работоспособности использовались статичные XML-файлы, сформированные на основе примеров таблиц, которые предоставил заказчик. Представления (view), созданные аналитиками в ходе прототипирования, использовались как заготовки для работы программистов. За счет низкого порога вхождения по использованию данного фреймворка, трудозатраты аналитиков на создание прототипов пользовательского интерфейса были соизмеримы с трудозатратами, если бы те же макеты экранных форм создавались в MS Visio. Правда, при этом некоторые представители заказчика не понимали, что еще надо программировать после того, как им продемонстрировали рабочую программу.

Неоднократно, приводя все эти доводы продвинутым разработчикам, далеким от проблем заказчика, я видел их тускнеющий взгляд и выслушивал их экспертную оценку убогости и перегруженности предлагаемого UI. Однако со временем, проанализировав опыт нескольких проектов, я подметил удивительную закономерность: если программист рьяно критикует отсталость и сложность разрабатываемых пользовательских интерфейсов, это верный признак того, что заказчик примет такой интерфейс на ура.

Строительные леса и опалубка


Обычно люди очень много думают. Но беда в том, что они думают о проблемах, а не о решениях этих проблем.

Дэвид Аллен

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

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

Источник

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

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

  • Анализ документов отчет по результатам анализа нормативных документов заказчика или проектной документации.
  • Аналитический обзор отчет по результатам анализа путей решения возникшей проблемы (как правило, сравнительный анализ новых технологий или тенденций рынка).
  • Информационное обследование отчет по результатам проведенного исследования существующих бизнес-процессов заказчика (формирование модели as is как есть).
  • Системный анализ материалы, описывающие в терминах разработчиков способ реализации требований заказчика одного из вариантов использования программного обеспечения (use case). Этот же тип аналитической работы организуется в случае необходимости реинжиниринга legacy-кода.
  • Анализ данных отчет по результатам исследования качества данных, загруженных в систему (выявление ошибок и противоречий).
  • Учебные материалы материалы, подготовленные для проведения обучения сотрудников заказчика или членов проектной группы.

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

Шаблоны описаний задач типа анализ
Тип материала Типовое описание постановки задачи в JIRA (требуемые результаты аналитической работы)
1. Анализ документа 1.1. Выявить перечень изменений по отношению к предыдущей версии документа
1.2. Выявить термины, которые вводит документ
1.3. Выявить и описать нормативные и неформальные классификаторы предметной области, которые указаны в данном документе
1.4. Выявить разделы документов, которые регламентируют автоматизируемые процессы
1.5. Выявить неоднозначности и противоречия
1.6. Сформировать предложения по устранению выявленных недостатков
1.7. Сформировать экспертное заключение о документе
2. Аналитический обзор 2.1. Уточнить цели и задачи решения проблемы
2.2. Подготовить перечень существующих решений (вендоры, основные характеристики, достоинства, недостатки)
2.3. Провести сравнительный анализ существующих решений
2.4. Сформировать предложения по решению проблемы
3.Информационное обследование 3.1. Сформировать перечень разделов нормативных документов, регламентирующих связанные требования.
3.2. Выявить основных участников (потребителей) автоматизируемого процесса, определить их роли и полномочия
3.3. Выявить процессы документооборота и организации делопроизводства (составить общий маршрут прохождения документов с условиями прохождения)
3.4. Определить формы требуемых отчетов и условия их формирования (порядок получения исходных данных, периодичность, сроки представления)
3.5. Выявить потребности по миграции данных и интеграции с другим ПО
3.6. Подготовить описание вариантов использования программного обеспечения в рамках связанных требований (описать пользовательские истории)
3.7. Подготовить примерный перечень тестовых заданий (сценарий контрольных точек проверки требований заказчика)
4. Проектное решение 4.1. Сформировать описание автоматизируемого процесса
4.2. Сформировать перечень ролей и их полномочий.
4.3. Определить требования по ведению истории изменений
4.4. Определить требования по протоколированию действий пользователей
4.5. Сформировать перечень используемых классификаторов
4.6. Подготовить и описать требования к пользовательскому интерфейсу
4.7. Определить требования к регистрации и отображению атрибутов
4.8. Определить правила валидации атрибутов и формирования информационных сообщений в случае нарушения этих правил
4.9. Определить требования по формированию отчетов
4.10. Определить требования по информационному обмену
4.11. Сформировать сценарий проверки реализации проектного решения
4.12. Уточнение проектного решения с ответственными программистами
4.13. Уточнить и согласовать проектное решение с представителем заказчика
5. Системный анализ 5.1. Уточнить (сформировать) общую структуру иерархии классов системы
5.2. Уточнить (сформировать) логическую структуру базы данных
5.3. Уточнить (определить) правила ограничения целостности и индексации данных
5.4. Описать алгоритм обработки в терминах базы данных (протокола обмена)
5.5. Сформировать описание протокола обмена (интерфейса взаимодействия)
5.6. Сформировать описание правил ограничения доступа
6. Анализ данных 6.1. Выявить данные не соответствующих действующим правилам валидации, выявить причину наличия таких данных (как правило, это тяжелое наследие запуска ПО в эксплуатацию)
6.2. Выявить противоречия классификаторов (микс зеленого, теплого и тяжелого)
6.3. Выявить закономерности распределения данных (тут я, конечно, слукавил, поскольку только эта строчка тянет за собой отдельную специализацию аналитика data mining)
6.4. Сформировать предложения о путях устранения выявленных ошибок и противоречий
7. Учебные материалы 7.1. Подготовить перечень учебных источников и нормативных документов
7.2. Разработать рабочую учебную программу
7.3. Подготовить презентацию
7.4. Подготовить перечень основных понятий и их определений
7.5. Подготовить перечень контрольных вопросов (тестовое задание на определение уровня подготовки)
7.6. Подготовить видеозапись занятия

Постановка задачи на разработку аналитических материалов предполагает краткое описание требуемых результатов, а не описание процессов анализа. Так, например, рекомендуется избегать формулировок типа провести анализ предметной области... или изучить документ.

План для маэстро


Всё должно быть изложено так просто, как только возможно, но не проще.

Альберт Эйнштейн

Зачастую, когда речь заходит о планировании работ по анализу и программированию, возникает множество споров о том, как можно оценить сроки получения результатов в этом случае. Однако проведенный выше анализ этой творческой деятельности позволяет сделать предположение о том, что в рамках программного проекта это все-таки возможно. Первым шагом к этому становится разбиение работ по проектированию системы на части, которые можно проконтролировать с периодичностью не менее раза в неделю. Необходимо стремится к тому, чтобы трудозатраты аналитика на формирование одного проектного решения не превышали 5 рабочих дней (в терминах объема такое проектное решение должно состоять примерно из 20-30 страниц согласно ГОСТ Р ИСО/МЭК 15910-2002). Соответственно по тем же нормативам на рецензирование того же проектного решения у программиста должно уходить максимум 3 часа.

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

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

Как правило, для получения сроков выполнения задач на анализ, достаточно экспертной оценки самого исполнителя, но в случае возникновения споров можно применить прагматичный подход. Для повышения объективности оценки трудоемкости задач на анализ может быть использован online-калькулятор, который позволяет спланировать и оценить трудозатраты на проведение аналитической работы. С использованием данного инструмента можно сформировать перечень запланированных работ, уточнить их формулировки в зависимости от специфики проекта. Для каждой из планируемых работ учитывается минимальная, максимальная и наиболее вероятная оценка трудозатрат. В результате расчета формируется ожидаемая трудоемкость выполнения задачи и рассчитывается оптимальный резерв времени, который необходимо оставить для страховки. Сформированное описание постановки задачи на анализ можно скопировать прямо в поле описания задачи JIRA.

Кроме общих атрибутов, описанных в статье JIRA: границы проекта, для каждой задачи типа анализ в JIRA опытным путем был определен следующий набор дополнительных (пользовательских) атрибутов.

Дополнительные атрибуты задачи типа анализ
Наименование атрибута Описание
Общие сведения
Тип материалов Тип аналитических материалов:

  • анализ документов;
  • аналитический обзор;
  • материалы информационного обследования;
  • проектное решение;
  • системный анализ;
  • анализ данных;
  • учебные материалы.

Результат решения
Актуальная версия Номер актуальной версии аналитического материала вручную изменяется ответственным аналитиком каждый раз, когда происходит загрузка соответствующего аналитического материала в репозиторий документации. Номер состоит из двух частей, разделенных точкой: [A].[B].

  • [A] позволяет отслеживать изменения, которые вносятся в документ по замечаниям заказчика, при этом используются следующие цифры: 0 для внутреннего рассмотрения (рабочий вариант); 1 для первого документа, согласованного внутри компании, при передаче его на рассмотрение заказчику; 2+ - варианты версий при переделке по замечаниям заказчика.
  • [B] позволяют отслеживать изменения, которые вносятся в документ по замечаниям членов проектной команды.

Дата согласования Дата согласования материалов со стороны заказчика
Согласовали Представители заказчика, принявшие результат работы аналитика
Статистика
Текст Количество страниц текста
Схемы Количество схем (рисунков)
Макеты форм Количество макетов экранных форм

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

1. В случае необходимости ответственный аналитик должен запланировать в JIRA задачи на проведение информационных обследований с представителями заказчика (эти задачи связываются с соответствующими требованиями).

Желательно до встречи в первом приближении сформировать макеты пользовательского интерфейса, которые можно будет обсудить с заказчиком. При проведении информационного обследования необходимо обсудить с заказчиком основной бизнес-процесс, с его точки зрения (пользовательскую историю user story), альтернативные пути, в каком виде заказчик видит конечный результат.

Часто встречался с мнением, что основой информационного обследования является интервьюирование компетентного сотрудника, который подробно расскажет об особенностях автоматизируемого процесса. Однако что хорошо для разработки в интересах коммерческого заказчика, для государственного может иметь самые неожиданные последствия. Неоднократно сталкивался с ситуацией, когда оказывалось, что описание процесса, сформированное на основе рассказов седых ветеранов, противоречит ключевым требованиям действующих нормативных документов. И это объяснялось не тем, что аналитик чего-то недопонял, а тем, что ветеран всю жизнь так делал.

Поэтому перед встречей с экспертами предметной области, необходимо проанализировать нормативные документы, с точки зрения регламентации процесса, предполагаемого к автоматизации. При этом важно понимать, что нормативные документы это тоже не истина в последней инстанции Зачастую, в нормативных документах при беспристрастном анализе всегда находятся неоднозначности и противоречия (исключением, как правило, являются документы написанные кровью). Отмечу наиболее распространенные разногласия, на наличие которых следует обратить внимание:

  • нарушение базовых принципов классификации, например, когда в рамках одной группы смешиваются разные признаки (красное, зеленое, теплое);
  • построение отчетных документов на основе атрибутов, учет которых не предусмотрен;
  • неопределенность или недостаточность нормативных атрибутов для однозначной идентификации объектов учета;
  • отсутствие описания требуемых действий при типовых форс-мажорных обстоятельствах;
  • юридические коллизии наличие расхождений или противоречий в содержании отдельных нормативно-правовых актов, которые регулируют одинаковые или смежные процессы.

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

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

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

4.После согласования с заказчиком (письмо, подтверждающее этот факт, сохраняется в JIRA), задачу по подготовке проектного решения можно переводить в статус выполнено.

Продолжение следует


В настоящее время проектирование программного обеспечения для государственных заказчиков чаще всего организуется в соответствии с требованиями ГОСТ 34 серии. При этом, ратуя за точное соответствие итоговой проектной документации этому ГОСТ, зачастую большинство представителей заказчика забывают о том, что кроме документации, которая предоставляется на испытания разработанного ПО, со стороны заказчика в рамках согласования эскизного и технического проектов должны быть утверждены проектные решения. И даже в том случае, когда согласовываются эскизный и технические проекты, не редкость, когда в угоду нереальным срокам при полном соблюдении формы игнорируется содержание. Особенно это характерно для проектирования систем, напрямую не связанных с безопасностью жизнедеятельности. Так на одном из проектов один заместитель руководителя учил жизни, рассказывая о том, как он сформировал с помощью Википедии 500-страничный технический проект за одну ночь. Расхлебывать результаты таких проектных решений приходится, как правило, совсем другим людям.

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

Разбиение аналитической работы на элементарные действия также позволило координировать действия нескольких сотрудников с разным уровнем подготовки и, как следствие, естественным образом сформировать матрицу компетенций для аналитиков нашего проекта в ЛАНИТ, которую я планирую обсудить в следующей статье.
Подробнее..

Чем заняты сотрудники? Анализируем Jira Software

17.11.2020 18:17:45 | Автор: admin
Таск-треккер как исправный источник данных для стратегического управления. Звучит красиво. А в нашей компании это даже работает и приносит пользу.

Данная статья является углублением к предыдущей: Автоматизация аналитики Jira средствами Apache NiFi. Теперь хочу подробнее раскрыть наш взгляд на отчетность по Jira Software и опыт ее реализации при помощи R. Язык тут, конечно же, не догма. Сегодня наше все это концепция.

image

Картинка позаимствована тут.



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

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

Таки да, нам это удалось. Правда, не обошлось без помощи PM-a попервой.

Реорганизация таск-треккера


Разумеется каждая конкретная Jira существенно отличается от какой-либо другой. И наше решение вполне может не быть для вас самым эффективным или же вообще применимым.

Прошу расценивать это лишь как идею организации таск-треккера, на примере нашей аутсорсинговой компании.

Мы сделали всего два движения.

Первое и самое простое. Приняли, что все задачи в рамках одного направления должны быть привязаны к эпику, обязательно. Эпики это наиболее крупные объекты в Jira, представляющие собой множества задач. Они помогают создавать иерархию и структуру, а также могут охватывать несколько спринтов и версий.

О втором чуть подробнее. Нам удасться увидеть общую картину и ответить на стратегические вопросы, если рабочий процесс будет представлен в виде некого потока, в который каждый сотрудник делает свой вклад. Для этого, в нашем случае, идеально подходит концепция IT4IT, со своей операционной моделью, базирующейся на четырехпотоковой цепочке создания ценности:
image
Собственно, что мы сделали. Воспользовавшись IT4IT, добавили такое понятие как компонента задачи в Jira. У нас они следующие:

  • Service to Portfolio (Demand and Selection) стадия раскурки, поиска, выбора сервиса, технологии.
  • Request to Deploy (Plan and Design) обсуждение, планирование разработки, развития услуг, сервисов.
  • Request to Deploy (Develop) разработка услуги, сервиса чего либо.
  • Request to Deploy (Deploy) развертывание чего либо.
  • Request to Deploy (Test) тестирование сервиса, услуги.
  • Request to Fulfill этап эксплуатации разработанных сервисов, предоставление услуг.
  • Detect to Correct (Correct) исправление, доработка внутренних сервисов и услуг.
  • Detect to Correct (Monitor&Feedback) тоже самое, только + общение с клиентом.

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

Аналитика данных в R


Теперь препятствий для реализации отчетности быть не должно. Сформулирую подобие ТЗ.

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

Зная что нам нужно добыть идем выгружать данные. Через Jira API запрашиваем все таски (issue), обновленные на прошедшей неделе. Добываем из них ключи и к каждой таске догружаем историю логирования (worklog) и историю изменений (changelog). Извращения с догрузкой необходимы, чтобы обойти ограничения апишки.

Далее начинается зона ответственности R, т.к предобработка полученых данных это составляющая скрипта генерации отчета.

В ней нету чего-то заумного, необходимо просто распарсить JSON-ы, пришедшие от апи и оставить только необходимые свойства (пункты в Jira). Единственный момент, при обработке changelog-а нам интересны только изменения статуса задачи, остальное можно смело удалять.

Ну и, наконец-то мы подобрались к аналитике.

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

# Открыто тасокthis_week_opened <- jira_changelog_data %>%         filter(issue_type != "Epic") %>%         filter(as.Date(issue_created) >= start_date) %>%         filter(as.Date(issue_created) <= end_date) %>%   select(key, issue_created) %>% unique() %>% nrow()# В работеthis_week_processed <- jira_worklog_data %>% filter(as.Date(started) >= start_date) %>%         filter(as.Date(started) <= end_date) %>%   select(key) %>% unique() %>% nrow()# Закрытоthis_week_closed <- jira_changelog_data %>%         filter(issue_type != "Epic") %>%         filter(as.Date(issue_resolutiondate) >= start_date) %>%         filter(as.Date(issue_resolutiondate) <= end_date) %>%  select(key, issue_created) %>% unique() %>% nrow()# Отправлено в холд / бэклог this_week_holded <- issue_history %>% filter(change_date >= start_date) %>%         filter(change_date <= end_date) %>%filter(toString == "Hold" | toString == "Backlog") %>%   select(key) %>% unique() %>% nrow()


Не напоминает ли вам это псевдокод? А если я скажу что оператор '%>%' передает данные от предыдущей функции к следующей. А последняя модификация во всей цепочке будет сохранена в переменную. Представьте себе, мы только что поднялись на порог вхождения в R!

Вы еще не влюбились в него? Тогда, если позволите, я насыплю еще немного инфы.

Словеса из Википедии:
В целом, как язык программирования, R довольно прост и даже примитивен. Его наиболее сильная сторона возможность неограниченного расширения с помощью пакетов.

В базовую поставку R включен основной набор пакетов, а всего по состоянию на 2019 год доступно более 15 316 пакетов.

И последнее на сегодня. В этом году R ворвался в десятку самых популярных языков в мире (пруф). Горжусь им.

Прошу простить мне сие отступление. Об R я могу говорить часами. Просто он насквозь окутан мифами, а я люблю их разрушать хобби, знаете ли.

Вернемся к отчету. Имея искомые цифры, визуализируем их. После этого оформляем логирование сотрудников. Вот как выглядит данная часть у нас:

image

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

Направление нашей деятельности отражает следующий график. Он также позволяет оценить загруженость сотрудников операционной деятельностью.

image

А вот и разрез всех задач по компонентам. Он и дает ответ на вопрос чем мы занимаемся. Картину дополняю цифрами.

image

Ну и обещанный вклад каждого сотрудника в общую картину, приведенную выше.

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

image

Реальный отчет так же дополнен сводкой движения задач. Это дополнение к общей статистике, размещенной в самом начале, с названиями задач и именами ответственных людей.

Генерация отчета


Настроить автоматическую генерацию отчета, например, по понедельникам из R скрипта можно с помощью пакета cronR, это исключительно просто.

У нас же все сложнее и изящнее. Еженедельную выгрузку данных из Jira API, запуск скрипта генерации отчета и отправку отчета всем сотрудникам по Email мы реализовали с помощью Apache NiFi. Эта тема насколько обширная, что вполне себе заслужила отдельную статью.

Заключение


Количество реализаций Jira Software, как и количество компаний где она используется уйма. Каждый босс, при этом, нуждается в своей уникальньной базе метрик для тактически верного управления. Да, существует eazyBI и другие плагины для Jira аналитики, но в результате это как покупка костюма в магазине, вместо пошитого на заказ Bespoke.

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

Спасибо.
Подробнее..

Как мы пользуемся Jira Query Language на практике

13.12.2020 16:23:06 | Автор: admin
Всем привет!

Меня зовут Сергей Раков, я руководитель B2G-направления в компании Ростелеком ИТ. Я хочу рассказать про язык Jira Query Language (JQL): как им пользоваться на практике, основные приемы, с какими проблемами мы сталкивались и как их решали.

imageОригинал картинки взят у deviniti.com/atlassian

Таск-трекеров очень много, каждый подходит для решения одних задач и не очень помогает решать другие. Многими из них мы пользовались, но сейчас остановились на Jira она наш основной инструмент. Лично мне очень нравится ее язык JQL, который сильно упрощает работу и позволяет из коробки иметь мощный и гибкий инструмент для поиска тикетов.

Из коробки в Jira существуют базовый и продвинутый поиски. Эти два варианта поиска позволяют решить бoльшую часть стоящих перед пользователем задач. Базовый поиск привычен глазу любого человека, кто хоть раз пользовался услугами интернет-магазинов работает по точно такой же простой схеме. Есть множество фильтров: по проектам, типам задач, по исполнителю и статусу. Также можно добавить дополнительные поля по критериям, которые поддерживаются Jira.

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

На помощь приходит продвинутый поиск. Синтаксис JQL очень похож на SQL. Но в JQL не нужно выбирать конкретные поля, которые будем селектить, указывать таблицы и базы данных, из которых будем выводить. Мы указываем только блок с условиями и работаем с сортировкой все остальное Jira автоматически делает сама.

Все, что нужно знать для работы с JQL это названия полей, по которым будем выбирать тикеты, операторы (=, !=, <, >, in, not in, was, is и т.д.), ключевые слова (AND, OR, NOT, EMPTY, ORDER BY и т.д.) и функции, которые из коробки доступны в продвинутом режиме (Now(), CurrentUser(), IssueHistory(), EndOfDay() и другие).

Поля


Jira при вводе в строку поиска сама выдает подсказки всех возможных значений, которые вы ищете: как по полям, так и по значениям этих полей. Для себя я недавно открыл интересное системное поле lastViewed. Jira хранит историю ваших просмотров тикетов.
image
Здесь представлены два варианта составления фильтров для просмотра последних задач. Первый мой вариант с lastViewed, где Jira выдаст просмотренные мной задачи за последние семь дней, отсортированные по убыванию. Этот фильтр настроен на моем дашборде в виде гаджета, и я к нему часто прибегаю. Потому что тикет закрылся, вкладку и номер не запомнил, быстро открыл, посмотрел, какой был последний тикет.

Есть стандартный фильтр Viewed Recently. Он использует функцию IssueHistory(), сортировка тоже производится по полю lastViewed. Результат одинаковый, но способ, даже в Jira, можно использовать разный. Стоит отметить, что поле LastViewed и IssueHistory() возвращают только вашу историю просмотра историю третьих лиц таким образом посмотреть не получится.

image
По большей части в Jira все операторы стандартные. Мне больше всего нравятся операторы WAS, WAS IN, WAS NOT IN, WAS NOT, CHANGED, потому что они работают с временем. В обычных базах данных такой возможности нет.

image

Jira из коробки позволяет работать с историческими данными. С помощью оператора WAS можно найти тикеты, где исполнителем был и есть User1. Если тикет был на мне, а потом перешел на кого-то еще, запрос покажет, что этот тикет когда-то был на мне. Понятно, что для более подробной выборки нужно добавить еще какие-нибудь условия, но мы к этому еще подойдем.

Правда, есть одна оговорка: Jira не хранит историю для текстовых полей: названий тикетов и их описаний. Там нельзя написать: Выведи мне тикеты, в которых поле Summary содержало слово Ростелеком.

Второй пример с оператором CHANGED. Мы хотим получить тикеты, в которых исполнитель был изменен после 1 января 2020 года. Можно использовать другие дополнительные слова, например, BEFORE или знаки >, <, кому как удобнее, и конкретную дату. В этом же примере можно еще сделать отрицание и увидеть, какие тикеты на каких пользователях зависли: assignee not changed AFTER 2020-01-01.

Ключевые слова


image
Основные ключевые слова OR, AND, NOT. Они работают так же, как и логические операторы. Используя OR, мы получим полный набор тикетов из двух проектов A и B. Если нужно сузить выборку, используем AND. Пример нам нужны тикеты из проекта A, по которым исполнителем был юзер B: project = A AND assignee = B. С отрицанием то же самое.

Функции


Согласно документации, в Jira 47 функций, но я никогда не использовал их все. Вот несколько, по моему мнению, основных:

image

now() популярная функция, которая позволяет найти тикеты у которых, например, истек планируемый срок реализации.

currentUser() возвращает текущего пользователя. Jira содержит преднастроенные фильтры, в которых используется эта функция. С currentUser() можно делать универсальные поисковые запросы. Я так делал универсальный дашборд для всей команды разработки: напихал гаджетов на дашборд и в каждом указал вместо конкретного юзера currentUser(). Этот дашборд будет уникальным для каждого залогиненного пользователя, хотя конфигурация будет одинаковая.

unreleasedVersions() это функция, возвращающая тикеты, которые находятся в невыпущенных версиях. Но она не возвращает тикеты, у которых версия не проставлена.

startOfDay() возвращает начало текущего дня. Есть функции для недели, месяца и года. Это же относится и к закрывающей функции endOfDay(). Они позволяют отвязаться от конкретных дат, им можно задавать аргументы: если написать startOfDay(-1), то вернется начало предыдущего дня. Если оставить все как есть, то отобразится начало дня текущего на выходе будет время. Эти функции помогают избежать хардкода, мы очень часто ими пользуемся.

С issueHistory() я уже приводил пример, эта функция возвращает список только ваших просмотров.

linkedIssues() функция, которая позволяет найти тикеты, которые прилинкованы к конкретному тикету.

Это самые простые функции. Но давайте немного углубимся и посмотрим на более сложные связи.

assignee was currentUser()AND fixVersion was inunreleasedVersions()AND created > startOfYear()

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

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

Третье условие дата создания. Мы фильтруем только те тикеты, которые были созданы с момента начала текущего года.

Функции ScriptRunner


Это плагин, значительно расширяющий возможности Jira. Обычно его используют для автоматизации процессов, но также он добавляет очень много дополнительных функций к JQL. ScriptRunner был нашим самым первым плагином, который мы поставили сразу, как только переехали в Jira в конце 2018 года. Я очень активно просил поставить этот плагин, потому что без него не мог собрать данные по связям с эпиками. Мне, например, часто нужно было вернуть все тикеты эпиков по определенному запросу или все эпики для тикетов из подзапросов. ScriptRunner позволяет все это успешно проделывать.

Чтобы пользоваться функциями ScriptRunner, нужно в JQL добавить дополнительное слово issueFunction in или not in. Далее идет функция, например, epicsOf() она возвращает эпики тикетов, которые удовлетворяют условиям подзапроса. Подзапрос идет на второй строке в скобках, и мы его рассмотрим подробнее.

issueFunction in epicsOf("worklogDate >= startOfWeek(-1) AND worklogDate <= endOfWeek(-1)")AND project in ("Видео.B2G")

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

Сам запрос начинает выполняться со скобок, то есть с подзапроса worklogDate даты списания. Дальше идет уточнение >= startOfWeek(-1) начало недели. Но обратите внимание на цифру -1: она означает, что нам нужен не этот понедельник, а прошлый. А еще worklogDate <= endOfWeek(-1), то есть она меньше окончания прошлой недели. Этот запрос будет выдавать тикеты, не важно какие баги, таски, user story, на которые сотрудники списывали времяс понедельника по воскресенье прошлой недели.

Фишка в том, что функции startOfWeek() и endOfWeek() позволяют отвязаться от даты. Вне зависимости от того, в какой промежуток текущей недели я делаю этот запрос, он отдаст мне один и тот же скоуп эпиков. Как только закончится эта неделя, он вернет эпики по ней. Удивительно, но не все пользуются этой возможностью: недавно изучал открытые запросы, которые публично расшарены, и увидел там много хардкодных дат. И есть подозрение, что эти даты постоянно меняются. Да и что говорить, в начале сам так делал.

Выполнив подзапрос, мы получаем обычный набор тикетов. Дальше вступает функция epicsOf, которая дает нам перечень эпиков, связанных с этими тикетами. А дальше идет фильтрация по проекту, ведь мне нужны эпики только по моему проекту, и не интересны все остальные.

Следующий запрос эпики со списаниями в этом году, но без контрактов. Этот запрос появился из-за того, что мы используем Jira не только как таск трекер, но и для ведения финансового учета. Есть отдельный проект под контракты, которые мы ведем в виде тикетов, и используем как систему электронного документооборота: статусы постоянно меняются, мы линкуем контракты с эпиками, знаем, сколько у нас людей списалось в какой эпик, знаем, сколько это стоит, и затем по каждому контракту выставляем стоимость работ. Плюс через контракты переносятся трудозатраты в Redmine 2.0. То есть мы списываемся в Jira, а затем автоматические скрипты переносят наши затраты в в Redmine 2.0 по этим контрактам.

Когда эта автоматика заработала, ко мне начали прилетать запросы от коллег вида: есть эпики, трудозатраты которых нельзя перенести в Redmine, потому что там нет контрактов. Рассмотрим запрос подробнее.

issueFunction in epicsOf("worklogDate >= startOfYear()")AND issueFunction not in hasLinkType(Contract)AND project in ("Видео.B2G")


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

Contract в скобках это тип внутренней связи, соединяющей контракты с эпиками. hasLinkType() функция в ScriptRunner, возвращающая тикеты с этим типом связи. Но мне нужны тикеты, которые не содержат этот тип связи, и поэтому использую отрицание not in.

При выполнении первого условия у меня появился скоуп эпиков, актуальных в этом году. Далее отфильтровались эпики без контрактов, и в финале по конкретному проекту Видео.B2G. Таким образом я получил все эпики, с которыми можно работать.

И в конце хочу предложить пройти небольшой тест из трёх вопросов по теме этого поста. Займет 2 минуты. После прохождения увидите свою оценку. Ссылка на опрос: https://docs.google.com/forms/d/e/1FAIpQLSdGrUZZVB62W_1-nC42Aoaz0nO5jUFTK-qIzPDKLX58u5SzCg/viewform?usp=sf_link

Буду рад что-то уточнить или ответить на вопросы в комментариях, если они у вас есть.
Спасибо.
Подробнее..

КакстроитьдиаграммуГанттапоJira-тикетам

04.06.2021 08:06:10 | Автор: admin

Время чтения: 5 минут

Статья для менеджеров, которым необходимо вести управление проектами и ставить сроки в изменчивом мире Agile. Поделюсь опытом использования двух приложений Jira Roadmap и Structure Gantt.

Пример Диаграммы Гантта Пример Диаграммы Гантта

Ганттдля(ленивых) экономящих свое время

Для построения диаграммыГантта существует множество программ: Ganttpro, Monday, Teamgantt,старый добрыйExcelи другие.

Нам с коллегами в Ozonони не подходили,потому чтоежедневная работа завязана наJira-тикеты.Чтобы пользоваться сторонними сервисами, приходилосьпереписывать всю информацию изJiraещёраз (название задачи, исполнитель, связи, статус).Этотребовало много времении терпениянамонотонную механическую работу.

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

  1. JiraRoadmap

  2. StructureGantt

JiraRoadmap

Этимприложением япользоваласьнесколько месяцев, когда заказчикам и руководству нужно было срочно показать план реализации проектов. На временной ленте отражалиськолбаскиэпиков, историй и некоторых задач.К нему удобно было обращаться для иллюстрации картины большими мазками: проекты на год, на кварталы. Для ежедневной работы сJira-тикетамии детального планирования проектов ононеподходило:неполучалосьвместить все задачи.

Jira RoadmapJira Roadmap

О приложенииStructureвOzonбыло известно давно. Однакоононебросалось в глаза,пока не обратили внимание на еговозможность строитьдиаграммуГантта.Рекламное видео отправило всех в менеджерский рай: информация из Jira-тикетовотражается, можно группировать задачи по статусу, связи подсвечиваются, не мешает команднымKanban-доскам.Минимум монотонной механической работы.

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

StructureGanttк функционалуStructureдобавляется возможность видетьJira-тикетыи связи между задачами на временной ленте.

Structure GanttStructure Gantt

В конце 2020 годаруководители Ozon приобрелиStructureGanttдля удобного и наглядного ведения проектов. Однаков менеджерском раю оказаться сразу не получилась.Причины: сложная функциональностьи отсутствиенаглядногообучающего материала.

Перестать страдать отStructureи начать использоватьегодля работы я смогла где-то через месяц. Разобраться удалось благодаря тому, что мы обсуждали проблемы функциональности совместно и подсказывали друг другу решения в кругу менеджеров:

  • В чате Slack#jira-structureможнобылооперативно получить ответ на вопрос по работе приложение или поделиться своими находками.

  • Ходили друг к другу в настройкиStructure подсмотреть, как ребята в других командах справляются с похожимизадачами.

  • Созванивались и пытались коллективным разумом найтивыход из тупиковых ситуаций.

Слабые стороныStructureGantt

Сильные стороныStructureGantt

Сложно разобраться с инструментом

Богатаяфункциональность

Невозможно увидеть время переходаJira-тикетыиз одного статуса в другой

Вся информация автоматически дублируется междуJira-тикетамииStructureGantt

В мануалах нет примеров использованияна практике

На одном экране помещается большое количество данных

Примеры использованияStructureGantt

Два слова о специфике работы. Я менеджер команды разработки, отвечающей за загрузку товаров на сайтOzonMarketplace.Менеджер проекта,ProductOwnerи культорг в одном лице. Мне нужнокоординироватьпроекты внутри команды и между отделами, планировать спринты и распределять задачи между разработчиками, следить за поддержкой и контролировать выполнение задач к сроку.

У нас в командесемьбэкенд-разработчиков,двафронта,одинаналитик,одинQA итехлид. Держать информацию по всем задачам в головенереально, поэтому важно уметь еёбыстро находить.

Есть несколько режимовStructure Gantt, которые я меняю в зависимости отконтекста, чтобы минимизировать объём работы.

Планирование и мониторинг проектов

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

На ранних стадиях проектаразработчикине всегдасразумогут сказать, скольков точностинужновременина ту или иную задачу. Поэтому я стараюсь завести большетикетови растащить один за другим на временной ленте:на одну задачумесяц, на другуюдвенедели,натретью неделю. Такпрогноз напротяжённостьпроекта становится яснее.

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

Описание статуса проектатолько структура без диаграммыГантта

Использую, когда нужнаконкретная информацияв срезе всехJira-тикетов. Например, необходимо быстро проверить, что даты начала и конца всех проектов совпадают с цифрами вотчёте. В таком случае я сворачиваюГанттив столбиках структуры быстро вижу необходимые цифры. Собиратьинформациюпо временной ленте было бы неудобно.

Планирование спринта

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

Мои любимыефичиStructureGantt

В этой части хочу рассказать вам подробнее о пункте богатая функциональность из спискасильных сторонStructureGantt.

Связи между задачами

История декомпозирована,Jira-тикетына задачи заведены. На следующем этапе при растягиванииколбасокповременной ленте я расставляю связи междутикетами. Делаю так,чтобычётковыделить,какая задача заблокирована иликакиезадачи должны быть закончены одновременно (классические зависимостив управлении проектами:finishtostart,finishtofinish).

Цвета

Цветовое разделение помогаетлегче ориентироваться междуколбасками.Я делаю так:задача на бэкенд-разработкусиняя, фронтжелтая, багкрасная, поддержкасерая,историязеленая,дизайнфиолетовая.Это позволяет нагляднее увидеть, какого типа задач больше.Например, еслибагов в проектебольше, чем остальных задач, тоскорее всего, этосигнал о проблеме в разработке.

Переход между режимами

В примерах использованияStructureGanttя говорила, что переключаюсь между режимами в зависимости от занятия. Помогает мне в этомкнопка, удобно расположеннаяв центре экрана. Переключение не занимает много времени, поэтому я часто им пользуюсь.

Выбор за вами

Нам с коллегами Structure Gantt позволяет собирать всю нужную информацию из Jira в одном месте. Получается больше порядка и контроля над проектами.

При этом у Structure Gantt есть свои слабые стороны. Буду рада, если продакты ALM Works (создатели Structure) обратят внимание на них и сделают программу более простой и понятной в освоении.

Во время подготовки статьи я обнаружила, что функциональность Jira Roadmap заметно изменилась c лета прошлого года. Набор возможностей стал похож на то, что предлагает Structure Gantt.

Если выбираете приложение к Jira для ведения проектов и создания диаграмм Гантта, попробуйте оба варианта. Главное старайтесь оптимизировать затяжную механическуюработу.У насменеджеров есть много других важных задач, помимо рутины!:)

Ссылки

  1. Описание функционала на сайте Atlassian JiraRoadmap и StructureGantt

  2. Рекламное видео "What is Structure.Gantt?"

Подробнее..

Как мы используем Confluence для разработки требований к продукту

17.02.2021 14:23:34 | Автор: admin


В статье описаны наши подходы к использованию Confluence в качестве инструмента для работы с требованиями к продукту. Не претендуем на универсальность, но, возможно, эти подходы будут полезны для решения ваших задач, которые не обязательно связанны с процессами разработки требований (ведение пользовательской документации, описание внутренних регламентов работы отдела, организация базы знаний и пр).

Все изменения в требованиях к новой фиче на одной странице


Мы разрабатываем сложные Enterprise-продукты, которые тиражируются для сотен корпоративных заказчиков. В одном из наших продуктов больше ста функциональных модулей и у каждого модуля есть отдельный документ с требованиями. Фичи нового релиза, как правило, затрагивают несколько (от 3 до 20) функциональных модулей.



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

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



Примерно так это выглядит в жизни:



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

Технически это реализовано с помощью плагина Multi Excerpt, который позволяет вставлять части одного документа в разные документы.

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


На странице документа с новой функциональностью:
Добавляем макрос Multiexcerpt include. В нём указываем, какой блок из какой страницы нужно вставлять:


Готовая страница фичи в режиме редактирования выглядит примерно так:


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



Делается это с помощью стандартных макросов Отчёт о свойствах страницы и Свойства страницы.

Подробнее...
На каждую страницу с требованиями к функциональным модулям добавляется метка (тэг) новой функциональности и макрос Свойства страницы. В этот макрос добавляется стандартная таблица, в строках которой заполняются нужные свойства (на первый взгляд кажется сложно, но в документации всё подробно описано).



А на страницу фичи добавляется макрос Отчет по свойствам страницы, в нем указывается метка фичи, а также список свойств, которые необходимо отображать.



Трассировка требований


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

Чтобы отследить влияние функциональных модулей друг на друга и не забывать о связанных изменениях в требованиях, мы используем функциональные возможности меток (тэгирование). Получается своего рода трассировка требований, но с крупным шагом: на уровне функциональных модулей, а не атомарных требований.



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

Для этого мы используем стандартную функциональность меток в Confluence и макрос Результаты поиска.

Подробнее...
На примере функционального модуля Карточка Персоны:
  • Находим все функциональные модули, на которые может повлиять изменения требований к карточке Персоны
  • Добавляем в них соответствующий тег (в нашем случае это #person)
  • Добавляем макрос Результаты поиска на странице требований к карточке Персоны



В режиме редактирования это выглядит так:



А читатель видит так:



Версионирование требований по релизам


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



Так выглядит в жизни переключение между версиями релизов:



Комментирование


Для работы с комментариями мы используем плагин Talk.



Его плюсы:

  • Можно видеть комментарии и отвечать на них в режиме редактирования документа. Это очень удобно, когда надо вносить правки в требования по результатам ревью
  • Нет проблем с параллельным комментированием (особенно если вы планируете переход с MS Word + Sharepoint: не нужно блокировать документ целиком), требования может рецензировать одновременно вся проектная команда
  • Если комментарий оставляют на странице с фичей в блоке с Multi Excerpt, он автоматически появляется в исходном документе требований

Кроме этого, у него есть приятные функции, такие как выделение комментариев разными цветами, управление видимостью для разных пользователей и лайки.

От стандартного функционала комментирования в Confluence мы отказались, потому что у него были критичные для нас минусы:

  • Нельзя использовать в связке с плагином Multi Excerpt
  • Не видно комментариев в режиме редактирования документа
  • Пропадают комментарии, если изменить текст, к которому они были привязаны

Создание диаграмм и мокапов


Сначала мы использовали MS Visio и экспортировали схемы в растровый формат, а затем загружали в Confluence. Такой подход был неудобен актуальность схем приходится поддерживать в двух местах, для этого нужно слишком много действий.

Как оказалось, в Confluence есть множество плагинов для работы с разного рода графическими объектами (диаграммы, схемы, мокапы и пр). Balsamiq Wireframes for Confluence и Draw.io Diagrams for Confluence позволяют редактировать графические объекты, не выходя из Confluence. На данный момент эти плагины почти полностью покрывают наши потребности.
image

Базовые возможности


Кратко расскажу о базовых возможностях, которые предоставляет Confluence (как и большинство других вики-систем). Чтобы не пересказывать документацию, ограничусь списком того, чем мы в основном пользуемся:

  • Сравнение версий документов. Можно быстро понять, как менялась функциональность от релиза к релизу.
  • Параллельное редактирование одного документа и автоматическое разрешение конфликтов. Ревью документа могут делать одновременно несколько человек и при этом не нужно ждать своей очереди, пока документ заблокирован на редактирование другим сотрудником (как было, когда мы использовали Sharepoint и требования хранились в виде Word-файлов).
  • Шаблоны документов. Мы создали шаблоны по всем основным типам документов (функциональный модуль, фича, протокол совещания)
  • Гибкие возможности разграничения доступа (вплоть до уровня страницы). Это удобно, например, для аутсорсных сотрудников, которым нельзя предоставлять доступ сразу ко всем требованиям
  • Экспорт документов в различные форматы. Очень выручает в тех редких случаях, когда возникает необходимость передачи документов наружу.
  • Интеграция с JIRA. Можно автоматически вставлять статус задач, сроки согласований и прочей информации из тикетов JIRA.

Переход с MS Word


Есть несколько неочевидных вещей, с которыми почти сразу сталкиваешься после перехода с Word на Confluence.

Нумерация заголовков


Чтобы добавить автоматическую нумерацию заголовков, нужно обрамить текст макросом Numbering headings.



Гиперссылка на раздел


Чтобы внутри документа сослаться на какую-нибудь часть документа или заголовок раздела, нужно сначала добавить макроc Anchor (в русской локализации он называется Анкер), а затем добавить гиперссылку на него из нужной части документа.

Подробнее...
Добавляем макрос Anchor и указываем его имя (Вставить -> Другие макросы -> Anchor):



Так он выглядит в документе в режиме редактирования:



Затем вставляем ссылку на этот якорь в документе (Вставить -> Ссылка -> Дополнительно):

  • Для создания ссылки на другой документ перед названием якоря указываем название документа, на который нужно сослаться, затем символ # и после него название якоря.
  • Для создания ссылки на текущий документ перед названием якоря просто указываем символ #.



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

Цвет фона текста


Сделать нестандартное визуальное оформление текста, в частности выделить фон текста
заливкой, можно с помощью Markdown-разметки (Вставить -> Разметка, Markdown).



Используйте этот код
Для заливки мы используем такой код:
<span style="background-color: rgb(202,225,255);">текст</span>

Подставьте RGB-код нужного вам цвета.

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

Это не очень удобно, но другого способа выделять текст заливкой мы пока не нашли.
Из минусов:

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

На этом всё. Задавайте вопросы в комментариях!

P.S. Статья основана на базе доклада Лайфхаки Confluence для разработки требований на конференции Analyst Days, видео версию этого доклада можно посмотреть по этой ссылке.

Автор статьи: Ильшат Габдуллин g1r
Подробнее..

Из песочницы Миграция Jira Service Desk из облака на сервер

15.11.2020 18:09:06 | Автор: admin
Не буду спорить, что использование SaaS-ов, и в частности Jira Service Desk Cloud, удобно и облегчает работу системным администраторам. В целях безопасности или более гибкого управления сервисом, которое не предоставляет облако, может потребоваться перенос сервиса из облака на сервер организации.

Процесс миграции Jira Service Desk(JSD) можно условно разделить на три этапа:

  1. Подготовка резервной копии(бэкапа).
  2. Подготовка сервера. Установка программного обеспечения. Настройка.
  3. Развертывание бэкапа из облака на сервере.

К подготовке сервера можно отнести установку операционной системы на сервер, установку программного обеспечения, настройку. Сервер может быть как физическим, так и виртуальным. В моем случае будет использоваться CentOS 7, а программное обеспечение будет автоматически устанавливаться простым скриптом. Установка CentOS 7 описана не будет. Будем считать, что ОС уже установлена.

Технические требования к серверу можно посмотреть по ссылке.


1) Подготовка резервной копии.

Сделаем бэкап нашего облачного JSD.

Заходим в системные настройки облачного JSD, вкладка Управление резервным копированием.

image

Сделаем резервную копию сервера.

Выбираем полную миграцию сервера и загружаем резервную копию. На резервное копирование есть ограничение в 48 часов. То есть, после создания бэкапа, следующий можно будет сделать только через 2 дня.

2) Подготовка сервера. Установка программного обеспечения. Настройка.

Скрипт можно скачать тут любым удобным для вас способом.

Запускаем терминал или подключаемся к серверу по SSH.

Добавим права на выполнение скрипту командой:

sudo chmod +x soft_install_c7.sh

Запускаем скрипт командой:

sudo bash soft_install_c7.sh

image

Начнется обновление и затем установка программного обеспечения.

Кроме установки ПО скрипт создаст базу данных(БД) в Postgre Sql

При создании БД скрипт может ругнуться на доступ. Ничего страшного, база будет создана.

image

После завершения исполнения скрипта можно зайти в консоль Postgre Sql и убедится в этом.

image

В процессе исполнение скрипта необходимо будет ввести e-mail и пароль для настройки pgAdmin 4 и ответить на несколько вопросов.

image

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

image

Порты для работы JSD можно оставить по умолчанию или выбрать другие.

Правила брандмауэра для корректной работы Apache, pgAdmin 4 и JSD добавятся автоматически. По умолчанию скрипт откроет порты 80, 8080 и 5432.

Добавить порт по своему усмотрению можно командой:

sudo firewall-cmd --zone=public add-port=порт/tcp permanent

Удалить порт можно командой:

sudo firewall-cmd --zone=public --remove-port=порт/tcp --permanent

Посмотреть все правила брандмауэра можно командой:

sudo firewall-cmd list-all или sudo iptables -L -n -v line-numbers

Для перезагрузки брандмауэра используйте команду:

sudo firewall-cmd --reload

image

Исполнение скрипта завершится сообщением DONE!

В завершении подготовки сервера можно подключить pgAdmin 4 к серверу Postgre Sql через адрес локальной петли 127.0.0.1, или как вам больше нравится. Измените настройки в pg_hba.conf на актуальные для вашей конфигурации, если это необходимо.

image

Логин и пароль для базы можно посмотреть в скрипте:

База: jsd_db
Пользователи:
Логин:jira Пароль:123
Логин:postgres Пароль:postgres

Можете изменить на свои значения перед запуском скрипта или после, непосредственно в Postgre Sql.

Не забудьте отключить SSL, если вы его не используете. Если pgAdmin 4 не будет соединяться с сервером, попробуйте перезагрузить службу.

sudo service postgresql-11 restart 

Информацию по базам данных вы можете найти в документации Atlassian.

3) Развертывание бэкапа из облака на сервере.

В браузере переходим по ip-адресу сервера с указанием порта. По умолчанию порт 8080. У меня это выглядит так 192.168.1.25:8080

Вы должны увидеть следующее.

image

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

image

После создания базы данных на следующей странице будет предложено импортировать данные или согласится с настройками и нажать далее.

image

Выбираем импортировать данные.

В полях открывшейся страницы указываем наименование бэкапа, лицензию(если необходимо) и настройки почты.

image

Можно сгенерировать триальную лицензию на месяц на сайте Atlassian. Для этого нужно будет зарегистрироваться на сайте. При генерации лицензии необходимо выбрать jira service desk (server).

Перед восстановлением JSD из бэкапа разместите бэкап на сервере в каталоге /var/atlassian/application-data/jira/import

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

image

Вас приветствует страница входа, если все прошло хорошо. Осталось ввести логин и пароль.

image

По умолчанию логин sysadmin, пароль sysadmin.

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

На этом перенос JSD из облака на сервер закончен.

Еще почитать о миграции можно тут.

Спасибо за внимание, всего хорошего и удачи!
Подробнее..

Перевод Один год удалённой работы в Figma

13.04.2021 16:13:10 | Автор: admin
image

Оптимизация удалённой работы


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

Отдел разработки быстро создал подборщик шаблонов, позволяющий пользователям создавать новые файлы из пустых пресетов или шаблонов, предназначенных для различных образцов удалённой работы. Мы провели эксперимент на части нашей пользовательской базы, предлагая подборщик шаблонов пользователям из экспериментальной группы. Задача заключалась в том, чтобы посмотреть, как коллективы будут использовать эти шаблоны (и будут ли вообще), а также оценить их конечное воздействие на сотрудничество.

image

Использованный в эксперименте подборщик шаблонов

Наши открытия


Мы выяснили, что пользователи, получившие подборщик шаблонов, имели показатель сотрудничества на 5% больше. Он измеряется как процент пользователей, вносящих правки или комментарии в общий файл. Кроме того, мы заметили, что при помощи подборщика шаблонов пользователи обнаруживали новые функции на 10% больше пользователей обнаружило пресеты кадров, а на 90% больше пользователей использовало в своём процессе творчества файлы Figma Community. Это относилось и к дизайнерам, и к их коллегам, не занимающимся дизайном в число наиболее популярных файлов вошли и специализированные дизайнерские шаблоны (для организации удалённых дизайнерских спринтов), и более общие, например, шаблоны whiteboarding и тим-билдинга.

Даже несмотря на то, что эксперимент проводился с частью нашей пользовательской базы, он не остался незамеченным. Мы получили положительные отзывы в социальных сетях и просьбы о добавлении в подборщик шаблонов документов для других сценариев использования. Рабочие коллективы не просто использовали этот контент, но и благодарили за него. Основная задача Figma Community объединять пользователей, чтобы они могли делиться, учиться и общаться. Это стало идеальным примером того, как мы можем находить способы сотрудничества в мире, где так важна стала удалёнка, полагаясь на работу друг друга.

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

Карта сотрудничества


Отметив положительную реакцию сообщества, мы решили оценить изменения количественно и сопоставить шаблоны с компаниями и регионами, особенно учитывая тот факт, что больше 80% пользователей Figma находится за пределами США. Мир движется в сторону удалённой работы, а мы наблюдаем рост сотрудничества между странами и часовыми поясами. На изображении ниже показаны приглашения и обмены файлами между пользователями в разных странах. Каждая связь обозначает обмен, а каждая страна раскрашена в соответствии с объёмом международного сотрудничества чем темнее страна, тем больше совместной работы.

image

Подробнее о том, что мы выяснили:

Между регионами


В 2020 году Европа была регионом с самым активным ростом международного сотрудничества: в феврале 2021 года количество обменов файлами удвоилось по сравнению с тем же месяцем прошлого года. На глобальном уровне количество файлов, над которыми работают совместно в разных часовых поясах в феврале 2021 года, по сравнению с тем же месяцем прошлого, выросло в 3,5 раза (а для всех файлов в целом рост составил 2,6 раза).

Между дизайнерами и их коллегами


В рамках команд мы наблюдаем тенденцию к тому, что всё больше недизайнеров присоединяется к дизайнерским рабочим пространствам своих коллективов и становятся частью процесса дизайна. В профессиональных коллективах и организациях соотношение дизайнеров и недизайнеров выросло с февраля 2020 года по февраль 2021 года, и на каждого дизайнера в коллективе стало приходиться на 25% больше недизайнеров. С ростом необходимости асинхронных коммуникаций дизайнеры делятся своими файлами в режиме только просмотр с коллегами, чтобы получать обратную связь в реальном времени. Эта тенденция отражается и в росте количества файлов, к которым дизайнеры открывают доступ для своих коллег-недизайнеров (+140%), и в увеличении отношения редактирующий/просматривающий (+12%), произошедших за последний год.

В рамках дизайнерского процесса


Также мы заметили, что большее количество коллективов начало сотрудничать в Figma на более ранних этапах жизненного цикла файлов. В течение 90 дней мы замеряли метрику время до начала сотрудничества измеряемую как количество дней, прошедшее между датой создания файла и первым случаем открытия файла другим сотрудником (не тем, кто создал файл). Среднее время до начала сотрудничества упало на 11% с периода перед началом пандемии COVID до второго квартала года (когда большинство компаний начало работать удалённо), и оставалось стабильным до конца 2020 года.

image

Перенос офлайн-процессов в онлайн


Изучая полученные данные (в дополнение к своему опыту удалённой работы в Figma), мы обратили внимание, что дизайнеры всё активнее делятся файлами со своими коллегами из смежных отраслей, и что это сотрудничество более гибко перетекло в структуры организаций и коллективов. Мы связались с представителями Atlassian и Dropbox, чтобы ознакомиться с их наблюдениями и сопоставить статистику сотрудничества до и после COVID.

Сотрудничество между людьми разных профессий в Atlassian


В начале марта 2020 года Atlassian активно начал использовать Figma сразу после того, как закрыл свои офисы из-за пандемии. Дизайнер Джейк Миллер сказал нам, что переход к работе над файлом в Figma сильно напомнил ему ощущения от работы в офисе с коллегами. Наблюдение за тем, как движутся курсоры, вселяет в тебя ощущение сотрудничества, а не просто сдачи готовой работы по частям, говорит Джейк. Процесс дизайна становится социализированным. И такой уровень сотрудничества выходит за рамки команды дизайнеров, он междисциплинарен. Благодаря использованию файлов Figma в Confluence, каждый становится частью процесса дизайна, рассказывает Джейк. Никто не остаётся исключённым из цикла.

Что важнее всего, возможность совместной работы в одном файле меньше похожа на удалёнку, и больше напоминает командный труд. Мы даже не осознавали, что теряем в процессе дизайна. Благодаря этому удалёнка снова стала похожа на командную работу.

image

Граф сотрудничества команды Atlassian в Figma до и после появления COVID

Асинхронность в первую очередь в Dropbox


В качестве одной из частей перехода на модель, основой которой является виртуальная работа, Dropbox перенёс ту долю сотрудничества, которая реализовывалась на совещаниях, в формат работы на основе файлов, выбрав модель асинхронности по умолчанию.

Хотя сотрудники, естественно, стремились решать рабочие вопросы через видеозвонки, это приводило к усталости от Zoom, перегруженности коммуникациями, постоянным контактам и нехватке времени для фокусировки на стратегической и творческой работе, рассказывает вице-президент Dropbox по дизайну Алистер Симпсон.

image

Граф сотрудничества команды Dropbox в Figma до и после появления COVID

Вместо того, чтобы полагаться на совещания, команда дизайнеров Dropbox перенесла основной объём работы на совместные файлы. Алистер говорит, что этот новый способ работы экономит самые важные ресурсы команды: время и энергию. При асинхронной работе паузы между сообщениями и вербальной коммуникацией не только приемлемы, но и предпочтительны. Они создают пространство для совершенствования работы и повышают значимость проводимого вместе времени, рассказывает Алистер.

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

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

Агрессивный переход в Atlassian облако или это vendor lock-in?

25.10.2020 00:14:44 | Автор: admin

В настоящий момент модель Cloud First (где-то уже Smart) шагает семимильными шагами, особенно в период пандемии COVID-19. И ведь в основном, страны такие как США (Cloud Smart), ЕС, Канада, Великобритания, Австралия, Чили, Аргентина уже имеют стратегию, цели и планы. Например, пройдя по прикрепленным ссылкам создается впечатление, что вот оно, облако, и все - пора иметь только облако или гибрид.

Но меня всегда беспокоит такая ситуация как vendor lock-in.

По моему первому впечатлению, vendor lock-in произошел после анонса новости от 16 октября от со-основателя компании Atlassian Скотта Фаркуар (Scott Farquhar). В качестве волевого и одностороннего решения сообщаются следующие важные даты:

со 2 февраля 2021 года,

а со 2 февраля 2024 года:

  • прекратится поддержка Server edition продуктов.

Итак, это значит, что вендор насильно пытается всех перевести в облако или на худой конец в Data Center. Компания предоставляет 3 варианта установки продуктов:

  • Server

  • Data Center

  • Cloud

где под Server подразумевается следующая политика лицензирования, единоразовая покупка лицензии и по желанию продление лицензии для поддержки и обновления. Не подразумевается масштабирование из коробки.

А под Data Center подразумевается обязательная ежегодная подписка, и масштабирование из коробки, и возможность обновления минорных релизов без простоев.

Ну, под Cloud, это полное системное администрирование силами вендора, где инфраструктура развернута на мощностях AWS и возможность оплаты за каждого сотрудника. Дополнительно можно посмотреть различия в этой сравнительной таблице, предложенным вендором.

Итак, рассмотрим ряд сценариев, которые предстоят клиентам вендора в ближайшем будущем:

  1. Согласиться и платить больше до 2024 года, и в конечном переходе мигрировать на DC. Для справки, кодовая база DC и Server одна и та же.

  2. Мигрировать потихоньку на DC, и сообществом давать обратную связь вендору, и получать скидки при переходе на DC. (тут основные даты связаны 1 полугодием 2021 (01.07.2021). Наверное, легко прослеживается связь с отчетным периодом.)

  3. Переход на Cloud, если у вас действительно есть необходимость соответствию 152-ФЗ, то тут https://jira.atlassian.com/browse/CLOUD-11061 прошу дать обратную связь или как минимум проголосовать. (*полагаю однажды Atlassian развернет мощности на территории РФ у одного из облачных провайдеров)

  4. Искать альтернативы, например, переход на другие on-prem продукты (Redmine, Phabricator, Youtrack, Trac, Mantis, BugGenie, Gitlab, AzureDevOps)

  5. Искать альтернативы, например, переход на другие облачные продукты. (например: Github, Wrike, Asana, Smartsheet, Trello (Atlassian product)).

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

Поэтому, я считаю, что в принципе, довольно интересное будущее ждет людей, занимающихся обслуживанием, развитием Atlassian экосистемы (не облачных продуктов) в организациях, особенно участников сообщества Atlassian в Telegram. И буду рад прочитать вашу обратную связь, узнать про другие продукты (в области управления проектами), решения и мнения об этих инициативах.

Подробнее..
Категории: Conference , Cloud , Atlassian , Jira , On-premise , Jira datacenter

Автоматизация аналитики Jira средствами Apache NiFi

12.11.2020 00:07:35 | Автор: admin
Приветствую, господа. Я Маша, мне 23, и я уже полгода изучаю и внедряю на практике Apache NiFi.

Должна отметить, что спустя месяц после знакомства с этой технологией я начала употреблять антидепрессанты. Был ли NiFi триггером или последней каплей достоверно неизвестно, как и его причастность к данному факту. Но, раз уж, я взялась изложить все, что ждет потенциального новичка на этом пути я должна быть максимально откровеннной.

В тот час, когда технически Apache NiFi мощное связующее звено между различными сервисами (осуществляет обмен данными между ними, по пути позволяя их обогащать и модифицировать), смотрю я на него с точки зрения аналитика. А все потому, что NiFi весьма удобный инструмент для ETL. В часности, в команде мы ориентируемся на построение им SaaS архитектуры.

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

Несмотря на посвящение данной статьи новичкам, считаю правильным и полезным если более опытные архитекторы (гуру, так скажем) отрецензируют ее в кромментариях или поделятся своими кейсами использования NiFi в различных сферах деятельности. Много ребят, включая меня, скажет вам спасибо.

Концепция Apache NiFi кратко.


Apache NiFi opensource продукт для автоматизации и управления потоками данных между системами. Приступая к нему важно сразу осознать две вещи.

Первое это зона Low Code. Что я имею ввиду? Предполагается, что все манипуляции с данными с момента их попадания в NiFi вплоть до извлечения можно выполнить его стандартными инструментами (процессорами). Для особых случаев существует процессор для запуска скриптов из bash-а.

Это говорит о том, что сделать что-то в NiFi неправильно довольно сложно (но мне удалось! об этом второй пункт). Сложно потому, что любой процессор будет прямо таки пинать тебя А куда отправлять ошибки? А что с ними делать? А сколько ждать? А тут ты выделил мне маловато места! А ты докумментацию точно внимательно читал? и т.д.

image

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

Думаю, хватит на сегодня теории, лучше узнаем все из практики. Давайте сформулируем подобие ТЗ для недельной аналитики Jira.

  • Достать из жиры ворклог и историю изменений за неделю.
  • Вывести базовую статистику за этот период и дать ответ на вопрос: чем же занималась команда?
  • Отправить отчет боссу и коллегам.

Дабы принести миру больше пользы, я не остановилась на недельном периоде и разрабатывала процесс с возможностью выгрузки гораздо большего объема данных.

Давайте же разбираться.

Первые шаги. Забор данных из API


В Apache NiFi нету такого понятия как отдельный проект. У нас есть только общее рабочее пространство и возможность формирования в нем групп процессов. Этого вполне достаточно.

Находим в панели инструментов Process Group и создаем группу Jira_report.



Идем в группу и начинаем строить поток (workflow). Большинство процессоров из которых его можно собрать требуют Upstream Connection. Простыми словами это триггер, по которому процессор будет срабатывать. Потому логично, что и весь поток будет начинаться с обычного триггера в NiFi это процессор GenerateFlowFile.

Что он делает. Создает потоковый файл, который состоит из набора атрибутов и контента. Атрибуты это строковые пары ключ / значение, которые ассоциируются с контентом.

Контент обычный файл, набор байтов. Представьте что контент это аттач к FlowFile.

Делаем Add Processor GenerateFlowFile. В настройках, в первую очередь, настоятельно рекомендую задать имя процессора (это хороший тон) вкладка Settings. Еще момент: по умолчанию GenerateFlowFile генерит потоковые файлы непрерывно. Вряд ли это вам когда-нибуть понадобится. Сразу увеличиваем Run Schedule, к примеру до 60 sec вкладка Scheduling.



Также на вкладке Properties укажем дату начала отчетного периода атрибут report_from со значением в формате yyyy/mm/dd.

Согласно документации Jira API, у нас есть ограничение на выгрузку issues не больше 1000. Потому, чтобы получить все таски, мы должны будем сформировать JQL запрос, в котором указываются параметры пагинации: startAt и maxResults.

Зададим их атрибутами с помощью процессора UpdateAttribute. Заодно прикрутим и дату генерации отчета. Она понадобится нам позже.





Вы наверняка обратили внимание на атрибут actual_date. Его значение задано с помощью Expression Language. Ловите крутую шпаргалку по нему.

Все, можем формировать JQL к жире укажем параметры пагинации и нужные поля. В последующем он будет телом HTTP запроса, следовательно, отправим его в контент. Для этого используем процессор ReplaceText и укажем его Replacement Value примерно таким:

{"startAt": ${startAt}, "maxResults": ${maxResults}, "jql": "updated >= '2020/11/02'", "fields":["summary", "project", "issuetype", "timespent", "priority", "created", "resolutiondate",  "status", "customfield_10100", "aggregatetimespent", "timeoriginalestimate", "description", "assignee", "parent", "components"]}


Обратите внимание как прописываются ссылки на атрибуты.

Поздравляю, мы готовы делать HTTP запрос. Тут впору будет процессор InvokeHTTP. Кстати он может по всякому Я имею ввиду методы GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. Модифицируем его свойства следующим образом:

HTTP Method у нас POST.

Remote URL нашей жиры включает IP, порт и приставочку /rest/api/2/search?jql=.

Basic Authentication Username и Basic Authentication Password это креды к жире.

Меняем Content-Type на application/json b ставим true в Send Message Body, что значит переслать JSON, который прийдет из предыдущего процессора в теле запроса.

APPLY.



Ответом апишки будет JSON файл, который попадет в контент. В нем нам интересны две вещи: поле total cодержащее общее количество тасок в системе и массив issues, в котором уже лежит часть из них. Распарсим же ответочку и познакомимся с процессором EvaluateJsonPath.

В случае, когда JsonPath указывает на один обьект, результат парсинга будет записан в атрибут флоу файла. Тут пример поле total и следующий скрин.



В случае же, когда JsonPath указывает на массив обьектов, в результате парсинга флоу файл будет разбит на множество с контентом соответствующим каждому обьекту. Тут пример поле issue. Ставим еще один EvaluateJsonPath и прописываем: Property issue, Value $.issue.

Теперь наш поток будет состоять теперь не из одного файла, а из множества. В контенте каждого из них будет находиться JSON с инфо об одной конкретной таске.

Идем дальше. Помните, мы указали maxResults равным 100? После предыдущего шага у нас будет сто первых тасок. Получим же больше и реализуем пагинацию.

Для этого увеличим номер стартовой таски на maxResults. Снова заюзаем UpdateAttribute: укажем атрибут startAt и пропишем ему новое значение ${startAt:plus(${maxResults})}.

Ну и без проверки на достижение максимума тасок не обойдемся процессор RouteOnAttribute. Настройки следующие:



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



Да, друзья, знаю вы подустали читать мои каменты к каждому квадратику. Вам хочется понять сам принцип. Ничего не имею против.

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

Галопом по Европам. Выгрузка ворклога и др.


Ну, что, ускоримся. Как говорится, найдите отличия:



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



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

Нам удобно будет оформить worklog и changelog по всем таскам в виде отдельных документов. Поэтому, воспользуемся процессором MergeContent и склеим им содержимое всех флоу файлов.

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

Заключительный этап. Генерация отчета и отправка по Email


Окей. Тасочки все выгрузились и отправились двумя путями: в группу для выгрузки ворклога и к скрипту для генерации отчета. К последнему у нас STDIN один, поэтому нам необходимо собрать все задачи в одну кучу. Сделаем это в MergeContent, но перед этим чуть подправим контент, чтобы итоговый json получился корректным.



Перед квадратиком генерации скрипта (ExecuteStreamCommand) присутствует интересный процессор Wait. Он ожидает сигнала от процессора Notify, который находиться в группе выгрузки ворклога, о том что там уже все готово и можно идти дальше. Дальше запускаем скрипт из bash-a ExecuteStreamCommand. Ии отправляем отчетик с помощью PutEmail всей комманде.

Подробно о скрипте, а также об опыте реализации аналитики Jira Software в нашей компании я поведаю в отдельной статье, которая уже на днях будет готова.

Кратко скажу, что разработанная нами отчетность дает стратегическое представление о том чем занимается подразделение или команда. А это бесценно для любого босса, согласитесь.

Послесловие


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

Apache NiFi не упрощает процесс разработки, он упрощает процесс эксплуатации. Мы можем в любой момент остановить любой поток, внести правку и запустить заново.

Кроме того, NiFi дает нам взгляд сверху на процессы, которыми живет компания. В соседней группе у меня будет другой скрипт. В еще одной будет процесс моего коллеги. Улавливаете, да? Архитектура на ладони. Как подшучивает наш босс мы внедряем Apache NiFi, чтобы потом вас всех уволить, а я один нажимал на кнопки. Но это шутка.

Ну а в данном примере, плюшки в виде задачи расписания для генерации отчетности и рассылка писем также весьма и весьма приятны.

Признаюсь, планировала еще поизливать вам душу и рассказать о граблях на которые я наступила в процессе изучения технологии их ого сколько. Но тут и так уже лонгрид. Если тема интересна, прошу, дайте знать. А пока, друзья, спасибо и жду вас в комментариях.



Полезные ссылки


Гениальная статья, которая прямо на пальчиках и по буковкам освещает что такое Apache NiFi.

Краткое руководство на русском языке.

Крутая шпаргалка по Expression Language.

Англоязычное комьюнити Apache NiFi открыто к вопросам.

Русскоязычное сообщество Apache NiFi в Telegram живее всех живых, заходите.
Подробнее..

Что такое платформенный капитализм и кто на нем зарабатывает

12.01.2021 12:17:05 | Автор: admin

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

Куда инвестируют обыватели

Идея платформенного капитализма заключается в удержании клиента и использовании его данных для продажи дополнительных продуктов и услуг (клиенту) и его данных (3-м лицам). Пользователь платформы привязан к ней и не может без значительных затрат с этой платформы соскочить".

Хороший пример платформенного капитализма компания Apple. iPhone это не просто телефон, а платформа, которая предоставляет пользователям услуги хранения фотографий, доступ к магазину приложений, и т д. Другими примерами платформ являются Netflix, Facebook, Amazon и Google через систему Android.

Почему популярный подход не самый грамотный

Все названные выше имена являются неплохими кандидатами для инвестиций, но у них есть проблемы:

  1. Оценка компаний. В пандемию ритейл-инвесторы дружно навалились на акции AAPL, NFLX, GOOGL и FB и загнали их в такую высь, что оценка компаний вызывает сомнения даже у оптимистов.

  2. Потенциал роста. После взрывного роста аудитории на начальном этапе B2C платформы уперлись в естественный предел количества платежеспособных пользователей. Ситуация становится похожа на рынок мобильной связи: телефоны есть у всех,поэтому количество подписчиков можно увеличить, только переманив клиентов у других игроков.

  3. Защита персональных данных. Утечки данных пользователей и их использование в политических целях создают проблемы для всех игроков. Законы о защите персональных данных ограничивают прибыль, ведь продажа данных 3-м лицам это ключевой компонент бизнес-модели.

  4. Антимонопольное законодательство. Это главный риск для платформенного капитализма конечного пользователя. Последний и самый серьезный случай произошел в октябре 2020. Минюст США подал Anti-trust иск против Google. Эта история будет тянуться много лет и способна затормозить развитие любой компании. Похожее случилось с Microsoft, которая на протяжении нескольких лет отбивалась от антимонопольных исков, упустив множество стратегических возможностей.

Платформенный капитализм конечного пользователя за короткое время превратился из мягкого и пушистого спасителя мира в ненавидимого всеми монстра. Аналог табачных компаний с неплохой, но стагнирующей прибылью, в нагрузку к которой идет необходимость постоянно отбиваться от скандалов и искать способы выжить. Возросшие риски не оправдывают высокую стоимость и слабеющий потенциал роста Big Tech компаний.

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

Вместо того, чтобы ходить по минному полю Facebook и Google, обратим свой взгляд на фирмы, которые построили успешные платформы в области B2B.

B2B платформы показывают сумасшедший рост, не присутствуют в заголовках масс-медиа и поэтому частично защищены от anti-trust исков. Никто из политиков не выиграет от борьбы с компанией, о которой большинство избирателей ничего не слышали. Гораздо проще бороться с Цукербергом и Безосом, электорат это оценит.

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

Atlassian (NASDAQ: TEAM)

Эта компания предлагает интегрированный набор инструментов для разработки и поддержки софта (что на проф жаргоне называется ITSM и DevOps).

Разработка и поддержка софта давно стала командным видом спорта. Как скоординировать поступающие сообщения о багах, распределить работу между разработчиками, организовать изменения в коде и апгрейды системы? Atlassian отвечает на эти вопросы с помощью своей платформы, которая включает в себя интегрированные инструменты, такие как Jira, Confluence, BitBucket.

Математика роста у Atlassian в значительной степени оправдывает их капитализацию. Текущая капитализация равна $60 миллиардов, или 37X от продаж или 120X Free Cash Flow. Показатель CAGR ниже на графике, отражает на сколько процентов прирастает выручка и свободный денежный поток за год.

Atlassian работает по модели Land and expand. Компания продает подписку на один из своих инструментов, потом растут как вглубь (то есть за счет других продуктов), так и вширь (за счет увеличения количества пользователей).

График показывает, как со временем растут продажи группам клиентов в зависимости от года подписки на платформу Atlassian.

PTC Inc. (NASDAQ: PTC)

То, что Atlassian делает для софтверных компаний, PTC делает для производственных. PTC за последние 5-10 лет собрали облачную платформу, которая покрывает все потребности современной производственной компании, от разработки до поддержки продукта (включая 3D-моделирование, дополненную реальность и тд). Любой, изучавший инженерную науку в ВУЗе, наверняка слышал о программе Mathcad. Это только один из инструментов в портфеле продуктов PTC.

Помимо математических расчетов, за которые отвечает Mathcad, вам надо хранить спецификации и историю их изменений (Windchill) , 3D-модели (Creo and Thingsworx), инструкции по сборке, обслуживании и ремонте (Vuforia).

PTC делает правильно многие вещи, стараясь переориентировать продукты в своей платформе в направлениии Мульти -тенантных облачных систем (Их последнее приобретение компания Onshape как раз предоставляет такую систему).

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

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

Мы считаем, что PTC находится в самом начале периода интенсивного роста (15-20% в год на протяжении ближайших 10 лет). В последнем своем заявлением, CEO компании Джимом Хеппельманом, заявил что рост будет быстрее чем раньше SaaS will make up ~20% of bookings, ~10% of ARR, growing faster than overall.

Модели аналитиков крупнейших инвест банков, подтверждают наш тезис по долгосрочному росту.

С оценкой у PTC немного получше, чем у Atlassian. Выручка за последний год $1.5 миллиарда и кэшфлоу 215 миллионов. Капитализация в $14 миллиардов это 9X от продаж, и 65 от свободного кэш флоу (free cash flow).

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

Подробнее..

Внедрение Atlassian продуктов в банк. Личный опыт

07.08.2020 12:20:56 | Автор: admin
Сегодня я расскажу о нашем опыте реорганизации процессов IT департамента для одного из банков Украины с помощью внедрения Atlassian инструментов. В таких проектах важно не забывать, что настройка новой системы под существующие процессы не приведет к существенному результату. Довольно часто корень находится в процессах работы, а это уже более глобальный вопрос. Мы помогаем нашим клиентам сначала обдумать бизнес-процессы, упростить их, сделать более гибкими и быстрыми, что дает значительный результат для бизнеса в целом, а только потом внедрять систему управления.




Историческое отступление


До недавнего времени система HP Service Desk 4.5 для автоматизации ITSM процессов, была практически стандартом в корпоративном мире. Первая версия HP SD была выпущена 2002 году, а в 2012 году, спустя 4 крупных обновления, официальная поддержка системы была прекращена. Конечно, учитывая популярность системы в корпоративном сегменте на смену ей была разработана Omnitracker, которая, фактически, была продолжением культовой 4.5. Она изначально делалась с прицелом на замену HP SD, поэтому ее интерфейс не сильно отличался от старшего брата, хотя функциональные возможности и расширились спустя 10 лет с релиза первой версии HewlettPackard. HP также хотели сделать продолжение ITSM системы Service Management Automation X, но сейчас на рынке она не пользуется успехом.

В 2020 году любому ентерпрайз бизнесу требуется поддержка процессов и инструменты для эффективного ведения дел, как внешних, так и внутренних. Для работы с ITSM и ITIL нужно уже не просто понимать что это такое, но и сокращать издержки на поддержание этих процессов, например, за счет использования правильных инструментов. За последние 2 года появился тренд использования быстрых, гибких и универсальных инструментов, упрощения и движения в сторону гибкости бизнес-процессов с разумным уровнем бюрократии и строгости. Компании стараются отходить от решений за миллионы долларов с десятками модулей, из которых использоваться будет лишь часть.

Старт проекта


Теперь о проекте. На момент старта проекта в банке был HP Service Desk 4.5, стояла задача перейти к использованию Atlassian продуктов во всех возможных департаментах (IT департамент, ПМО, АХО, HR, Юристы и пр.). Проект начался с департамента IT. Мы провели дискавери фазу для изучения бизнес процессов департамента, их связи с другими отделами банка, определили объем и задачи проекта и сформировали план работ. На этом этапе начали проявлятся особенности работы с клиентом-банком. Банк это огромная структура, практически маленькое государство, с внутренней политикой, интересами и курсом развития. Например, получение доступа к серверу может занимать не час-два, как в ИТ компании, а несколько дней, за которые запрос пройдет все круги согласований и проверок. Чтобы уменьшить критический путь выполнения проекта, мы планировали работы в несколько параллельных потоков: задачи, которые находятся на стороне банка, и наши задачи. За это время мы уже ускорили процессы коммуникации из классической почты и ответов на следующий день на более быстрые мессенджеры, начали проводить больше личных встреч.

Во время внедрения продуктов и реорганизации процессов мы столкнулись с излишней сложностью некоторых процессов. Например, на момент старта проекта в банке было более 90 разных процессов, с разным набором вовлекаемых подразделений и связанных задач, которые ждут друг друга только для управления изменениями. Некоторые виды изменений могли проводиться не чаще чем 2 раза в год потому, что суммарно их выполнение занимало пол года. Для таких случаев мы рекомендовали изменения в бизнес процессах. Понятно, что не везде это возможно, в силу юридических, регуляторных и бюрократических ограничений, но, например, в случае с процессами изменений при пересмотре их получилось уменьшить до 46, что сделало настройки более унифицированными.

Как иногда бывает при внедрении новых систем, во время выхода в продакшн мы столкнулись с сопротивлением сотрудников, которые привыкли работать в старой системе. Но нашим прямым заказчиком был руководитель подразделения, поэтому мы перебороли сопротивление достаточно жестко. Для упрощения ввода системы в эксплуатацию, при реализации проекта мы применяли итеративный подход к релизам с промежуточным результатом, поэтому было принято административное решение отключать в старой системе процесс, когда он был готов в новой. Да, конечно, некоторое время банку нужно было использовать 2 системы; например, запросы пользователей уже обрабатывались в Atlassian, а управление изменениями проходило в HP SD. Но это дало время сотрудникам привыкнуть к новым условиям, а также позволило нам получить быстрый фидбэк.

Технологический стэк


Используя свою экспертизу и имеющуюся структуру IT в банке, мы совместно построили службу поддержки из четырех линий. Нулевая линия работает в Jira Service Desk, она производит первичную обработку заявок внутренних пользователей и обеспечивает выполнение установленных SLA по всем заявкам. Далее, на первую и вторую линии поддержки задачи эскалируются, и сотрудники работают над задачами в Jira Software. Такой подход позволяет разделить инструменты по назначению. Сотрудникам первой, второй, третьей линии далеко не всегда нужны возможности классического Service Desk. Эти люди, а их больше 100 человек, обычно выполняют поставленную задачу одну за другой, и им незачем видеть поток всего, что приходит в ИТ поддержку.
Как козырь в рукаве, остается третья линия. Для них задачи создаются внутри банка, эта линия внутренние разработчики, тестировщики, аналитики. Они исправляют ошибки программного обеспечения или разрабатывают новое. Возможность передать задачу на работу такой внутренней команде есть только при условии, что все предыдущие линии не смогли решить запрос по какой-то причине либо если это Change request.
Кроме IT на новую систему перешли также департаменты АХО и ПМО.
У департамента АХО есть свой набор запросов, то есть свой портал на сервис деске, а ПМО использует классические Jira Core проекты для внутренних задач.

По верхам ITIL стандарта


Говоря о классической службе поддержки, нельзя не остановится подробнее на ITIL. В банке был реализован, наверное, самый классический набор процессов для таких проектов:

  • Управление инцидентами (Incident management). Целью этого процесса является управление жизненным циклом всех инцидентов. Процесс направлен на быстрое решение запросов пользователя, которые непредвиденно начали мешать его работе.
  • Управление проблемами (Problem management). Этот процесс помогает ИТ департаменту предотвратить инциденты и минимизировать влияние инцидентов, которые невозможно предотвратить или предвидеть.
  • Запросы пользователей (Request fulfillment). Основной процесс службы поддержки выполнение запросов на обслуживание. Как правило, это помощь в решении базовых вопросов или незначительные изменения, например, рабочего места пользователя.
  • Управление изменениями (Change management). Процесс контролирует все изменения, которые могут выполняться одновременно несколькими департаментами банка. Это могут быть доработки программного обеспечения, изменения инфраструктуры, внедрение новых инструментов.
  • Управление конфигурациями (Configuration management). Этот процесс направлен на управление ИТ инфраструктурой и все что с ней связано. Хранение в едином месте информации по серверам, приложениями, доступам, лицензиями, рабочим местам и использование этих данных во всех остальных процессах помогает четко прослеживать изменения или инциденты. Мы использовали дополнительный плагин Insight Asset management, который красной нитью проходит через все продукты и позволяет работать с конфигурационными единицами на всех линиях поддержки.
  • Управление знаниями (Knowledge management). Отвечает за управление информацией о системе в целом. Предоставляемые услуги для пользователей, имеющаяся инфраструктура, типовые инструкции для пользователей. Все это должно хранится в одном месте и быть доступно для клиентов службы поддержки. В этом кейсе мы использовали Confluence, как продукт для работы с базой знаний и местом для технической документации ИТ департамента.

Результат


Таким образом в течении внедрения проекта, процесс за процессом, банк перешел с морально устаревшей HP Service Desk 4.5, выпущенной в 2002 году, на современную, поддерживаемую систему из комплекса продуктов Atlassian. Доработаны и реорганизованы ITIL процессы с учетом сложности банковской структуры. Это дало заказчику несколько важных улучшений:
  1. Проведена ревизия бизнес-процессов для работы с запросами пользователя и внутри банка;
  2. Получены прозрачные SLA, которые можно отслеживать и использовать для улучшения департаментов;
  3. Разделены зоны ответственности на явные линии поддержки и снижена нагрузка на департамент в целом. Вместо того, чтобы обрабатывать каждую заявку по прямой цепочке нулевая-первая-вторая-третья линии, теперь часть заявок автоматически распределяется на нужные линии;
  4. Ускорилось время реакции и время решения задач.
Подробнее..
Категории: Atlassian , Case , Atlassian implement

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru