Перейти до вмісту

Тест на зворотність

Також доступно 28 мовами

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A freshly poured concrete slab sets around four anchor bolts on a steel template and upright conduits, bordered by timber formwork, with a wheelbarrow on the ground beyond.
Зображення згенеровано ШІ

Модуль 3 з 7 розділу Мислити як архітектор даних, першого розділу курсу Data Architect. Кожен модуль самостійний. Попередній: Модель даних — це скелет · Наступний: Архітектура — це мистецтво компромісів

Питання, на яке відповідає цей модуль: Як відрізнити архітектурне рішення від звичайного?

Архітектори ухвалюють багато рішень.

Але не кожне рішення — архітектурне.

Це важлива відмінність. Якщо ми вважатимемо архітектурою кожне рішення, то весь час сперечатимемося про речі, які відносно легко змінити. Якщо ж не розпізнаємо по-справжньому архітектурних рішень, то можемо сьогодні за п’ять хвилин ухвалити рішення, яке розплутуватимемо п’ять років.

То як відрізнити одне від іншого?

Я люблю ставити просте запитання:

Наскільки важко буде скасувати це рішення згодом?

Я називаю це тестом на зворотність.

Що важче щось скасувати і що більше інших речей від нього залежатиме, то більше архітектурної уваги воно заслуговує.

Деякі рішення змінити дешево

Section titled “Деякі рішення змінити дешево ”

Почнімо з простого.

Ми називаємо поле Customer Category. Через пів року бізнес вирішує, що насправді всі кажуть Customer Segment. Ми змінюємо мітку. Можливо, треба оновити документацію і трохи навчити користувачів, але це не велика архітектурна подія. Із початковим API-ім’ям, щоправда, доведеться жити, бо його зміна має значно більші наслідки. Тож це може означати лише зміну мітки і плутанину, яка може її супроводжувати.

Ми ухвалили рішення. Ми передумали. Ми рушили далі.

А тепер порівняйте це з іншим рішенням.

Ми створюємо ідентифікатор для клієнтів. Вирішуємо, що він означає, який має формат і яка система його створює. А потім публікуємо його.

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

Через три роки хтось каже:

Мабуть, не варто було проєктувати ідентифікатор саме так.

Це зовсім інша розмова.

Різниця не в тому, що одне рішення технічніше за інше.

Різниця — у зворотності.

Ось як це може статися. Скажімо, бізнес складав свої ключі з частини назви клієнта плюс номер. Роками це працює, бо нікому ще не доводилося змінювати назву. А потім, через рік чи більше, назва таки змінюється, і раптом ключі не відповідають шаблону, якого очікують решта даних. Це одна з причин, чому ключі не повинні нести жодного внутрішнього змісту.

Архітектура створює гравітацію

Section titled “Архітектура створює гравітацію ”

Архітектурне рішення має властивість обростати речами довкола себе. Я думаю про це як про гравітацію.

Оберіть об’єктну модель — і навколо неї збудують автоматизацію.

Оберіть ключ — і інші системи почнуть його зберігати.

Оберіть, де живуть основні дані, — і інтеграції потечуть до них і від них.

Оберіть модель спільного доступу — і бізнес-процеси почнуть залежати від того, хто що бачить.

Оберіть інтеграційний шаблон — і системи почнуть залежати від його таймінгу й поведінки.

Що довше існують ці рішення, то більшої гравітації вони набувають. Зрештою змінити початкове рішення означає змінити все, що навколо нього накопичилося.

ШІ теж відчуває цю гравітацію. ШІ-інструмент працює з тим, що вже є в системі: щойно в ній з’являється ключовий елемент дизайну, кожна наступна взаємодія з ШІ сприймає його як факт і будує на ньому, і будує, і будує. Рішення відлунює вперед через багато інших рішень, і жодна людина ніколи не повертається переглянути первісне. Кожне покоління додає гравітації.

Ось чому важливо, що модель даних — «скелет». Ми обережні не тому, що зміни погані. Ми обережні, бо залежності роблять зміни дорогими.

Поставте два запитання

Section titled “Поставте два запитання ”

Дивлячись на проєктне рішення, я ставлю два запитання:

Наскільки важко це скасувати?

Скільки від цього залежатиме?

Вони пов’язані, але не тотожні. Щось може бути технічно легко змінити, але мати сотні споживачів. Колись люди перейменовували стандартні об’єкти для ясності — скажімо, Account на «Customer». Зробити це легко. А потім інша система захотіла використовувати Accounts для партнерів — і не змогла. Щось інше може мати лише кількох споживачів, але потребувати величезної міграції для зміни, як API-ім’я об’єкта, на яке є багато внутрішніх посилань. Ззовні його ніхто не бачить, але хибне ім’я постійно плутає команду. І те, й інше заслуговує уваги.

Подумайте про кілька поширених рішень щодо даних:

  • Який об’єкт Salesforce відображає це бізнес-поняття?
  • Що є унікальним ідентифікатором?
  • Яка система — система обліку?
  • Ці дані копіюються в Salesforce чи до них звертаються деінде?
  • Це один об’єкт чи кілька пов’язаних?
  • Хто володіє даними і як довго ми їх зберігаємо?
  • Які наші межі доступу за замовчуванням?
  • Як ці дані рухаються між системами?

Це дуже відрізняється від рішення, де на сторінці Lightning з’явиться поле. Дизайн сторінки теж важливий. Ціна помилки інша.

Тест на зворотність Сітка два на два. По горизонталі: наскільки важко скасувати рішення, від легко до важко. По вертикалі: скільки від нього залежатиме, від мало до багато. Ліворуч унизу, «Просто вирішуйте»: мітка поля й макет сторінки. Ліворуч угорі, «Легко змінити, багато залежить»: узгодьте зміну. Праворуч унизу, «Важко змінити, мало залежить»: сплануйте міграцію. Праворуч угорі, виділено, «Архітектурне»: унікальний ідентифікатор, система обліку й об’єктна модель; пригальмуйте й запишіть, чому. ЛЕГКО ЗМІНИТИ, БАГАТО ЗАЛЕЖИТЬ узгодьте зміну Перейменування Account на «Customer» а потім іншій системі потрібні Account для партнерів АРХІТЕКТУРНЕ пригальмуйте й запишіть, чому Унікальний ідентифікатор Система обліку Об’єктна модель ПРОСТО ВИРІШУЙТЕ змініть пізніше, якщо треба Мітка поля Макет сторінки ВАЖКО ЗМІНИТИ, МАЛО ЗАЛЕЖИТЬ сплануйте міграцію API-ім’я внутрішнього об’єкта його ніхто не бачить, але воно плутає команду НАСКІЛЬКИ ВАЖКО СКАСУВАТИ Легко Важко СКІЛЬКИ ВІД ЦЬОГО ЗАЛЕЖАТИМЕ Мало Багато Наскільки важко це скасувати? Скільки від цього залежатиме? Обидва високі — архітектурне рішення. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Думайте про радіус ураження

Section titled “Думайте про радіус ураження ”

Інший спосіб думати про зворотність — радіус ураження: якщо я зміню це рішення, що ще зрушить?

Припустімо, те, що ми змоделювали як поле, насправді має стати дочірнім об’єктом. Це не просто зміна схеми. Що станеться з наявними даними? Зі звітами, з інтеграціями, що очікують це поле, з Apex і Flows, які на нього посилаються, з безпекою, аналітикою, ШІ-агентом, чиї дії залежать від початкової структури?

Що більший радіус, то ретельніше слід ухвалювати початкове рішення.

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

Рішення рівня підприємства і рішення рівня Salesforce

Section titled “Рішення рівня підприємства і рішення рівня Salesforce ”

Архітектор даних мислить на двох рівнях.

Усередині Salesforce ми вирішуємо щодо об’єктів, зв’язків, ключів, обсягів, доступу, автоматизації і того, як дані поводяться на платформі.

В масштабі підприємства ми ставимо ширші запитання. Де насправді живе Customer? Хто володіє Product? Яка система створює Order? Що є нашим авторитетним ідентифікатором? Яка інформація копіюється між системами, а яка лишається там, де є?

Ці два рівні мають бути пов’язані. Я бачив впровадження Salesforce, де внутрішня модель була цілком логічною сама по собі, але не пасувала до підприємства навколо. Цього недостатньо. Структури Salesforce мають бути відображені на рівні підприємства, а рішення підприємства мають повертатися в Salesforce.

Архітектура — це двосторонній рух.

Архітектура — це двосторонній рух Два рівні, один над одним. У масштабі підприємства: де живе клієнт, хто володіє продуктом, яка система створює замовлення, системи обліку, авторитетні ідентифікатори і що копіюється, а що лишається на місці. Усередині org Salesforce: об’єкти й зв’язки, ключі, обсяг, доступ, автоматизація і як дані поводяться на платформі. Одна стрілка вказує донизу: «рішення течуть донизу»; інша — догори: «структури течуть догори». Архітектура — це двосторонній рух. рішення течуть донизу структури течуть догори У масштабі підприємства Де живе клієнт? Хто володіє продуктом? Яка система створює замовлення? Системи обліку Авторитетні ідентифікатори Що копіюється, а що лишається на місці Усередині org Salesforce Об’єкти й зв’язки Ключі Обсяг Доступ Автоматизація Як дані поводяться на платформі Архітектура — це двосторонній рух. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Сповільнюйтеся перед дорогими рішеннями

Section titled “Сповільнюйтеся перед дорогими рішеннями ”

Одна з небезпек у технологіях: рішення, які найлегше втілити, можуть здаватися рішеннями, які найлегше ухвалити. Це не одне й те саме.

Створити ще один користувацький об’єкт легко. Створити ще одне поле легко. Підключити ще один API стає дедалі легше, а ШІ робить усе це ще легшим.

Але легкість реалізації майже нічого не каже про ціну архітектурного рішення.

Перед рішенням, яке важко скасувати, сповільніться настільки, щоб запитати: яку проблему ми насправді розв’язуємо? Які альтернативи ми розглянули? Що ми припускаємо? Що станеться, коли зростатиме обсяг і змінюватиметься бізнес? Що ще від цього залежатиме? Що буде, якщо ми помиляємося?

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

З важливими рішеннями є ще одна проблема: люди забувають, чому їх ухвалили.

Хтось дивиться на архітектуру через три роки й питає: «Навіщо хтось так це спроєктував?» Іноді відповідь — це був поганий дизайн. Таке буває. Але іноді була дуже добра причина: обмеження платформи, якого вже немає, регуляторна вимога, інша система, що не підтримувала бажаний підхід, компроміс, свідомо прийнятий, щоб устигнути до дедлайну.

Якщо ми записуємо лише що вирішили, а не чому, наступний архітектор не має способу про це дізнатися.

Для значних рішень — запишіть. Це не мусить бути 50-сторінковий документ. Корисний запис рішення може бути дуже коротким:

Контекст: Яку проблему ми розв’язуємо?

Варіанти: Які реалістичні альтернативи ми розглянули?

Рішення: Що ми обрали?

Наслідки: Що ми отримуємо і від чого відмовляємося?

Відповідальний: Хто відповідає за це рішення?

Перегляд: Яка причина чи дата має змусити нас переглянути його?

Цінність не в документі. Цінність у збереженні міркувань.

А коли рішення змінюється, не стирайте первісне. Замініть його новим. Рішення, правильне у 2027 році, може бути неправильним у 2030-му, бо змінюються обсяги, бізнес, Salesforce і наше розуміння. Я хочу зберегти історію: ось був контекст, ось було рішення і чому, ось що змінилося, а ось що ми вирішуємо тепер. Це куди цінніше, ніж удавати, що ми завжди знали відповідь.

Запис рішення Дві картки. Шаблон запису рішення ставить шість запитань: контекст — яку проблему ми розв’язуємо; варіанти — які реалістичні альтернативи ми розглянули; рішення — що ми обрали; наслідки — що ми отримуємо і від чого відмовляємося; відповідальний — хто відповідає; перегляд — яка причина чи дата має змусити нас переглянути його. Поруч та сама картка, заповнена для історії з погодженнями з модуля 1: кожному погодженню потрібні погоджувач і дата; варіантами були додаткові поля в Opportunity або дочірній об’єкт «Погодження»; рішенням став дочірній об’єкт «Погодження»; будь-яка кількість погоджень ціною ще одного об’єкта у звітах; відповідає архітектор даних проєкту; переглянути, якщо погодження перейдуть в іншу систему. Запис рішення шість запитань, одна сторінка КОНТЕКСТ Яку проблему ми розв’язуємо? ВАРІАНТИ Які реалістичні альтернативи ми розглянули? РІШЕННЯ Що ми обрали? НАСЛІДКИ Що ми отримуємо і від чого відмовляємося? ВІДПОВІДАЛЬНИЙ Хто відповідає за це рішення? ПЕРЕГЛЯД Яка причина чи дата має змусити нас переглянути його? Заповнено: погодження з модуля 1 КОНТЕКСТ Кожному погодженню потрібні погоджувач і дата ВАРІАНТИ Поля «Погоджувач 2» і «Погоджувач 3» в Opportunity Дочірній об’єкт «Погодження» РІШЕННЯ Дочірній об’єкт «Погодження» НАСЛІДКИ Будь-яка кількість погоджень, кожне зі своєю датою Ще один об’єкт у звітах ВІДПОВІДАЛЬНИЙ Архітектор даних проєкту ПЕРЕГЛЯД Якщо погодження перейдуть в іншу систему Коли рішення змінюється, не стирайте його. Замініть новим і збережіть історію. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

За межами іспиту: ШІ скорочує час від рішення до залежності. ШІ-інструмент може за секунди запропонувати модель даних, а потім створити поверх неї об’єкти, автоматизацію, інтеграційний код і інтерфейс. Раніше сумнівному рішенню потрібні були місяці розробки, перш ніж від нього багато що залежало; тепер залежності з’являються майже одразу. Тож переглядайте рішення під результатом, а не лише сам результат. ШІ може допомогти: перелічити варіанти, поставити під сумнів припущення і скласти чернетку запису рішення. Але вирішує все одно архітектор, і що важче скасувати рішення, то важливіше людське судження.

Знайте, які рішення важливі

Section titled “Знайте, які рішення важливі ”

Одна з навичок, яку я хочу, щоб ви розвинули, — розуміти, на що витрачати увагу.

Не перетворюйте кожен вибір конфігурації на архітектурний саміт.

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

Питайте:

Наскільки важко буде це скасувати?

Скільки від цього залежатиме?

Якщо відповіді — дуже важко і багато, ви, ймовірно, знайшли архітектурне рішення.

Два рішення, два рівні уваги Два рішення поруч, кожному ставлять ті самі два запитання. Перейменування мітки поля з Customer Category на Customer Segment: легко скасувати; від цього залежить трохи документації й навчання; отже, вирішіть і рухайтеся далі. Вибір між master-detail та lookup на великому об’єкті, де вже є дані: важко скасувати, бо кожен наявний запис має відповідати новому правилу, а разом із цим змінюються спільний доступ і зведення; від цього залежить, хто бачить кожен запис, що видаляється разом із батьківським, зведені поля, звіти, автоматизація і кожна інтеграція, що завантажує дані; отже, пригальмуйте, дослідіть варіанти й запишіть, чому. Перейменувати мітку поля Customer Category стає Customer Segment НАСКІЛЬКИ ВАЖКО СКАСУВАТИ? Легко: знову змінити мітку СКІЛЬКИ ВІД ЦЬОГО ЗАЛЕЖИТЬ? Трохи документації Трохи навчання користувачів ОТЖЕ Вирішіть і рухайтеся далі Master-detail чи lookup? на великому об’єкті, де вже є дані НАСКІЛЬКИ ВАЖКО СКАСУВАТИ? Важко: кожен наявний запис має відповідати новому правилу Разом із цим змінюються спільний доступ і зведення СКІЛЬКИ ВІД ЦЬОГО ЗАЛЕЖИТЬ? Хто бачить кожен запис Що видаляється разом із батьківським Зведені поля, звіти, автоматизація Кожна інтеграція, що завантажує дані ОТЖЕ Пригальмуйте, дослідіть варіанти Запишіть, чому Не перетворюйте кожен вибір на архітектурний саміт. Не ухвалюйте мимохідь рішення, з яким житимете десятиліття. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Сповільніться. Зрозумійте вимогу. Дослідіть альтернативи. Зробіть компроміси видимими. Ухваліть рішення. І запишіть, чому.

Мета архітектури — не ухвалювати рішення, які ніколи не можна змінити.

Мета — розпізнавати рішення, де передумати буде дорого.

Що тут вирішує архітектор

Section titled “Що тут вирішує архітектор ”
  • Які рішення архітектурні: важкі для скасування, і від них багато що залежить.
  • Скільки уваги отримує кожне рішення — пропорційно ціні помилки.
  • Які рішення записуються — з контекстом, варіантами, наслідками, відповідальним і точкою перегляду.
  • Як рішення щодо Salesforce узгоджуються з рішеннями підприємства.
  • Object Relationships Overview (opens in a new tab), Salesforce Help (англійською, перевірено 2026-10-09; повторно 2026-10-12): у зв’язку master-detail доступ і власність деталі визначає майстер, а видалення майстра видаляє його деталі.
  • Considerations for Object Relationships (opens in a new tab), Salesforce Help (англійською, перевірено 2026-10-09; повторно 2026-10-12): lookup перетворюється на master-detail лише тоді, коли в кожному записі є значення; перетворення змінює модель спільного доступу (на Controlled by Parent), а тип зв’язку визначає, які стандартні типи звітів доступні.
  • Roll-Up Summary Field (opens in a new tab), Salesforce Help (англійською, перевірено 2026-10-09; повторно 2026-10-12): зведені поля існують лише в зв’язках master-detail, і їх треба видалити, перш ніж master-detail можна буде перетворити на lookup.