SlideShare a Scribd company logo
1 of 24
Download to read offline
Разработка в долг
23 марта, 2017
2
Александр Радкевич
Инженер-программист, EPAM Systems
Обо мне
3
1. влияет на время, стоимость и качество проекта
2. практически неизбежен для любого проекта
3. каждый участник проекта должен знать, что это такое
Почему именно технический долг?
4
Впервые использовал
метафору «технический
долг» в 1992 году, чтобы
объяснить финансистам,
почему нужно внести
изменения в архитектуру
приложения.
Уорд Каннингем
By Carrigg Photography for the Wikimedia Foundation –
Own work, CC BY-SA 3.0,
https://commons.wikimedia.org/w/index.php?curid=17697618
5
Источники технического долга
Код, над которым вы работаете, должен отображать
ваше текущее понимание того, как должна работать
ваша программа.
Главная идея метафоры
6
это ресурсы, которые вам необходимы для того, чтобы
привести код в состояние, соответствующее вашему
текущему пониманию.
Технический долг –
7
• необходимость подстраивать архитектуру приложения
под текущее понимание
Источники технического долга
8
• более детальное изучайте предметную область
• содержите код в чистоте
• пишите техническую документация
• просматривайте чужой код
• практикуйте техники, позволяющие как можно скорее выявить
проблемы и повысить качество кода (парное программирование)
Как минимизировать такой долг?
9
Иногда вам может
понадобиться такое
решение, которое не
является устойчивым в
долгосрочной перспективе,
но приносит
краткосрочную выгоду.
Дядя Боб (Роберт Мартин)
By Tim-bezhashvyly - Own work, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=38703621
10
Может быть стоит взять кредит?
11
• необходимость подстраивать архитектуру приложения
под текущее понимание
• временные решения, приносящие краткосрочные выгоды
Источники технического долга
12
• не берите долг, если это возможно
• полученная выгода должна превышать расходы на устранение
долга
• возвращайте долги как можно скорее
• не устраивайте в коде беспорядок
Как решать такие проблемы?
13
Беспорядок – не технический долг, это просто беспорядок
14
Временно – не значит спустя рукава
15
Технический долг – это
метафора, поэтому
реальный вопрос
заключается в том, полезна
ли метафора долга для
размышления о том, как
решать проблемы с
дизайном кода, и как
донести эти размышления
до других.
Мартин Фаулер
By Webysther Nunes - Own work, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=39594469
16
Квадрант технического долга
Необдуманный
(reckless)
Обдуманный
(prudent)
У нас нет времени на дизайн
Умышленный (deliberate)
Неумышленный (inadvertent)
Нам нужно срочно выпустить релиз,
затраты на исправление долга
окупятся с лихвой
Многоуровневая архитектура?
Не, не слышали
Теперь мы знаем,
как мы это должны были делать
17
• дублирование кода
• низкое покрытие тестами
• отсутствие или низкое качество комментариев и документации к
коду
• чрезмерная сложность кода
• нарушение стандартов, несоблюдение стиля кода
• код с запашком
• код с долгом достался вам по наследству
Другие источники технического долга
18
• необходимость подстраивать архитектуру приложения
под текущее понимание
• временные решения, приносящие краткосрочные выгоды
• проблемы с качеством кода
Источники технического долга
19
Работа с техническим долгом
• закладывайте время на работу с техническим долгом
• анализируйте ваш технический долг
• устанавливайте рабочие соглашения в команде
• выделяйте время на образование
На уровне релиза (долгосрочная перспектива)
20
Работа с техническим долгом
• поддерживайте высокий уровень покрытия тестами
• контролируйте накладные
расходы, вызванные техническим долгом
• насколько вы удовлетворены от работы с вашим кодом?
• учитывайте зависимости между разными составляющими
технического долга
• проводите ретроспективы
• создавайте истории по работе с техническим долгом
• используйте непрерывную интеграцию
На уровне итерации (среднесрочная перспектива)
21
Работа с техническим долгом
• просматривайте чужой код
• практикуйте парное программирование
• придерживайтесь стандартов кода
• сделайте технический долг видимым
На уровне истории пользователя (короткосрочная перспектива)
22
Какие еще могут быть долги?
• по качеству (quality debt)
• по функциональности (feature debt)
• пользовательского взаимодействия (user experience debt)
• навыков(skills debt)
Помимо технического долга выделяют также долги:
23
• технический долг может быть нашим союзником, если нам нужно
выиграть время
• лучший вариант - избегать долгов, однако вам это вряд ли удастся
• технический долг снижает продуктивность, поэтому старайтесь
избавиться от него как можно быстрее
• анализируйте технический долг и выстраивайте работу с ним на
разных уровнях
• объясните клиенту, почему важно выделять время на работу с
техническим долгом
• не путайте технический долг с другими видами долгов
Подведем итоги
24
Информация по теме
• http://wiki.c2.com/?WardExplainsDebtMetaphor
• https://martinfowler.com/bliki/TechnicalDebt.html
• https://martinfowler.com/bliki/TechnicalDebtQuadrant.html
• https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt
• https://www.agilealliance.org/introduction-to-the-technical-debt-concept/
• https://www.agilealliance.org/project-management-and-technical-debt/

More Related Content

Viewers also liked

ES2015+: давно пора!
ES2015+: давно пора!ES2015+: давно пора!
ES2015+: давно пора!Vitebsk Miniq
 
Соревнования по программированию
Соревнования по программированиюСоревнования по программированию
Соревнования по программированиюVitebsk Miniq
 
Startlist 2017.xlsx results athletes
Startlist 2017.xlsx   results athletesStartlist 2017.xlsx   results athletes
Startlist 2017.xlsx results athletesAlberto Stretti
 
Startlist 2017.xlsx startlist
Startlist 2017.xlsx   startlistStartlist 2017.xlsx   startlist
Startlist 2017.xlsx startlistAlberto Stretti
 
M.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and ServerlessM.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and ServerlessQNIB Solutions
 
Islam 101 - beliefs and practises
Islam 101 - beliefs and practisesIslam 101 - beliefs and practises
Islam 101 - beliefs and practisesabdulg99
 
Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24Reshmaurfaculty
 
3Com 1697-560-000-1.00
3Com 1697-560-000-1.003Com 1697-560-000-1.00
3Com 1697-560-000-1.00savomir
 
Third True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SCThird True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SCOm Prakash Poddar
 
Amalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosialAmalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosialmeylahasim97
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Vitebsk Miniq
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноVitebsk DSC
 
Виртуализация
ВиртуализацияВиртуализация
ВиртуализацияVitebsk Miniq
 
Reactивная тяга
Reactивная тягаReactивная тяга
Reactивная тягаVitebsk Miniq
 
Blockchain: is just buzzword?
Blockchain: is just buzzword?Blockchain: is just buzzword?
Blockchain: is just buzzword?Vitebsk Miniq
 
An Accordion or a Waistcoat?
An Accordion or a Waistcoat?An Accordion or a Waistcoat?
An Accordion or a Waistcoat?Postcardie
 
3Com 6756-10/C
3Com 6756-10/C3Com 6756-10/C
3Com 6756-10/Csavomir
 

Viewers also liked (17)

ES2015+: давно пора!
ES2015+: давно пора!ES2015+: давно пора!
ES2015+: давно пора!
 
Соревнования по программированию
Соревнования по программированиюСоревнования по программированию
Соревнования по программированию
 
Startlist 2017.xlsx results athletes
Startlist 2017.xlsx   results athletesStartlist 2017.xlsx   results athletes
Startlist 2017.xlsx results athletes
 
Startlist 2017.xlsx startlist
Startlist 2017.xlsx   startlistStartlist 2017.xlsx   startlist
Startlist 2017.xlsx startlist
 
M.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and ServerlessM.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and Serverless
 
Islam 101 - beliefs and practises
Islam 101 - beliefs and practisesIslam 101 - beliefs and practises
Islam 101 - beliefs and practises
 
Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24
 
3Com 1697-560-000-1.00
3Com 1697-560-000-1.003Com 1697-560-000-1.00
3Com 1697-560-000-1.00
 
Third True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SCThird True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SC
 
Amalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosialAmalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosial
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильно
 
Виртуализация
ВиртуализацияВиртуализация
Виртуализация
 
Reactивная тяга
Reactивная тягаReactивная тяга
Reactивная тяга
 
Blockchain: is just buzzword?
Blockchain: is just buzzword?Blockchain: is just buzzword?
Blockchain: is just buzzword?
 
An Accordion or a Waistcoat?
An Accordion or a Waistcoat?An Accordion or a Waistcoat?
An Accordion or a Waistcoat?
 
3Com 6756-10/C
3Com 6756-10/C3Com 6756-10/C
3Com 6756-10/C
 

Similar to Разработка в долг

Технический долг: взгляд и действия со стороны QA / QC&AT
Технический долг: взгляд и действия со стороны QA / QC&ATТехнический долг: взгляд и действия со стороны QA / QC&AT
Технический долг: взгляд и действия со стороны QA / QC&ATCodeFest
 
Разработка нового сайта компании «Росгосстрах»
Разработка нового сайта компании «Росгосстрах»Разработка нового сайта компании «Росгосстрах»
Разработка нового сайта компании «Росгосстрах»РОСГОССТРАХ
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Vadim Martynov
 
Docsvision 5 – что нового
Docsvision 5 – что новогоDocsvision 5 – что нового
Docsvision 5 – что новогоDocsvision
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
RHSoft - Заказная разработка
RHSoft - Заказная разработкаRHSoft - Заказная разработка
RHSoft - Заказная разработкаYury Stelmakh
 
Опыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178BОпыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178BДС БАРС
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Ontico
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Cтратегия сокращения технического долга
Cтратегия сокращения технического долгаCтратегия сокращения технического долга
Cтратегия сокращения технического долгаBoris Volfson
 
борис вольфсон
борис вольфсонборис вольфсон
борис вольфсонkuchinskaya
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Контентные проекты
Контентные проекты Контентные проекты
Контентные проекты Nimax
 
Вадим Митин - как выстроить техническую платформу для стабильной работы web...
Вадим Митин  -  как выстроить техническую платформу для стабильной работы web...Вадим Митин  -  как выстроить техническую платформу для стабильной работы web...
Вадим Митин - как выстроить техническую платформу для стабильной работы web...sergey doronin
 
Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...
Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...
Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...RIF-Technology
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Никита Ремизов - Введение в разработку ТЗ
Никита Ремизов - Введение в разработку ТЗНикита Ремизов - Введение в разработку ТЗ
Никита Ремизов - Введение в разработку ТЗDrupalSPB
 

Similar to Разработка в долг (20)

Технический долг: взгляд и действия со стороны QA / QC&AT
Технический долг: взгляд и действия со стороны QA / QC&ATТехнический долг: взгляд и действия со стороны QA / QC&AT
Технический долг: взгляд и действия со стороны QA / QC&AT
 
Разработка нового сайта компании «Росгосстрах»
Разработка нового сайта компании «Росгосстрах»Разработка нового сайта компании «Росгосстрах»
Разработка нового сайта компании «Росгосстрах»
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
Docsvision 5 – что нового
Docsvision 5 – что новогоDocsvision 5 – что нового
Docsvision 5 – что нового
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
RHSoft - Заказная разработка
RHSoft - Заказная разработкаRHSoft - Заказная разработка
RHSoft - Заказная разработка
 
Опыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178BОпыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178B
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Cтратегия сокращения технического долга
Cтратегия сокращения технического долгаCтратегия сокращения технического долга
Cтратегия сокращения технического долга
 
борис вольфсон
борис вольфсонборис вольфсон
борис вольфсон
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Контентные проекты
Контентные проекты Контентные проекты
Контентные проекты
 
Вадим Митин - как выстроить техническую платформу для стабильной работы web...
Вадим Митин  -  как выстроить техническую платформу для стабильной работы web...Вадим Митин  -  как выстроить техническую платформу для стабильной работы web...
Вадим Митин - как выстроить техническую платформу для стабильной работы web...
 
Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...
Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...
Сергей Смирнов (Altair Engineering Inc.) | Организация работы распределенной ...
 
DocsVision 5
DocsVision 5DocsVision 5
DocsVision 5
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Никита Ремизов - Введение в разработку ТЗ
Никита Ремизов - Введение в разработку ТЗНикита Ремизов - Введение в разработку ТЗ
Никита Ремизов - Введение в разработку ТЗ
 

More from Vitebsk Miniq

Runtime compilation and code execution in groovy
Runtime compilation and code execution in groovyRuntime compilation and code execution in groovy
Runtime compilation and code execution in groovyVitebsk Miniq
 
The 5 Laws of Software Estimates
The 5 Laws of Software EstimatesThe 5 Laws of Software Estimates
The 5 Laws of Software EstimatesVitebsk Miniq
 
Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9Vitebsk Miniq
 
Тестирование Spring-based приложений
Тестирование Spring-based приложенийТестирование Spring-based приложений
Тестирование Spring-based приложенийVitebsk Miniq
 
Семантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поискаСемантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поискаVitebsk Miniq
 
Локализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводЛокализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводVitebsk Miniq
 
ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?Vitebsk Miniq
 
Apollo GraphQL Federation
Apollo GraphQL FederationApollo GraphQL Federation
Apollo GraphQL FederationVitebsk Miniq
 
Who is a functional tester
Who is a functional testerWho is a functional tester
Who is a functional testerVitebsk Miniq
 
Вперед в прошлое
Вперед в прошлоеВперед в прошлое
Вперед в прошлоеVitebsk Miniq
 
CloudFormation experience
CloudFormation experienceCloudFormation experience
CloudFormation experienceVitebsk Miniq
 
Learning Intelligence: the story of mine
Learning Intelligence: the story of mineLearning Intelligence: the story of mine
Learning Intelligence: the story of mineVitebsk Miniq
 
Как программисты могут спасти мир
Как программисты могут спасти мирКак программисты могут спасти мир
Как программисты могут спасти мирVitebsk Miniq
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийVitebsk Miniq
 
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Vitebsk Miniq
 
Насорил - убери!
Насорил - убери!Насорил - убери!
Насорил - убери!Vitebsk Miniq
 
Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Vitebsk Miniq
 
Красные флаги и розовые очки
Красные флаги и розовые очкиКрасные флаги и розовые очки
Красные флаги и розовые очкиVitebsk Miniq
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. ПрактикаVitebsk Miniq
 

More from Vitebsk Miniq (20)

Runtime compilation and code execution in groovy
Runtime compilation and code execution in groovyRuntime compilation and code execution in groovy
Runtime compilation and code execution in groovy
 
The 5 Laws of Software Estimates
The 5 Laws of Software EstimatesThe 5 Laws of Software Estimates
The 5 Laws of Software Estimates
 
Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9
 
Тестирование Spring-based приложений
Тестирование Spring-based приложенийТестирование Spring-based приложений
Тестирование Spring-based приложений
 
Семантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поискаСемантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поиска
 
Локализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводЛокализационное тестирование - это не только перевод
Локализационное тестирование - это не только перевод
 
ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?
 
Apollo GraphQL Federation
Apollo GraphQL FederationApollo GraphQL Federation
Apollo GraphQL Federation
 
Who is a functional tester
Who is a functional testerWho is a functional tester
Who is a functional tester
 
Crawling healthy
Crawling healthyCrawling healthy
Crawling healthy
 
Вперед в прошлое
Вперед в прошлоеВперед в прошлое
Вперед в прошлое
 
CloudFormation experience
CloudFormation experienceCloudFormation experience
CloudFormation experience
 
Learning Intelligence: the story of mine
Learning Intelligence: the story of mineLearning Intelligence: the story of mine
Learning Intelligence: the story of mine
 
Как программисты могут спасти мир
Как программисты могут спасти мирКак программисты могут спасти мир
Как программисты могут спасти мир
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
 
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.
 
Насорил - убери!
Насорил - убери!Насорил - убери!
Насорил - убери!
 
Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?
 
Красные флаги и розовые очки
Красные флаги и розовые очкиКрасные флаги и розовые очки
Красные флаги и розовые очки
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 

Разработка в долг

  • 3. 3 1. влияет на время, стоимость и качество проекта 2. практически неизбежен для любого проекта 3. каждый участник проекта должен знать, что это такое Почему именно технический долг?
  • 4. 4 Впервые использовал метафору «технический долг» в 1992 году, чтобы объяснить финансистам, почему нужно внести изменения в архитектуру приложения. Уорд Каннингем By Carrigg Photography for the Wikimedia Foundation – Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=17697618
  • 5. 5 Источники технического долга Код, над которым вы работаете, должен отображать ваше текущее понимание того, как должна работать ваша программа. Главная идея метафоры
  • 6. 6 это ресурсы, которые вам необходимы для того, чтобы привести код в состояние, соответствующее вашему текущему пониманию. Технический долг –
  • 7. 7 • необходимость подстраивать архитектуру приложения под текущее понимание Источники технического долга
  • 8. 8 • более детальное изучайте предметную область • содержите код в чистоте • пишите техническую документация • просматривайте чужой код • практикуйте техники, позволяющие как можно скорее выявить проблемы и повысить качество кода (парное программирование) Как минимизировать такой долг?
  • 9. 9 Иногда вам может понадобиться такое решение, которое не является устойчивым в долгосрочной перспективе, но приносит краткосрочную выгоду. Дядя Боб (Роберт Мартин) By Tim-bezhashvyly - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=38703621
  • 10. 10 Может быть стоит взять кредит?
  • 11. 11 • необходимость подстраивать архитектуру приложения под текущее понимание • временные решения, приносящие краткосрочные выгоды Источники технического долга
  • 12. 12 • не берите долг, если это возможно • полученная выгода должна превышать расходы на устранение долга • возвращайте долги как можно скорее • не устраивайте в коде беспорядок Как решать такие проблемы?
  • 13. 13 Беспорядок – не технический долг, это просто беспорядок
  • 14. 14 Временно – не значит спустя рукава
  • 15. 15 Технический долг – это метафора, поэтому реальный вопрос заключается в том, полезна ли метафора долга для размышления о том, как решать проблемы с дизайном кода, и как донести эти размышления до других. Мартин Фаулер By Webysther Nunes - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=39594469
  • 16. 16 Квадрант технического долга Необдуманный (reckless) Обдуманный (prudent) У нас нет времени на дизайн Умышленный (deliberate) Неумышленный (inadvertent) Нам нужно срочно выпустить релиз, затраты на исправление долга окупятся с лихвой Многоуровневая архитектура? Не, не слышали Теперь мы знаем, как мы это должны были делать
  • 17. 17 • дублирование кода • низкое покрытие тестами • отсутствие или низкое качество комментариев и документации к коду • чрезмерная сложность кода • нарушение стандартов, несоблюдение стиля кода • код с запашком • код с долгом достался вам по наследству Другие источники технического долга
  • 18. 18 • необходимость подстраивать архитектуру приложения под текущее понимание • временные решения, приносящие краткосрочные выгоды • проблемы с качеством кода Источники технического долга
  • 19. 19 Работа с техническим долгом • закладывайте время на работу с техническим долгом • анализируйте ваш технический долг • устанавливайте рабочие соглашения в команде • выделяйте время на образование На уровне релиза (долгосрочная перспектива)
  • 20. 20 Работа с техническим долгом • поддерживайте высокий уровень покрытия тестами • контролируйте накладные расходы, вызванные техническим долгом • насколько вы удовлетворены от работы с вашим кодом? • учитывайте зависимости между разными составляющими технического долга • проводите ретроспективы • создавайте истории по работе с техническим долгом • используйте непрерывную интеграцию На уровне итерации (среднесрочная перспектива)
  • 21. 21 Работа с техническим долгом • просматривайте чужой код • практикуйте парное программирование • придерживайтесь стандартов кода • сделайте технический долг видимым На уровне истории пользователя (короткосрочная перспектива)
  • 22. 22 Какие еще могут быть долги? • по качеству (quality debt) • по функциональности (feature debt) • пользовательского взаимодействия (user experience debt) • навыков(skills debt) Помимо технического долга выделяют также долги:
  • 23. 23 • технический долг может быть нашим союзником, если нам нужно выиграть время • лучший вариант - избегать долгов, однако вам это вряд ли удастся • технический долг снижает продуктивность, поэтому старайтесь избавиться от него как можно быстрее • анализируйте технический долг и выстраивайте работу с ним на разных уровнях • объясните клиенту, почему важно выделять время на работу с техническим долгом • не путайте технический долг с другими видами долгов Подведем итоги
  • 24. 24 Информация по теме • http://wiki.c2.com/?WardExplainsDebtMetaphor • https://martinfowler.com/bliki/TechnicalDebt.html • https://martinfowler.com/bliki/TechnicalDebtQuadrant.html • https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt • https://www.agilealliance.org/introduction-to-the-technical-debt-concept/ • https://www.agilealliance.org/project-management-and-technical-debt/