Для груп і кількох брендів
Кілька компаній, одна інсталяція, жодних спільних клієнтів
Групи зазвичай вирішують це двічі погано: або п'ять окремих інсталяцій і п'ять окремих усього, або одна інсталяція та урочиста обіцянка, що застосунок завжди фільтрує правильно. Перше — дорого. Друге — це обіцянка, а обіцянки не є моделлю безпеки.
Якщо ви керуєте більш ніж однією компанією — холдингом із дочірніми структурами, франшизою, двома брендами для різних ринків, агентством і тим, що з нього виокремилося — ви вже знаєте форму цієї проблеми. Бренди поділяють людей, інструменти та фінансовий відділ. Вони не поділяють клієнтів — і не повинні здаватися такими, що поділяють.
iKonekt керує всіма ними з однієї інсталяції, а розділення між ними забезпечує база даних, а не код. Ця відмінність звучить академічно — до того дня, коли вже ні.
Чому цей рівень важливий
Фільтр на рівні застосунку — це речення в запиті. Він працює, доки кожен запит, який будь-коли буде написано, містить його — включно з тим, що написали поспіхом, тим, що написав новий розробник, і тим, що написали для звіту, який мали використати лише раз.
Перенесіть межу в базу даних — і арифметика перевертається. Політика виконується на кожне читання й кожен запис, під усім. Запит, який забув про компанію, не повертає неправильних рядків; він не повертає жодного. Режим відмови стає порожнім екраном і розгубленим розробником — а це і є правильний режим відмови.
Порожні екрани — це функція. Ми радше пояснимо порожній екран одному з наших інженерів, ніж пояснимо список клієнтів двом клієнтам, які не очікували зустрітися.
- 1Клієнти & ланцюжкиОбмежено. Продавець у бренді A не може дістати дані бренду B — за конструкцією, а не за конфігурацією.
- 2Претензії на клієнта«Ми вже маємо цей обліковий запис» — це блокування, що діє на рівні компанії, тож два бренди можуть працювати на одному ринку, не наштовхуючись одне на одного.
- 3Промпти & налаштуванняКожна компанія редагує свої. Єдине місце, де це колись було спільним, — баг, і саме цей баг система найбільше пишається тим, що його знайшла.
- 4Партнерські програмиМодуль на компанію, а не глобальний, який успадковують усі.
Межа, що забезпечується під застосунком
Що група насправді може спільно використовувати
Розділення — не ізоляція заради ізоляції. Те, що варто спільно використовувати в групі, використовується спільно навмисно, і це переважно нудні речі — що якраз правильно, бо саме в нудних речах живе дубльований витрат:
- Одна інсталяція для запуску й оновлення. Одне розгортання, один набір облікових даних для догляду, одна річ, яку треба латати.
- Одна команда людей у різних ролях. Людина може працювати в більш ніж одній компанії; чого вона не може — це бачити обидві водночас через запит, який забув запитати.
- Один набір звичок. Те, як призначають лід, як пишуть примітку, як завдання доходить до рахунку — вивчається один раз, застосовується всюди, що скорочує адаптацію приблизно до одного ранку.
- Одні стосунки з рештою родини. castomAPI під капотом, той самий обліковий запис, ті самі конектори — з налаштуванням на компанію там, де це важливо.
Питання, яке група завжди ставить другим
«Чи можемо ми звітувати по всіх них?» Так — з власної позиції групи, навмисно й явно, а не як побічний ефект протікаючої межі. Ця відмінність — весь дизайн: перетин лінії має бути дією, яку хтось зробив навмисно, маючи на це повноваження. Він ніколи не повинен бути тим, чого випадковий ідентифікатор може досягти помилково.
А питання, яке вони ставлять третім: «що буде, якщо ми продамо один із брендів?» Межа, яку тримає база даних, — це також межа, з якої можна витягти чисту копію. Це не збіг — розділення та переносимість є однією властивістю, побаченою з двох різних нарад.
Під підлогою
Що саме тримає лінію
Не твердження, а список. Якщо постачальник не може навести цей список про власний продукт, це варто помітити.
26
Таблиці, що несуть свою компанію, з примусово увімкненою перевіркою, а не просто доступною.
72
Політики, виписані по одній, щоб кожну прочитала людина, а не згенеровані циклом.
942
Тести, що виконуються на базі даних, яка щоразу будується з нуля при будь-якій зміні.
0
Компанії за замовчуванням. Запит без scope падає, не діставшись до даних — немає резервного варіанта, який можна забути вимкнути.

«П'ять компаній, п'ять інсталяцій, п'ять рахунків від вас».
Одна інсталяція. П'ять меж, які тримає база даних.
Спільні люди, спільні звички, спільна платформа — і жодного спільного клієнта. Перетнути цю межу може лише людина, яка зробила це навмисно, а не ідентифікатор, переплутаний випадково.
Як побудовано ізоляцію →