SlideShare a Scribd company logo
Software Craftsmanship
meetup #14 online
Splitting Monolith
Павел Вейник
CEO @ Hard & Soft Skills
Мы сегодня online
●Зарегистрировались более 180
человек
●Наш четвертый митап online
●При поддержке Sam Solutions
●Информационный партнер
dev.by
3
Цель митапов
● Опробовать материал для курса
“Технический лидер” DONE
○ hardsoftskills.by/techlead.html
● Отладить материал для других
курсов
4
План митапов
11. Мотивация и эффективность
разработчика
12. Highload системы
13. Многопоточные вычисления
14. Масштабирование монолита
15. Карьера разработчика
https://bit.ly/3cFSBAB
5
Что интересует вас по M
● М или мс?
● Тестирование мс
● Архитектура мс
● Плохой и
хороший опыт
● взаимодействие
мс
● Обзор подходов
● Примеры
● Когда пилить?
6
Цель этого митапа
Сделать обзор разделения
монолита на мс
7
План этого митапа
1.Монолит vs микросервисы
2.Бизнес-контекст. Когда пилить?
3.Зачем пилить?
4.Переходный период
5.Что учесть?
6.Планируем переход
8
9
Монолит
● просто писать
● просто тестировать
● просто деплоить
● простое горизонтальное
масштабирование
10
Монолит
● ограничены размер и
сложность
● сложно быстро изменять
● долгий старт приложения
● полный деплой при
обновлении приложения
11
Монолит
● непредсказуемые
последствия изменения
● сложно сделать CI/CD/CD
● потенциальные конфликты
ресурсов
12
Монолит
● низкая надежность, мелкий
баг может выбить систему
● сложно применять новые
технологии, отставание
технологий
13
Микросервисы
● Снижают сложность
отдельных компонентов
● Каждый мс можно писать
независимо
● Проще применять новые
технологии
14
Микросервисы
● Проще настроить CI/CD/CD
● Каждый мс масштабируется
независимо
● Сложно вносить изменения,
затрагивающие несколько мс
● Сложный деплой
15
Микросервисы
● система с мс всегда
распределенная
● разделенная между мс бд:
распределенные tx или
eventual constistency
16
Контекст бизнеса
● Начало работы
● Больше клиентов
● Еще больше - не хватает
мощностей
● Больше фич, сложнее
система
17
Контекст бизнеса
● Быстрее релизить новые фичи
● Применить новые технологии
(и улучшить опр. параметры)
● Перейти в облако
18
Когда пилить?
● Высокая сложность
○ порог входа
○ новые технологии
○ невероятные баги
● Не хватает scale
● Медленные релизы
19
Рассмотрите опции
● Можно размножить монолит,
разделив данные
● Можно масштабироваться
вертикально
● Можно масштабировать
только бд
20
Масштабирование21
Мс не всегда лучше
● Можно размножить монолит,
разделив данные
● Можно масштабироваться
вертикально
● Можно смасштабировать
только бд
22
Подходы к разделению
● “Лижем мороженое”
○ меньше рисков
○ больше времени
○ длинный переходный
период
23
Подходы к разделению
● “Играем в лего”
○ быстрее
○ наследуем внутренние
проблемы монолита
○ больше рисков
24
Подходы к разделению
● Переписываем с нуля
○ продумываем все наново
○ синдром второй системы
○ период перехода, монолит
не развивается
25
На что обратить внимание
● Canary releases
● Работа с библиотеками
● Безопасность
● Логирование
● Мониторинг
● Версионность API
26
На что обратить внимание
● Коммуникации мс
○ Service mesh
● Разделение базы
● Availability
● Контейнеризация
● CI/CD/CD
27
На что обратить внимание
● Разделяемые решения о
языках, платформах,
технологиях, подходах…
● Границы мс расплываются со
временем и пониманием
(bounded context)
28
На что обратить внимание
● Управление конфигурациями
● Динамическое
масштабирование в облаке
● Отказоустойчивость by design
● Инструменты отладки
системы целиком
29
Canary releases30
Библиотеки
● пока есть М и мс - они
используют общие либы
● зависимости (либы) мс
убираем в длинной
перспективе, не сразу
31
Библиотеки
● Авторизацию и
аутентификацию выделяем в
либу или переделываем
● JWT
32
Безопасность
● Продумать заново
● Ручные настройки TLS
● Разделение на подсети
○ API Gateway
○ прокси
33
Логгирование
● Централизованное хранение
логов
○ ELK/Kibana
● Message/Request id
34
Мониторинг
● Создать health check для
каждого мс
● Устранить single points of f
● Исключить эффект домино
● Продумать обработку
ошибок
35
API versioning
● URI/headers/content/params
● Документация
● Зависимости между мс
36
Коммуникации мс
● Хореография
● Оркестрация
● Шина сообщений
● Форматы
37
Service mesh
● шаблон для общения мс
38
Availability
● Продумывать отдельно для
каждого мс
● Разные гео, датацентры и тп
39
Контейнеризация
● Docker
● Kubernetes
40
Бд и мс
● Общая или отдельные?
○ по мере перехода
● Транзакции
○ распределенные?
● Consistency
○ eventual?
41
Необходимые знания
● Network perfomance
● Контейнеризация
● API/RPC/socket/MQ
● Cloud
○ vendor lock
42
Составляем план
● Понимаем цель
● Определяем архитектуру мс
● Определяем стратегию
перехода
43
Составляем план
● Обеспечиваем тесты
○ unit
○ integration
● Смотрим на что обратить
внимание по списку выше
44
Составляем план
● Проектируем способ деплоя
○ prod
○ staging
○ test…
● Проектируем API versioning
45
Составляем план
● Проектируем документацию
○ форматы, версии, конф
○ SLA
○ общие для всех мс решения
46
Курсы
● Цель митапов - материалы для
различных курсов
● Для мидлов, сеньеров, лидов,
архитекторов, CTO
● 16-го июня первое занятие
“Технический лидер”
47
Ссылки
монолит vs микросервисы, общее
● https://martinfowler.com/articles/microservices.html
● https://articles.microservices.com/monolithic-vs-microservices-architecture-5c4848858f59
● http://www.antonkharenko.com/2015/06/notes-on-fallacies-of-distributed.html
● https://dev.to/alex_barashkov/microservices-vs-monolith-architecture-4l1m
разделение монолита
● https://buttercms.com/books/microservices-for-startups/should-you-break-up-your-monolithic-application
● https://martinfowler.com/articles/break-monolith-into-microservices.html#TheMicroserviceEcosystemDestination
● https://www.nginx.com/blog/refactoring-a-monolith-into-microservices/
● https://microservices.io/refactoring/
● https://dzone.com/articles/breaking-a-monolith-into-microservices-best-practi
● https://medium.com/@walkingtreetech/strategies-to-migrate-monolithic-application-to-microservices-b2028eb4873b
● https://medium.com/@NeotericEU/how-can-you-refactor-a-monolithic-application-into-microservices-2eef8e323840
● https://www.springboottutorial.com/breaking-a-monolith-into-microservices
● https://docs.microsoft.com/en-us/azure/architecture/microservices/migrate-monolith
● https://www.ben-morris.com/how-to-decompose-that-monolith-into-microservices-gently-does-it/
48
Ссылки
service mesh
● https://habr.com/ru/company/flant/blog/327536/
● https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh
книги
● https://www.oreilly.com/library/view/monolith-to-microservices/9781492047834/
● https://www.oreilly.com/library/view/practical-microservices/9781680507782/
разделение бд
● https://www.oreilly.com/library/view/monolith-to-microservices/9781492047834/ch04.html
API versioning
● https://www.xmatters.com/blog/devops/blog-four-rest-api-versioning-strategies/
49

More Related Content

Similar to Software craftsmanship 14 online Splitting the Monolith

Software craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systemsSoftware craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systems
Pavel Veinik
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды Web
DrupalSib
 
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Наталия Егорова
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
Alexander Syrotenko
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Microservices for test automation
Microservices for test automationMicroservices for test automation
Microservices for test automation
Nikita Makarov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Dev2Dev
 
ПиАПС, Лекция №1а - Роль архитектора, гибкая архитектура
ПиАПС, Лекция №1а - Роль архитектора, гибкая архитектураПиАПС, Лекция №1а - Роль архитектора, гибкая архитектура
ПиАПС, Лекция №1а - Роль архитектора, гибкая архитектураPavel Shalagin
 
«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»
DataArt
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
Scrum Wars
Scrum WarsScrum Wars
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
CodeFest
 
Презентация для 1 семинара по 1C-Bitrix в компании Softline
Презентация для 1 семинара по 1C-Bitrix в компании SoftlineПрезентация для 1 семинара по 1C-Bitrix в компании Softline
Презентация для 1 семинара по 1C-Bitrix в компании Softline
Roman Kudlay
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Ontico
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
Alexander Byndyu
 

Similar to Software craftsmanship 14 online Splitting the Monolith (20)

Software craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systemsSoftware craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systems
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды Web
 
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Microservices for test automation
Microservices for test automationMicroservices for test automation
Microservices for test automation
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
 
ПиАПС, Лекция №1а - Роль архитектора, гибкая архитектура
ПиАПС, Лекция №1а - Роль архитектора, гибкая архитектураПиАПС, Лекция №1а - Роль архитектора, гибкая архитектура
ПиАПС, Лекция №1а - Роль архитектора, гибкая архитектура
 
«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Scrum Wars
Scrum WarsScrum Wars
Scrum Wars
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Презентация для 1 семинара по 1C-Bitrix в компании Softline
Презентация для 1 семинара по 1C-Bitrix в компании SoftlineПрезентация для 1 семинара по 1C-Bitrix в компании Softline
Презентация для 1 семинара по 1C-Bitrix в компании Softline
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
 

More from Pavel Veinik

Software craftsmanship meetup 22. engineering excellence
Software craftsmanship meetup 22. engineering excellenceSoftware craftsmanship meetup 22. engineering excellence
Software craftsmanship meetup 22. engineering excellence
Pavel Veinik
 
Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего
Pavel Veinik
 
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
Pavel Veinik
 
System Engineering Webinar
System Engineering WebinarSystem Engineering Webinar
System Engineering Webinar
Pavel Veinik
 
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
Pavel Veinik
 
Software craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчикаSoftware craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчика
Pavel Veinik
 
Software craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииSoftware craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакции
Pavel Veinik
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Pavel Veinik
 
Software craftsmanship 8
Software craftsmanship 8Software craftsmanship 8
Software craftsmanship 8
Pavel Veinik
 
Software craftsmanship 7
Software craftsmanship 7Software craftsmanship 7
Software craftsmanship 7
Pavel Veinik
 
Software craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы AgileSoftware craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы Agile
Pavel Veinik
 
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыSoftware craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисы
Pavel Veinik
 
Software craftsmanship meetup #4
Software craftsmanship meetup #4Software craftsmanship meetup #4
Software craftsmanship meetup #4
Pavel Veinik
 
Software craftsmanship 3
Software craftsmanship 3Software craftsmanship 3
Software craftsmanship 3
Pavel Veinik
 
Software craftsmanship 1
Software craftsmanship 1Software craftsmanship 1
Software craftsmanship 1
Pavel Veinik
 
Women in technology_week-women_leadership
Women in technology_week-women_leadershipWomen in technology_week-women_leadership
Women in technology_week-women_leadership
Pavel Veinik
 
Career day 2019
Career day 2019Career day 2019
Career day 2019
Pavel Veinik
 
Программирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстовПрограммирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстов
Pavel Veinik
 
Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.
Pavel Veinik
 

More from Pavel Veinik (19)

Software craftsmanship meetup 22. engineering excellence
Software craftsmanship meetup 22. engineering excellenceSoftware craftsmanship meetup 22. engineering excellence
Software craftsmanship meetup 22. engineering excellence
 
Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего
 
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
 
System Engineering Webinar
System Engineering WebinarSystem Engineering Webinar
System Engineering Webinar
 
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
 
Software craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчикаSoftware craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчика
 
Software craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииSoftware craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакции
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
 
Software craftsmanship 8
Software craftsmanship 8Software craftsmanship 8
Software craftsmanship 8
 
Software craftsmanship 7
Software craftsmanship 7Software craftsmanship 7
Software craftsmanship 7
 
Software craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы AgileSoftware craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы Agile
 
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыSoftware craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисы
 
Software craftsmanship meetup #4
Software craftsmanship meetup #4Software craftsmanship meetup #4
Software craftsmanship meetup #4
 
Software craftsmanship 3
Software craftsmanship 3Software craftsmanship 3
Software craftsmanship 3
 
Software craftsmanship 1
Software craftsmanship 1Software craftsmanship 1
Software craftsmanship 1
 
Women in technology_week-women_leadership
Women in technology_week-women_leadershipWomen in technology_week-women_leadership
Women in technology_week-women_leadership
 
Career day 2019
Career day 2019Career day 2019
Career day 2019
 
Программирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстовПрограммирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстов
 
Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.
 

Software craftsmanship 14 online Splitting the Monolith