Написание пользовательских историй и требований
Недавно читал несколько технических дизайнов и заметил распространенную ошибку при написании пользовательских историй и требований — предположение решения. В предположении решения, для меня основная проблема в том, что, когда я включаю часть решения в требования, это ограничивает мою способность к инновациям, так как я ограчиен решением из требований. Во многих случаях я наблюдал улучшение своих дизайнов, когда сосредотачивался на том, что нужно клиенту, а не на выполнении требований, связанных с моим первым и, возможно, не самым удачным решением.
Еще одним преимуществом отказа от предположений о решении, является то, что это помогает включать более широкий контекст и учитывать потребности клиента на несколько шагов вперед и назад, а также на более высоком уровне того, что он пытается достичь. Это иногда полностью меняет взгляд проблему и способы решения.
Попросил ChatGPT помочь сформулировать эти идеи, и вот что получилось.
1. Сосредоточьтесь на потребностях пользователя, а не на решении
Объяснение:
- Пользовательские истории и требования должны отражать то, что нужно пользователю и почему, а не как это реализовать.
- Это помогает команде сосредоточиться на предоставлении ценности пользователю, не ограничиваясь заранее определенными решениями.
Пример требования, определяющего решение (неидеальный вариант):
- «Приложение должно использовать выпадающее меню для выбора пользователем своей страны.»
Переписанное требование без указания решения:
- «Приложение должно позволять пользователю легко выбрать свою страну во время регистрации.»
Почему это важно:
- Избегая указания конкретных решений, вы открываете возможность для дизайнеров и разработчиков найти наиболее удобный и эффективный способ, например, поле автозаполнения или выбор на карте, которые могут быть более подходящими.
2. Поощрение инноваций и экспертизы
Объяснение:
- Команды обладают разнообразной экспертизой; предписывание решений может ограничивать их способность к инновациям.
- Оставляя гибкость, можно прийти к лучшим, более эффективным решениям, о которых заинтересованные стороны могли не подумать.
Пример пользовательской истории с указанием решения (неидеальный вариант):
- «Как пользователь, я хочу получать уведомления по SMS с использованием API Twilio, чтобы быть в курсе событий.»
Переписанная пользовательская история без указания решения:
- «Как пользователь, я хочу получать своевременные уведомления, чтобы быть в курсе событий.»
Почему это важно:
- Команда может изучить различные способы уведомлений (электронная почта, push-уведомления, SMS) и выбрать лучшую технологическую платформу, возможно, найдя более экономичные или надежные решения, чем изначально предполагалось.
3. Поддержание гибкости для изменения требований
Объяснение:
- Технологии и масштабы проектов меняются; требования, не привязанные к решению, легче адаптировать к изменениям.
- Это снижает необходимость частых изменений в документации требований.
Пример требования, определяющего решение (неидеальный вариант):
- «Система должна хранить данные в базе данных Oracle.»
Переписанное требование без указания решения:
- «Система должна безопасно хранить данные и обеспечивать их эффективный поиск и масштабируемость.»
Почему это важно:
- Команда разработки сможет выбрать наиболее подходящую технологию базы данных (SQL, NoSQL, облачные решения) в зависимости от текущих потребностей и будущей масштабируемости.
4. Предотвращение избыточной инженерии и растрат ресурсов
Объяснение:
- Определение решений может привести к излишней сложности, увеличивая время и затраты на разработку.
- Это может заставить команду реализовать решение, которое плохо интегрируется с другими компонентами системы.
Пример требования, определяющего решение (неидеальный вариант):
- «Отчет должен быть сгенерирован в формате PDF с использованием SDK Adobe Acrobat.»
Переписанное требование без указания решения:
- «Система должна предоставлять отчеты, которые пользователи могут легко просматривать и скачивать.»
Почему это важно:
- Разработчики могут обнаружить, что форматы HTML или CSV лучше удовлетворяют потребности пользователей, или что другая библиотека предлагает лучшую производительность или более простое обслуживание.
5. Усиление сотрудничества и ответственности
Объяснение:
- Четкое разделение «что» и «как» улучшает сотрудничество.
- Заинтересованные стороны определяют проблему; команда разработки предлагает решение, что способствует чувству ответственности и вовлеченности.
Пример требования, определяющего решение (неидеальный вариант):
- «Реализовать механизм кэширования с использованием Redis для повышения производительности.»
Переписанное требование без указания решения:
- «Система должна выполнять пользовательские запросы в течение двух секунд при нормальной нагрузке.»
Почему это важно:
- Команда сможет исследовать различные методы оптимизации, а не только кэширование, чтобы выполнить требования по производительности.
Почему следование этому подходу важно
-
Использование экспертных знаний команды:
- Разработчики и дизайнеры могут применять свои навыки для поиска наилучших решений.
-
Улучшение удовлетворенности пользователей:
- Решения адаптируются под потребности пользователей, улучшая их опыт.
-
Увеличение гибкости проекта:
- Легче адаптироваться к изменениям технологий или требований пользователей.
-
Снижение недоразумений:
- Четкие и краткие требования минимизируют недопонимания.
-
Оптимизация ресурсов:
- Избегается ненужная работа над решениями, которые могут оказаться неоптимальными.
Заключение
Сосредотачиваясь на том, что нужно пользователю, а не на том, как это реализовать, вы даете вашей команде разработки возможность создавать более эффективные, инновационные и продуктивные решения. Этот подход:
- Увеличивает гибкость: позволяет адаптироваться к новой информации или изменениям в рамках проекта.
- Поощряет лучшие практики: позволяет использовать новейшие технологии и методологии.
- Укрепляет командную динамику: способствует доверию и улучшает сотрудничество между заинтересованными сторонами и командой разработки.