SYSTEM DESIGN IN PRACTICE

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

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

Графік

2 листопада 2026 - 7 грудня 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 2 листопада 2026 19:30 за Києвом
Проєктування доменної моделі

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

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

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

Заняття 2 5 листопада 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 9 листопада 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 12 листопада 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 16 листопада 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 19 листопада 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 23 листопада 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 26 листопада 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 30 листопада 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 3 грудня 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 7 грудня 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 та інші важливі системні компоненти.