Експертні знання про предметну область
Експертні знання про предметну область (Domain Expert Knowledge)
"У продакшн потрапляють не знання експертів з предметної області, а припущення розробників..."
— Альберто Брандоліні (Alberto Brandolini)
Вступ: Від структури до змісту
У попередній главі ми вивчили, як аналізувати предметну область через призму піддоменів: визначати їхні типи, межі та стратегічну цінність. Ми навчилися структурувати складний бізнес на керовані частини.
Але знання про структуру — це лише початок. Тепер нам потрібно зануритися усередину кожного піддомену і зрозуміти:
- Які бізнес-функції він виконує?
- Яка логіка стоїть за цими функціями?
- Як експерти предметної області думають про проблему?
- Яку термінологію вони використовують?
Що ми вивчимо?
Крок 1: Бізнес-задачі
Зрозуміємо, що таке бізнес-задачі та чому їх розуміння критично важливе.
Крок 2: Виявлення експертних знань
Дізнаємося, як ефективно отримувати знання від експертів предметної області.
Крок 3: Проблеми комунікації
Розглянемо типові проблеми спілкування в проєктах та їхні наслідки.
Крок 4: Єдина мова
Вивчимо концепцію Ubiquitous Language і як її створювати.
Крок 5: Моделювання
Дізнаємося, що таке бізнес-модель та як її будувати.
Бізнес-задачі (Business Problems)
Перше, що потрібно зрозуміти: програмне забезпечення існує для вирішення бізнес-задач. Але що ми маємо на увазі під "бізнес-задачею"?
Бізнес-задача ≠ Математична задача
Бізнес-задачі можуть включати:
- Оптимізацію робочих процесів
- Мінімізацію ручної праці
- Управління ресурсами
- Підтримку прийняття рішень
- Управління даними
- Автоматизацію повторюваних операцій
- Покращення досвіду клієнтів
Два рівні бізнес-задач
1. Рівень предметної області (Domain Level)
Це глобальна мета компанії — проблема, яку вона вирішує для своїх клієнтів.
Приклад: FedEx
- Проблема клієнта: Потрібно терміново відправити посилку
- Рішення FedEx: Швидка та надійна доставка по всьому світу
- Цінність: Клієнт може довіритияти, що посилка прибуде вчасно
2. Рівень піддомену (Subdomain Level)
Піддомени представляють менші предметні області, кожна з яких вирішує конкретну бізнес-компетенцію.
Приклади піддоменів FedEx:
Управління логістикою
Відстеження посилок
Система розрахунків
Від задачі до рішення
Кожен піддомен має свій цикл "Задача → Рішення":
Виявлення експертних знань
Тепер, коли ми розуміємо природу бізнес-задач, виникає питання: звідки розробники отримують знання для їх вирішення?
Експерти предметної області (Domain Experts)
Приклади експертів:
- У банку: андеррайтери, трейдери, кредитні аналітики
- У медицині: лікарі, медсестри, фармацевти
- В електронній комерції: мерчандайзери, маркетологи, спеціалісти з логістики
- У страхуванні: актуарії, агенти, оцінювачі ризиків
Розробники ≠ Експерти предметної області
- ✅ Розуміти, як думають експерти
- ✅ Використовувати термінологію експертів
- ✅ Розуміти ментальну модель експертів
- ✅ Задавати правильні питання
Ментальна модель експерта
Ефективність рішення залежить від того, наскільки добре розробник розуміє спосіб мислення експерта та його ментальну модель.
Небезпека поверхневого розуміння
Що станеться, якщо розробник не розуміє бізнес-задачу глибоко?
Без розуміння обгрунтування вимог, розробник просто "переводить" специфікацію в код. Це призводить до:
- Відсутності гнучкості для майбутніх змін
- Неможливості запропонувати кращі рішення
- Створення моделі, яка не відображає реальний бізнес
Мудрість Альберто Брандоліні
Альберто Брандоліні (Alberto Brandolini), творець методу Event Storming, висловив глибоку думку:
"Розробка програмного забезпечення — це процес навчання, а робочий код є побічним ефектом."
— Альберто Брандоліні
Успіх програмного проєкту залежить від ефективності обміну знаннями між експертами предметної області та розробниками. Щоб вирішити задачу, потрібно зрозуміти її суть.
Проблеми комунікації
Ефективний обмін знаннями між експертами та розробниками вимагає продуктивного спілкування. Давайте розгляньмо, що найчастіше перешкоджає цьому.
Типова структура команди
Майже всі програмні проєкти вимагають співпраці різних ролей:
Результат залежить від того, наскільки продуктивно всі ці сторони можуть працювати разом. Критичні питання:
- Чи згодні всі з тим, яку задачу потрібно вирішити?
- Чи немає протиріч у функціональних та нефункціональних вимогах?
- Чи розуміють всі однаково ключові концепції?
Традиційний потік знань (антипатерн)
Дослідження показують, що найчастішою причиною невдач у програмних проєктах є неефективна комунікація. Чому?

- Бізнес-аналітиків
- Системних аналітиків
- Власників продукту
- Менеджерів проєктів
Потік знань у традиційній моделі
Множинні перекла дання
Знання у традиційному підході піддаються кількатакратному перекладу:

Переклад 1: Знання → Аналітична модель
Експерт пояснює свої знання аналітику, який створює документ вимог.
Переклад 2: Аналітична модель → Дизайн
Архітектор або дизайнер перетворює вимоги в дизайн системи.
Переклад 3: Дизайн → Код
Розробник реалізує дизайн у вигляді програмного коду.
Переклад 4: Код → Знання (для підтримки)
Наступні розробники вивчають код, щоб зрозуміти предметну область.
Гра "Зіпсований телефон"
- Перший гравець вигадує повідомлення
- Нашіптує його другому
- Другий повторює третьому
- І так далі...
- Останній гравець озвучує те, що почув
Наслідки поганої комунікації
Що відбувається через множинні перекладання?
Спотворення інформації
Неправильні рішення
Невдалі проєкти
Рішення: Пряма комунікація
DDD пропонує більш ефективний спосіб передачі знань від експертів до розробників: використання Єдиної мови (Ubiquitous Language) та пряме спілкування.