Инженерный процесс

Предисловие

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

Создатель системы

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

  • Методолог
  • Проектировщик
  • Технолог
  • Оператор

Отношение роли к подроли это композиция. Разработчик может все, что могут Методолог, Проектировщик, Технолог, Оператор.

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

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

Визионер

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

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

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

Он отвечает за прибыльность фичи.

Архитектор

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

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

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

Разработчик - Методолог

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

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

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

Разработчик - Проектировщик

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

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

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

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

Разработчик - Технолог

Проводит проект системы через:

  • Изготовление. В моем случае это означает, что релиз инженер (человек в должности тестировщика) берет код который написал разработчик (в должности) для каждого микросервиса и разворачивает каждый микросервис (continuous integration);
  • Сборку (continuous integration, сборка всей системы из микросервисов);
  • Обоснование успешности (тестирование версии системы, как через continuous integration, так и через ручное тестирование);
  • Разворачивание (continuous deployment);
  • Запуск в эксплуатацию (release).

Разработчик - Оператор

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

Инженер внутренней платформы

Он создает платформу, которую используют другие роли от идеи до выпуска фичи в эксплуатацию (визионер, архитектор, методолог, проектировщик, технолог).

Для моей команды он (роль) создает вики и гит-репозиторий, в которых хранятся описания системы, таск-трекер, в котором ведутся работы по проекту, инструменты CI/CD для вывода фичи в эксплуатацию. Это не один человек, а целая команда, где каждый отвечает за свою систему в платформе.

Инженерный процесс

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