Как подготовиться к разработке корпоративной ИТ-системы и не потерять требования по пути

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

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

Содержание
  1. Начните с проблемы, а не со списка функций
  2. Опишите пользователей и их рабочие сценарии
  3. Сценарий полезнее перечня экранов
  4. Разделите обязательные функции и пожелания
  5. Заранее соберите требования к данным
  6. Интеграции нужно проектировать до реализации интерфейсов
  7. Что проверить для каждой интеграции
  8. Не смешивайте функциональные и нефункциональные требования
  9. Какие ограничения полезно зафиксировать заранее
  10. Определите границы системы
  11. Когда требуется прототип
  12. Как организовать разработку по этапам
  13. Приемку нужно определить до начала программирования
  14. Что проверять при приемке
  15. Не откладывайте сопровождение на момент запуска
  16. Как оценивать потенциального исполнителя
  17. Типичные ошибки заказчика
  18. Сразу фиксировать конкретную технологию
  19. Описывать существующий процесс вместо нужного результата
  20. Оставлять исключения на потом
  21. Не назначать владельца требований
  22. Пытаться предусмотреть абсолютно все
  23. Как действовать в разных сценариях
  24. Если нужно заменить устаревшую внутреннюю систему
  25. Если создается система для нового процесса
  26. Если система взаимодействует с оборудованием
  27. Если требуется централизовать данные нескольких систем
  28. Что подготовить к первой встрече с разработчиками
  29. Как понять, что подготовительный этап завершен
  30. Практический следующий шаг

Начните с проблемы, а не со списка функций

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

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

До обсуждения реализации полезно письменно ответить на несколько вопросов:

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

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

Опишите пользователей и их рабочие сценарии

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

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

Сценарий полезнее перечня экранов

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

Рабочий сценарий лучше описывать как цепочку:

  1. пользователь получает исходную информацию или создает объект;
  2. система проверяет необходимые условия;
  3. пользователь выполняет разрешенное действие;
  4. система изменяет состояние объекта;
  5. при необходимости информация передается другому участнику или внешней системе;
  6. результат сохраняется и становится доступен для последующего контроля.

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

Разделите обязательные функции и пожелания

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

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

Категория Что в нее входит Как использовать при планировании
Обязательное Функции, необходимые для выполнения основного процесса Включать в первую рабочую версию и подробно определять критерии приемки
Важное Автоматизация второстепенных операций, аналитика, дополнительные удобства Реализовывать после проверки базовых сценариев или параллельно при достаточном ресурсе
Дополнительное Идеи без подтвержденной необходимости Сохранять в резерв требований и возвращаться к ним после накопления опыта эксплуатации

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

Заранее соберите требования к данным

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

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

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

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

Интеграции нужно проектировать до реализации интерфейсов

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

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

Что проверить для каждой интеграции

Минимальное описание должно давать ответы на следующие вопросы:

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

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

Не смешивайте функциональные и нефункциональные требования

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

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

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

Какие ограничения полезно зафиксировать заранее

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

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

Определите границы системы

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

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

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

Когда требуется прототип

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

Прототип особенно полезен, если:

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

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

Как организовать разработку по этапам

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

Рациональнее разделять работу на проверяемые этапы:

  1. Обследование. Фиксируются процессы, роли, ограничения, существующие системы и основные проблемы.
  2. Проектирование. Формируется архитектура, модель данных, интеграционные механизмы и пользовательские сценарии.
  3. Разработка базового контура. Реализуются функции, необходимые для прохождения основного процесса от начала до конца.
  4. Интеграционное тестирование. Проверяется взаимодействие компонентов и внешних систем.
  5. Пользовательская приемка. Представители заказчика проходят заранее определенные рабочие сценарии.
  6. Ввод в эксплуатацию. Система разворачивается в рабочей среде, пользователи получают необходимые инструкции и доступ.
  7. Сопровождение и развитие. Исправляются обнаруженные проблемы, анализируются новые требования и планируются дальнейшие версии.

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

Приемку нужно определить до начала программирования

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

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

Что проверять при приемке

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

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

Не откладывайте сопровождение на момент запуска

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

Следует заранее договориться, кто будет:

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

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

Как оценивать потенциального исполнителя

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

На предварительном обсуждении можно задать несколько практических вопросов:

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

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

Типичные ошибки заказчика

Сразу фиксировать конкретную технологию

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

Описывать существующий процесс вместо нужного результата

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

Оставлять исключения на потом

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

Не назначать владельца требований

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

Пытаться предусмотреть абсолютно все

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

Как действовать в разных сценариях

Если нужно заменить устаревшую внутреннюю систему

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

Если создается система для нового процесса

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

Если система взаимодействует с оборудованием

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

Если требуется централизовать данные нескольких систем

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

Что подготовить к первой встрече с разработчиками

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

Минимальный пакет можно сформировать следующим образом:

  1. Кратко описать проблему и желаемый результат.
  2. Перечислить группы пользователей и их основные задачи.
  3. Нарисовать текущую последовательность процесса в любом понятном виде.
  4. Составить список существующих программ и оборудования, с которыми потребуется взаимодействие.
  5. Указать основные типы данных и источники их получения.
  6. Разделить предполагаемые функции по приоритету.
  7. Зафиксировать известные инфраструктурные и организационные ограничения.
  8. Подготовить несколько реальных обезличенных примеров документов, данных или рабочих ситуаций, если они необходимы для понимания процесса.

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

Как понять, что подготовительный этап завершен

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

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

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

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

Практический следующий шаг

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

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

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

PRICEP-VLG.RU