SYSTEM DESIGN IN PRACTICE

Навчіться проєктувати розподілені застосунки на реальних бізнес-кейсах

Основна інформація про курс

Графік

16 листопада 2026 - 21 грудня 2026
Понеділок та четвер (19:30 за Києвом)

Формат

Зустрічі в Zoom (+запис)

Постійний зв'язок у Slack

Зайнятість

11 занять по 1.5 години

17 годин ДЗ

Ціна

330$ за курс

Манібек 7 днів

ПРО КУРС

System Design in Practice — це практичний курс для розробників, які хочуть навчитися проєктувати системи в умовах, наближених до реальної роботи: з бізнес-вимогами, обмеженнями, trade-offs і рішеннями, які потрібно вміти пояснювати та захищати.

На курсі ми не просто розбиратимемо архітектурні патерни — ми пройдемо повний шлях від бізнес-кейсу до архітектури розподіленого застосунку. Крок за кроком визначимо межі системи, функціональні та нефункціональні вимоги, спроєктуємо API, доменну модель, сховища, інтеграції, real-time updates, пошук, фонову обробку, observability, безпеку та механізми масштабування.

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

Курс буде корисним middle- та senior-розробникам, які хочуть впевненіше брати участь в архітектурних дискусіях, проєктувати новий функціонал з нуля, бачити слабкі місця в системах і краще підходити до system design interviews.

ВХІДНІ ВИМОГИ

Ви візьмете з курсу максимум, якщо у вас уже є:

Досвід розробки веб-застосунків

Досвід роботи з HTTP, REST API, SQL. Також вміння читати приклади коду на TypeScript.

Базові концепції розподілених систем

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

Англійська на рівні читання документації

Заняття українською, але конспекти та додаткові матеріали — англійською.

Сумніваєтесь, чи підходить вам курс? Напишіть у Telegram — підкажемо чесно.

ВІДГУКИ

Відгуки інженерів, які застосовують здобуті знання у своїй роботі.

← Прокрутіть, щоб побачити більше відгуків →

ПРОГРАМА КУРСУ

Огляд бізнес-кейсу та аналіз вимог

Визначимо, що ми хочемо побудувати, проаналізуємо бізнес-кейс, визначимо вимоги, use cases тощо.

На занятті
  • Функціональні вимоги бізнес-кейсу
  • Нефункціональні вимоги (NFRs): performance, scalability, availability, security тощо
  • Вплив цільових значень NFRs на архітектурні рішення: приклади
  • Засоби автоматизованого вимірювання нефункціональних вимог
Домашнє завдання (~1.5 год)

Не всі NFR однаково важливі — частина з них для конкретної системи просто нерелевантна. Отримавши змішаний список із 15 нефункціональних вимог, визначте якомога більше тих, що для платформи управління інцидентами другорядні або зайві, і коротко поясніть, чому.

Заняття 1 16 листопада 2026 19:30 за Києвом
Проєктування доменної моделі

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

На занятті
  • Доменна модель системи: сутності та зв’язки між ними
  • Виявлення додаткових доменних концептів за допомогою Event Storming
  • Trade-offs проєктування доменної моделі
  • Доменна модель як відправна точка архітектурного рефакторингу: практичні кейси
Домашнє завдання (~3 год)

Розширте фінальну доменну модель уроку новою сутністю — follow-up action items, які команда фіксує після постмортему. Визначте її атрибути, зв’язки з інцидентом і користувачем, кардинальність, спосіб моделювання статусу та інваріанти, що обмежують її існування.

Заняття 2 19 листопада 2026 19:30 за Києвом
Проєктування API контрактів

Спроєктуємо API-контракти так, щоб вони підтримували основні сценарії продукту і залишали простір для еволюції системи.

На занятті
  • REST API для ключових функціональних вимог
  • API-first підхід: OpenAPI, Client SDK Generation, Automated Testing
  • CI/CD-пайплайн для автоматичного налаштування та оновлення API Gateway на основі OpenAPI spec
  • Версіонування API-контрактів та backward compatibility
Домашнє завдання (~1 год)

Розширте OpenAPI-специфікацію новим ресурсом — follow-up action items з попереднього уроку. Спроєктуйте шляхи, операції, схеми, коди відповідей і помилки так, щоб специфікація залишалась цілісною.

Заняття 3 23 листопада 2026 19:30 за Києвом
Розробка High-Level Design

Розробимо high-level architecture першої версії системи і визначимо, які дані, сховища та гарантії потрібні різним частинам продукту.

На занятті
  • Початкова архітектура, що покриває функціональні вимоги
  • Принципи проєктування архітектури, здатної адаптуватися до майбутніх змін у вимогах, інтеграціях тощо
  • Вибір даних для relational storage та інших типів сховищ
  • SQL schema для реляційних даних: ключі, зв’язки, індекси
  • Синхронна та асинхронна інтеграція сервісів: сценарії
  • Outbox Pattern для надійної публікації подій
Домашнє завдання (~3 год)
  • Outbox Worker читає таблицю outbox і публікує події в брокер. Порівняйте два варіанти розгортання — окремий сервіс проти фонового процесу всередині API Service — за масштабуванням, ізоляцією збоїв, зв'язністю деплою та вартістю. Виберіть той, що краще підходить Incident Management Platform, і обґрунтуйте вибір.
  • Оберіть одного хмарного провайдера (Azure, AWS, GCP). Зіставте кожен контейнер із фінальної архітектурної C4 діаграми з конкретним сервісом цього провайдера. Задокументуйте обрану хмарну архітектуру.
Заняття 4 26 листопада 2026 19:30 за Києвом
Redesign for Read Scalability та Writes Isolation

Адаптуємо архітектуру під read-heavy навантаження.

На занятті
  • Відповідність поточної архітектури нефункціональним вимогам: обмеження
  • Оцінка та оптимізація API і баз даних без реорганізації архітектури
  • Redis для розділення read та write навантажень
  • Non-functional requirements у production: 3 додаткові сценарії
  • Кандидати на оптимізацію read-heavy навантаження
Домашнє завдання (~2 год)

Дослідіть сценарії використання Redis: кеш, сховище сесій, rate limiting, розподілені блокування, черги, pub/sub і стріми. Для кожного сценарію проаналізуйте, чи потрібен він Incident Management Platform — з посиланням на конкретну функціональну або нефункціональну вимогу.

Заняття 5 30 листопада 2026 19:30 за Києвом
Вертикальне та горизонтальне масштабування API

Проаналізуємо стратегії масштабування API та оберемо найефективніший підхід.

На занятті
  • Сценарії вертикального масштабування API
  • Load Balancing алгоритми розподілення запитів та тригери автоскейлінгу
  • Оптимізація Cold Start: pre-warmed інстанси та scheduled scaling
  • Проблема stateful сервісів при горизонтальному масштабуванні
  • Graceful Shutdown: механізм та налаштування
Домашнє завдання (~2 год)

Incident Management Platform очікує сплеск трафіка під час масового інциденту, коли кількість запитів до API Service зростає в кілька разів за хвилини. Оберіть тригери автоскейлінгу та порогові значення, оберіть підходи оптимізації Cold Start і визначте, які кроки Graceful Shutdown потрібні, щоб не втратити запити, що вже обробляються, під час scale-down.

Заняття 6 3 грудня 2026 19:30 за Києвом
Реплікація реляційних баз даних та кешування (Redis)

Проаналізуємо способи розділити read та write навантаження та оберемо найоптимальніший.

На занятті
  • Кешування даних: умови застосування та альтернативні методи
  • Патерни проєктування cache-keys, invalidation on writes, TTLs
  • Захист від Cache Stampede при горизонтальному масштабуванні
  • Масштабування бази даних з використанням реплік
  • Репліки для досягнення High Availability
Домашнє завдання (~2 год)

GET /api/incidents — другий за навантаженням ендпоінт (~1000 RPS, ~70–80% запитів — дефолтний вигляд status=open, page 1), що живить dashboard grid у UI. Спроєктуйте формат cache key з обґрунтуванням кожного сегмента та TTL, напишіть псевдокод інвалідації для зміни статусу інциденту, розгляньте техніку cache versioning як альтернативу прямій інвалідації.

Заняття 7 7 грудня 2026 19:30 за Києвом
Проєктування Full-Text Search

Спроєктуємо пошук як окремий архітектурний компонент: від вимог до індексації, синхронізації даних.

На занятті
  • Вимоги до пошуку, фільтрації та сортування інцидентів
  • Інструменти повнотекстового пошуку: OpenSearch та Algolia
  • Архітектура пошуку: окремий search index та синхронізація даних з основною базою
  • Синхронна й асинхронна індексація, CDC у проєктуванні пошуку
Домашнє завдання (~1.5 год)

Сценарії: внутрішній довідник, пошук інцидентів під час великої аварії, адмінка на два тижні розробки, зміна даних, які продубльовані в тисячах документів пошукового індексу. Для кожного треба обрати найбільш дешевий механізм синхронізації реляційних даних (dual-write, scheduled sync, transactional outbox, full rebuild vs targeted update) із пошуковим індексом. Окремо треба спроєктувати, що станеться, коли синхронізація впаде.

Заняття 8 10 грудня 2026 19:30 за Києвом
Проєктування Near Real-Time Updates

Розберемо, як проєктувати системи, у яких клієнти отримують оновлення майже в реальному часі.

На занятті
  • Real-time update flow: від зміни інциденту до доставки оновлення в браузер користувача
  • WebSocket connection management: підключення, підписка на incident channel, reconnect, heartbeat
  • Polling, long polling, Server-Sent Events та WebSockets: порівняння підходів
  • Масштабування WebSocket з’єднань при зростанні навантаження
Домашнє завдання (~2 год)

Спроєктуйте наскрізний flow near real-time updates для Incident Management Platform: payload події оновлення інциденту, поведінку клієнта при reconnect (виявлення пропущених подій і resync стану) та метрики (наприклад, delivery latency) і цільові значення для перевірки NFR.

Заняття 9 14 грудня 2026 19:30 за Києвом
Проєктування Audit Trail та Observability

Розширимо нашу архітектуру двома ключовими складовими — Audit Trail та Observability.

На занятті
  • Audit trail: фіксація того, хто, що, коли і в якому об’єкті змінив
  • Асинхронний flow для audit logs: message queue, shared packages, workers, NoSQL сховище
  • OpenTelemetry: стандарт для збору logs, metrics і traces, інтеграція з observability-платформами
  • Distributed tracing для аналізу повного шляху запиту між сервісами, базами даних, чергами
Домашнє завдання (~1.5 год)

П'ять систем — від невеликого SaaS до державного архіву на 15 років. Для кожної ви обираєте сховище для audit logs. Кожен кейс має вимогу, яка відсікає найпопулярніший вибір.

Заняття 10 17 грудня 2026 19:30 за Києвом
Проєктування аутентифікації та авторизації

Завершимо архітектуру системи безпечною моделлю доступу: від user authentication до service-to-service authorization і ролей у продукті.

На занятті
  • Як працює OAuth 2.0 на прикладі сервісу draw.io
  • OpenID Connect та Auth0 як Identity Provider
  • Валідація токенів: JWKS та /introspect API
  • JWT токени (ID, Access, Refresh): зберігання, конфігурація, валідація
  • Проєктування моделі RBAC: як зберігати, валідувати, відкликати ролі та дозволи
Домашнє завдання (~2 год)

Ви проєктуєте перевірку токенів для аптеки при лікарні: більшість запитів — звичайні читання, невелика частка — дії з наслідками для пацієнта. Дві вимоги тягнуть у різні боки: блокування співробітника має спрацьовувати миттєво, а система не може лягати разом з identity provider'ом. Обхідні шляхи закриті умовою — доведеться вирішувати, чи всі ендпоінти перевіряють токен однаково. Результат — ADR на одну сторінку з sequence діаграмою, цифрами та ціною рішення.

Заняття 11 21 грудня 2026 19:30 за Києвом

ВИКЛАДАЧ ТА АВТОР КУРСУ

Фото автора

Олександр Марфут  LinkedIn Telegram

Technical Architect @SoftServe

Software Architect та Technical Leader з понад 15 роками досвіду проєктування cloud-native та enterprise-систем. Спеціалізуюся на архітектурі хмарних рішень (Azure, AWS), модернізації legacy-систем, розподілених системах та AI-трансформації бізнесу. Маю практичний досвід супроводу проєктів на всіх етапах — від pre-sales та discovery до production delivery. Окремий напрям моєї діяльності — викладання та розвиток інженерів: понад 5 років досвіду створення навчальних програм, проведення тренінгів і менторства.

ЧОГО ВИ НАВЧИТЕСЯ

Перетворювати бізнес-вимоги на архітектурні рішення — аналізувати функціональні та нефункціональні вимоги до продукту, аналізувати обмеження системи та обґрунтовувати вибір архітектурних підходів.
Застосовувати сучасні архітектурні патерни — працювати з API design, CQRS, Outbox Pattern, Asynchronous Messaging, Caching, WebSockets, Domain Driven Design та іншими підходами.
Уникати типових помилок у проєктуванні систем — розбирати реальні архітектурні проблеми з практичного досвіду викладача: невдалі рішення, їхні наслідки та підходи, які допомагають будувати надійніші системи.
Проєктувати ключовий функціонал сучасних систем — продумувати real-time updates, автентифікацію та авторизацію, кешування, пошук, фонову обробку, аудит, observability та інші важливі системні компоненти.