HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Разработка программного обеспечения - нетривиальный процесс, который имеет тенденцию значительно усложняться с ростом количества участников. Больше людей в команде - больше коммуникаций и необходимости синхронизироваться (обмениваться знаниями о частях системы и происходящих процессах, следить за бизнесом и его требованиями). Растет цена ошибки, система перестает умещаться в голове одного разработчика, изменения в одном месте влияют на изменения в других местах.</p>
1 <p>Разработка программного обеспечения - нетривиальный процесс, который имеет тенденцию значительно усложняться с ростом количества участников. Больше людей в команде - больше коммуникаций и необходимости синхронизироваться (обмениваться знаниями о частях системы и происходящих процессах, следить за бизнесом и его требованиями). Растет цена ошибки, система перестает умещаться в голове одного разработчика, изменения в одном месте влияют на изменения в других местах.</p>
2 <p>В этих условиях разные команды проявляют себя по-разному. Некоторые продолжают поддерживать высокий темп разработки и регулярно выпускают новые версии. В других командах происходит сильное замедление процессов: переговоры отнимают больше времени, чем разработка, качество падает, выпуск новой версии становится стрессом и приключением. Общая скорость внедрения новых фич в таких командах может различаться во много раз и даже на порядок.</p>
2 <p>В этих условиях разные команды проявляют себя по-разному. Некоторые продолжают поддерживать высокий темп разработки и регулярно выпускают новые версии. В других командах происходит сильное замедление процессов: переговоры отнимают больше времени, чем разработка, качество падает, выпуск новой версии становится стрессом и приключением. Общая скорость внедрения новых фич в таких командах может различаться во много раз и даже на порядок.</p>
3 <p>Причин такой катастрофической разницы довольно много. Вот некоторые из них:</p>
3 <p>Причин такой катастрофической разницы довольно много. Вот некоторые из них:</p>
4 <ul><li>Ошибки топ-менеджмента в бизнесе. Если бизнес делает не то, что надо, то не важно насколько эффективно он делает это - в конце концов бизнес закроется. Эта тема выходит за рамки текущего гайда.</li>
4 <ul><li>Ошибки топ-менеджмента в бизнесе. Если бизнес делает не то, что надо, то не важно насколько эффективно он делает это - в конце концов бизнес закроется. Эта тема выходит за рамки текущего гайда.</li>
5 <li>Ошибки топ-менеджмента в области процессов. Если на этом уровне все плохо, то все остальное вторично. Даже неверная система бонусов может привести к разладу в команде и полной блокировке разработки в конечном счете.</li>
5 <li>Ошибки топ-менеджмента в области процессов. Если на этом уровне все плохо, то все остальное вторично. Даже неверная система бонусов может привести к разладу в команде и полной блокировке разработки в конечном счете.</li>
6 <li>Человеческий фактор. Личные качества и человеческие пороки могут создать проблемы как остальным членам команды, так и всему проекту в целом. Главная проблема в том, что эту часть невозможно выправить никакими процессами. Только изменение поведения. Либо расставание.</li>
6 <li>Человеческий фактор. Личные качества и человеческие пороки могут создать проблемы как остальным членам команды, так и всему проекту в целом. Главная проблема в том, что эту часть невозможно выправить никакими процессами. Только изменение поведения. Либо расставание.</li>
7 <li>Плохой процесс разработки. Эта тема касается всех инженеров без исключения. Сюда входит все, начиная от взаимодействия и работы с задачами, заканчивая тестированием и проведением ревью кода.</li>
7 <li>Плохой процесс разработки. Эта тема касается всех инженеров без исключения. Сюда входит все, начиная от взаимодействия и работы с задачами, заканчивая тестированием и проведением ревью кода.</li>
8 </ul><p>На некоторые проблемы повлиять либо сложно, либо невозможно (с уровня разработчика). Но другие, особенно относящиеся к инженерным практикам, нужно постоянно улучшать и менять. Программисты должны принимать в этом самое активное участие.</p>
8 </ul><p>На некоторые проблемы повлиять либо сложно, либо невозможно (с уровня разработчика). Но другие, особенно относящиеся к инженерным практикам, нужно постоянно улучшать и менять. Программисты должны принимать в этом самое активное участие.</p>
9 <ul><li><a>Книги</a><ul><li>Человеческий фактор. Успешные проекты и команды</li>
9 <ul><li><a>Книги</a><ul><li>Человеческий фактор. Успешные проекты и команды</li>
10 <li>Мифический человеко-месяц, или Как создаются программные системы</li>
10 <li>Мифический человеко-месяц, или Как создаются программные системы</li>
11 <li>Идеальный программист. Как стать профессионалом разработки ПО</li>
11 <li>Идеальный программист. Как стать профессионалом разработки ПО</li>
12 <li>Цель. Процесс непрерывного совершенствования</li>
12 <li>Цель. Процесс непрерывного совершенствования</li>
13 </ul></li>
13 </ul></li>
14 <li><a>Manifesto for Agile Software Development</a></li>
14 <li><a>Manifesto for Agile Software Development</a></li>
15 <li><a>Bus Factor</a></li>
15 <li><a>Bus Factor</a></li>
16 <li><a>Карго культ</a></li>
16 <li><a>Карго культ</a></li>
17 </ul><p>И хотя практик довольно много, в конечном итоге все сводится к тому, как быстро клиенты получают результат вашей работы и насколько они им удовлетворены. Ниже приводится чек-лист, который позволяет понять, используются ли в команде те инженерные практики, которые считаются наиболее удачными.</p>
17 </ul><p>И хотя практик довольно много, в конечном итоге все сводится к тому, как быстро клиенты получают результат вашей работы и насколько они им удовлетворены. Ниже приводится чек-лист, который позволяет понять, используются ли в команде те инженерные практики, которые считаются наиболее удачными.</p>
18 <p><em>Соответствие этим практикам не гарантирует того, что в компании нет проблем. Возможно это культ-карго, либо процессы формализованы настолько, что больше мешают, чем помогают. С другой стороны из каждого правила есть исключения и всегда найдется проект, где что-то из списка ниже не применимо. Ну и наконец, некоторые из указанных подходов могут идти вразрез с чьими-то ценностями.</em></p>
18 <p><em>Соответствие этим практикам не гарантирует того, что в компании нет проблем. Возможно это культ-карго, либо процессы формализованы настолько, что больше мешают, чем помогают. С другой стороны из каждого правила есть исключения и всегда найдется проект, где что-то из списка ниже не применимо. Ну и наконец, некоторые из указанных подходов могут идти вразрез с чьими-то ценностями.</em></p>
19 <h2>Содержание</h2>
19 <h2>Содержание</h2>
20 <ul><li><a>Код</a></li>
20 <ul><li><a>Код</a></li>
21 <li><a>Среда разработки</a></li>
21 <li><a>Среда разработки</a></li>
22 <li><a>Качество</a></li>
22 <li><a>Качество</a></li>
23 <li><a>Процесс разработки</a></li>
23 <li><a>Процесс разработки</a></li>
24 <li><a>Выкатка новых версий (более актуально для веб-проектов)</a></li>
24 <li><a>Выкатка новых версий (более актуально для веб-проектов)</a></li>
25 </ul><h2>Код</h2>
25 </ul><h2>Код</h2>
26 <p><strong>Хорошо</strong></p>
26 <p><strong>Хорошо</strong></p>
27 <ul><li><a>VCS</a>. Код находится под контролем версий (как правило гит).</li>
27 <ul><li><a>VCS</a>. Код находится под контролем версий (как правило гит).</li>
28 <li><a>Общий код</a>. Любой член команды в любой момент времени может изменить любую часть системы.</li>
28 <li><a>Общий код</a>. Любой член команды в любой момент времени может изменить любую часть системы.</li>
29 <li><a>Единый стиль кода</a>. В команде все придерживаются стандартов кодирования, принятых для данного стека (языка, платформы).</li>
29 <li><a>Единый стиль кода</a>. В команде все придерживаются стандартов кодирования, принятых для данного стека (языка, платформы).</li>
30 </ul><p><strong>Плохо</strong></p>
30 </ul><p><strong>Плохо</strong></p>
31 <ul><li>Отсутствие единого стиля. Каждый пишет код в том стиле, к которому он привык. Нет общих стандартов либо есть, но свой, совершенно отдельный от общепринятого.</li>
31 <ul><li>Отсутствие единого стиля. Каждый пишет код в том стиле, к которому он привык. Нет общих стандартов либо есть, но свой, совершенно отдельный от общепринятого.</li>
32 <li>Не используется контроль версий. Вместо этого используются бекапы кода, а разработчикам приходится договариваться, чтобы не перетереть изменения друг друга.</li>
32 <li>Не используется контроль версий. Вместо этого используются бекапы кода, а разработчикам приходится договариваться, чтобы не перетереть изменения друг друга.</li>
33 <li>Код имеет "владельца". Программисты защищают свой участок кода от посягательства других участников.</li>
33 <li>Код имеет "владельца". Программисты защищают свой участок кода от посягательства других участников.</li>
34 </ul><p><strong>Ссылки</strong></p>
34 </ul><p><strong>Ссылки</strong></p>
35 <ul><li><a>Trunk Based Development</a></li>
35 <ul><li><a>Trunk Based Development</a></li>
36 </ul><h2>Среда разработки</h2>
36 </ul><h2>Среда разработки</h2>
37 <p><strong>Хорошо</strong></p>
37 <p><strong>Хорошо</strong></p>
38 <ul><li>Девелопмент среда. Разработка ведется в специальной development (dev) среде. Как правило, это локальная машина (возможно, с использованием Vagrant или Docker Compose). Эта среда у каждого разработчика полностью своя, и изменения в одной среде не могут влиять на другие среды разработки.</li>
38 <ul><li>Девелопмент среда. Разработка ведется в специальной development (dev) среде. Как правило, это локальная машина (возможно, с использованием Vagrant или Docker Compose). Эта среда у каждого разработчика полностью своя, и изменения в одной среде не могут влиять на другие среды разработки.</li>
39 <li>Разворачивание среды автоматизировано и происходит "одной кнопкой". Это позволяет легко вводить в проект новичков, быстро и в автоматическом режиме распространять инфраструктурные изменения, работать без страха что-либо поломать, так как легко восстановить.</li>
39 <li>Разворачивание среды автоматизировано и происходит "одной кнопкой". Это позволяет легко вводить в проект новичков, быстро и в автоматическом режиме распространять инфраструктурные изменения, работать без страха что-либо поломать, так как легко восстановить.</li>
40 <li>Инфраструктура как код. Распространение изменений конфигурации происходит через код проекта. Достаточно еще раз выполнить развертывание дев среды (с новым кодом проекта), как подхватятся все обновления.</li>
40 <li>Инфраструктура как код. Распространение изменений конфигурации происходит через код проекта. Достаточно еще раз выполнить развертывание дев среды (с новым кодом проекта), как подхватятся все обновления.</li>
41 <li>Среда разработки максимально приближена к условиям продакшена. Если сервис работает на Linux, то и разработка ведется на Linux. То же самое касается и других аспектов.</li>
41 <li>Среда разработки максимально приближена к условиям продакшена. Если сервис работает на Linux, то и разработка ведется на Linux. То же самое касается и других аспектов.</li>
42 </ul><p><strong>Плохо</strong></p>
42 </ul><p><strong>Плохо</strong></p>
43 <ul><li>Разворачивание среды и настройка происходит по мануалам, либо методом "попробовал запустить - прочитал сообщение об ошибке - погуглил - исправил". Дорого и неэффективно. Мануалы устаревают практически сразу после того, как их пишут. Новый человек может тратить дни на разворачивание среды с нуля.</li>
43 <ul><li>Разворачивание среды и настройка происходит по мануалам, либо методом "попробовал запустить - прочитал сообщение об ошибке - погуглил - исправил". Дорого и неэффективно. Мануалы устаревают практически сразу после того, как их пишут. Новый человек может тратить дни на разворачивание среды с нуля.</li>
44 <li>Ручное обновление конфигурации. Всем разработчикам рассылается директива произвести локальные изменения настройки среды (например, доставить что-нибудь новое) для работы нового кода.</li>
44 <li>Ручное обновление конфигурации. Всем разработчикам рассылается директива произвести локальные изменения настройки среды (например, доставить что-нибудь новое) для работы нового кода.</li>
45 <li>Общая база данных для всех разработчиков. Нагрузка от одного человека влияет на всех. Случайная поломка также тормозит всех остальных.</li>
45 <li>Общая база данных для всех разработчиков. Нагрузка от одного человека влияет на всех. Случайная поломка также тормозит всех остальных.</li>
46 </ul><h2>Качество</h2>
46 </ul><h2>Качество</h2>
47 <p><strong>Хорошо</strong></p>
47 <p><strong>Хорошо</strong></p>
48 <ul><li>Кодовая база покрыта тестами. Тесты повышают уверенность в работоспособности кода. Хорошие тесты положительно влияют на дизайн самого кода. Как правило, код, покрытый тестами, сам по себе лучше кода без тестов. Хотя есть корреляция.</li>
48 <ul><li>Кодовая база покрыта тестами. Тесты повышают уверенность в работоспособности кода. Хорошие тесты положительно влияют на дизайн самого кода. Как правило, код, покрытый тестами, сам по себе лучше кода без тестов. Хотя есть корреляция.</li>
49 <li>Частично протестированная фича или вовсе - фича без тестов - не считается выполненной. Наличие тестов значительно снижает нагрузку на всех остальных членов команды и положительно влияет на качество решения задачи. К тому же часто происходит, что если тесты не написать сразу, то потом на них времени не останется.</li>
49 <li>Частично протестированная фича или вовсе - фича без тестов - не считается выполненной. Наличие тестов значительно снижает нагрузку на всех остальных членов команды и положительно влияет на качество решения задачи. К тому же часто происходит, что если тесты не написать сразу, то потом на них времени не останется.</li>
50 <li>Программист отвечает за фичу до самого конца. Фича считается выполненной, только когда она работает на продакшене. Каждый человек в команде должен понимать, что наиважнейшая цель - это доставка ценности клиенту. Пока фичей никто не пользуется, то не важно, написана она или нет, потому что бизнес в этот момент остается в пролете.</li>
50 <li>Программист отвечает за фичу до самого конца. Фича считается выполненной, только когда она работает на продакшене. Каждый человек в команде должен понимать, что наиважнейшая цель - это доставка ценности клиенту. Пока фичей никто не пользуется, то не важно, написана она или нет, потому что бизнес в этот момент остается в пролете.</li>
51 <li>Команда ревьювит код друг друга (без фанатизма). Ревью - не только способ найти ошибки, но и способ учиться друг у друга.</li>
51 <li>Команда ревьювит код друг друга (без фанатизма). Ревью - не только способ найти ошибки, но и способ учиться друг у друга.</li>
52 <li><a>Парное программирование</a>. Техника эффективна не только между программистами. Она очень полезна в парах "программист и тестировщик", "новичок и опытный".</li>
52 <li><a>Парное программирование</a>. Техника эффективна не только между программистами. Она очень полезна в парах "программист и тестировщик", "новичок и опытный".</li>
53 <li><a>Continuous integration (CI)</a>. Репозитории проекта подключены к серверу непрерывной интеграции, на котором после каждого коммита проверяется стиль кодирования (через запуск линтеров), прогоняются тесты, осуществляется сборка проекта (например, компиляция).</li>
53 <li><a>Continuous integration (CI)</a>. Репозитории проекта подключены к серверу непрерывной интеграции, на котором после каждого коммита проверяется стиль кодирования (через запуск линтеров), прогоняются тесты, осуществляется сборка проекта (например, компиляция).</li>
54 <li>В случае инцидентов проводятся<a>пост мортемы</a>.</li>
54 <li>В случае инцидентов проводятся<a>пост мортемы</a>.</li>
55 <li><a>Ретроспектива</a>. Процесс непрерывно улучшается и на изменения влияет каждый член команды.</li>
55 <li><a>Ретроспектива</a>. Процесс непрерывно улучшается и на изменения влияет каждый член команды.</li>
56 </ul><p><strong>Плохо</strong></p>
56 </ul><p><strong>Плохо</strong></p>
57 <ul><li>Нет тестов. Работа нового кода проверяется только ручным способом, через прокликивание. Последствия катастрофические - скорость доставки низкая, а качество кода, скорее всего, неудовлетворительное.</li>
57 <ul><li>Нет тестов. Работа нового кода проверяется только ручным способом, через прокликивание. Последствия катастрофические - скорость доставки низкая, а качество кода, скорее всего, неудовлетворительное.</li>
58 <li>Отсутствует код ревью. Разный стиль кодирования, изоляция программистов друг от друга, слабый обмен опытом, плохие решения в продакшене.</li>
58 <li>Отсутствует код ревью. Разный стиль кодирования, изоляция программистов друг от друга, слабый обмен опытом, плохие решения в продакшене.</li>
59 <li>Программист считает, что фича закрыта, когда код попал в основную ветку. Новый код лежит мертвым грузом и не приносит пользы. Может устареть до попадания клиенту.</li>
59 <li>Программист считает, что фича закрыта, когда код попал в основную ветку. Новый код лежит мертвым грузом и не приносит пользы. Может устареть до попадания клиенту.</li>
60 <li><a>KPI</a>. Активно используются количественные метрики: строки кода, выпущенные фичи, закрытые баги. Вместо ориентации на результат, разработчики стремятся выполнить KPI. Даже в случае, если это идет вразрез с задачами бизнеса.</li>
60 <li><a>KPI</a>. Активно используются количественные метрики: строки кода, выпущенные фичи, закрытые баги. Вместо ориентации на результат, разработчики стремятся выполнить KPI. Даже в случае, если это идет вразрез с задачами бизнеса.</li>
61 <li>Высокий уровень формализации процессов. Замедляется скорость, падает мотивация.</li>
61 <li>Высокий уровень формализации процессов. Замедляется скорость, падает мотивация.</li>
62 </ul><p><strong>Ссылки</strong></p>
62 </ul><p><strong>Ссылки</strong></p>
63 <ul><li><a>Экстремальное программирование</a></li>
63 <ul><li><a>Экстремальное программирование</a></li>
64 <li><a>Парное программирование (доклад Николая Рыжикова)</a></li>
64 <li><a>Парное программирование (доклад Николая Рыжикова)</a></li>
65 <li><a>Как распространять инженерную культуру в своей компании</a></li>
65 <li><a>Как распространять инженерную культуру в своей компании</a></li>
66 </ul><h2>Процесс разработки</h2>
66 </ul><h2>Процесс разработки</h2>
67 <p><strong>Хорошо</strong></p>
67 <p><strong>Хорошо</strong></p>
68 <ul><li><p>Разработчики руководствуются принципами<a>12factors</a>. Приложения проще разворачивать, масштабировать и мониторить.</p>
68 <ul><li><p>Разработчики руководствуются принципами<a>12factors</a>. Приложения проще разворачивать, масштабировать и мониторить.</p>
69 </li>
69 </li>
70 <li><p>Запуск одного теста выполняется за доли секунды. Разработка через тесты подразумевает очень частый запуск тестов в процессе отладки. В такой ситуации крайне важна скорость старта конкретного теста - она должна быть настолько быстрой, чтобы разработчик оставался в контексте.</p>
70 <li><p>Запуск одного теста выполняется за доли секунды. Разработка через тесты подразумевает очень частый запуск тестов в процессе отладки. В такой ситуации крайне важна скорость старта конкретного теста - она должна быть настолько быстрой, чтобы разработчик оставался в контексте.</p>
71 </li>
71 </li>
72 <li><p>Тесты писать легко и приятно. Лакмусовая бумажка для определения того, насколько хорошо с тестами в проекте. Если приходится себя заставлять, то есть вероятность, что тесты написаны плохо (например, много моков) и их будет недостаточно.</p>
72 <li><p>Тесты писать легко и приятно. Лакмусовая бумажка для определения того, насколько хорошо с тестами в проекте. Если приходится себя заставлять, то есть вероятность, что тесты написаны плохо (например, много моков) и их будет недостаточно.</p>
73 </li>
73 </li>
74 <li><p><a>Test-driven development (TDD)</a>. По возможности тесты пишутся до кода. Есть несколько причин, по которым это важно:</p>
74 <li><p><a>Test-driven development (TDD)</a>. По возможности тесты пишутся до кода. Есть несколько причин, по которым это важно:</p>
75 <p>Тесты заставляют думать не о реализации, а о том, как тестируемый код будет использоваться. Благодаря такому подходу, программисты видят изъяны в интерфейсах на самых ранних стадиях.</p>
75 <p>Тесты заставляют думать не о реализации, а о том, как тестируемый код будет использоваться. Благодаря такому подходу, программисты видят изъяны в интерфейсах на самых ранних стадиях.</p>
76 <p>Код в любом случае надо проверять. Если теста не будет, то это придется делать руками.</p>
76 <p>Код в любом случае надо проверять. Если теста не будет, то это придется делать руками.</p>
77 </li>
77 </li>
78 <li><p>Перед починкой бага сначала пишется тест, который его воспроизводит, затем происходит исправление. Только в этом случае тесты действительно помогают.</p>
78 <li><p>Перед починкой бага сначала пишется тест, который его воспроизводит, затем происходит исправление. Только в этом случае тесты действительно помогают.</p>
79 </li>
79 </li>
80 </ul><p><strong>Плохо</strong></p>
80 </ul><p><strong>Плохо</strong></p>
81 <ul><li>Тесты есть, но приходится заставлять себя писать тесты, потому что их сложно писать, они долго выполняются, часто ломаются или постоянно приходится их переписывать.</li>
81 <ul><li>Тесты есть, но приходится заставлять себя писать тесты, потому что их сложно писать, они долго выполняются, часто ломаются или постоянно приходится их переписывать.</li>
82 <li>Запуск одного теста занимает секунды. Такой тест тяжело запускать при разработке через тесты и общее время выполнения тестов становится слишком большим.</li>
82 <li>Запуск одного теста занимает секунды. Такой тест тяжело запускать при разработке через тесты и общее время выполнения тестов становится слишком большим.</li>
83 <li>Код правится прямо на продакшене (то место где он работает). Без комментариев.</li>
83 <li>Код правится прямо на продакшене (то место где он работает). Без комментариев.</li>
84 </ul><p><strong>Ссылки</strong></p>
84 </ul><p><strong>Ссылки</strong></p>
85 <ul><li><a>12factors</a></li>
85 <ul><li><a>12factors</a></li>
86 <li><a>Начинаем писать тесты (правильно)</a></li>
86 <li><a>Начинаем писать тесты (правильно)</a></li>
87 <li><a>Бережливое тестирование</a></li>
87 <li><a>Бережливое тестирование</a></li>
88 </ul><h2>Выкатка новых версий (более актуально для веб-проектов)</h2>
88 </ul><h2>Выкатка новых версий (более актуально для веб-проектов)</h2>
89 <p>Продакшен-среда - инфраструктура (например, сервера), в которой развернут проект. Она обеспечивает доступ к проекту конечным пользователям.</p>
89 <p>Продакшен-среда - инфраструктура (например, сервера), в которой развернут проект. Она обеспечивает доступ к проекту конечным пользователям.</p>
90 <p>Деплой (выкатка) - процесс, в рамках которого происходит обновление проекта в продакшен среде.</p>
90 <p>Деплой (выкатка) - процесс, в рамках которого происходит обновление проекта в продакшен среде.</p>
91 <p><strong>Хорошо</strong></p>
91 <p><strong>Хорошо</strong></p>
92 <ul><li>Автоматизация. Развертывание автоматизировано и выполняется одной кнопкой.</li>
92 <ul><li>Автоматизация. Развертывание автоматизировано и выполняется одной кнопкой.</li>
93 <li>Частые небольшие релизы. Развертывание - рядовое событие, которое может выполняться в любой момент по готовности фич, без необходимости отвлекать команду.</li>
93 <li>Частые небольшие релизы. Развертывание - рядовое событие, которое может выполняться в любой момент по готовности фич, без необходимости отвлекать команду.</li>
94 <li>Zero Downtime Deploy. Обновление версии происходит прозрачно для пользователей.</li>
94 <li>Zero Downtime Deploy. Обновление версии происходит прозрачно для пользователей.</li>
95 <li>Развертывание, технически (то есть все хорошо автоматизировано), может выполнить любой член команды.</li>
95 <li>Развертывание, технически (то есть все хорошо автоматизировано), может выполнить любой член команды.</li>
96 </ul><p><strong>Плохо</strong></p>
96 </ul><p><strong>Плохо</strong></p>
97 <ul><li>Выкладка происходит в ручном режиме. Например, через прямое управление с сервера. Самый ненадежный и не масштабируемый подход, подвержен ошибкам и может занимать значительное время. При наличии нескольких серверов просто не работает.</li>
97 <ul><li>Выкладка происходит в ручном режиме. Например, через прямое управление с сервера. Самый ненадежный и не масштабируемый подход, подвержен ошибкам и может занимать значительное время. При наличии нескольких серверов просто не работает.</li>
98 <li>Выкладка кода сопровождается эмоциональным напряжением и вовлечением большого числа участников. В такой атмосфере все стремятся выкатываться реже, что приводит к еще большим проблемам и напрямую вредит бизнесу.</li>
98 <li>Выкладка кода сопровождается эмоциональным напряжением и вовлечением большого числа участников. В такой атмосфере все стремятся выкатываться реже, что приводит к еще большим проблемам и напрямую вредит бизнесу.</li>
99 <li>Процесс развертывания длится десятки минут или часы. Скорее всего, это означает, что процесс сборки проекта интегрирован с самим деплоем. Эти задачи нужно выполнять независимо.</li>
99 <li>Процесс развертывания длится десятки минут или часы. Скорее всего, это означает, что процесс сборки проекта интегрирован с самим деплоем. Эти задачи нужно выполнять независимо.</li>
100 <li>Разворачивание происходит раз в неделю и реже. Чем больше изменений выкатывается сразу, тем выше шанс поломки. И тем сложнее отследить влияние каждой фичи на бизнес-показатели. Кроме того, происходит забывание тех изменений, которые были сделаны ранее и ждали своего часа до выхода в продакшен.</li>
100 <li>Разворачивание происходит раз в неделю и реже. Чем больше изменений выкатывается сразу, тем выше шанс поломки. И тем сложнее отследить влияние каждой фичи на бизнес-показатели. Кроме того, происходит забывание тех изменений, которые были сделаны ранее и ждали своего часа до выхода в продакшен.</li>
101 <li>Во время разворачивания наблюдаются длительные даунтаймы. Пользователи вынуждены ожидать завершения деплоя. Такая ситуация мешает деплоить часто.</li>
101 <li>Во время разворачивания наблюдаются длительные даунтаймы. Пользователи вынуждены ожидать завершения деплоя. Такая ситуация мешает деплоить часто.</li>
102 <li>Развертывание выполняет один специальный человек. Знания хранятся в одной голове. Уход в отпуск или болезнь ломает весь процесс. Остальные программисты не понимают "как оно работает там".</li>
102 <li>Развертывание выполняет один специальный человек. Знания хранятся в одной голове. Уход в отпуск или болезнь ломает весь процесс. Остальные программисты не понимают "как оно работает там".</li>
103 <li>Деплой конфигурации. Обновление конфигурации, не относящейся непосредственно к логике кода, требует повторного деплоя. Например, изменение пароля к базе данных или адреса базы. Эти параметры являются чисто инфраструктурными и должны попадать в код так, как описано в 12factors.</li>
103 <li>Деплой конфигурации. Обновление конфигурации, не относящейся непосредственно к логике кода, требует повторного деплоя. Например, изменение пароля к базе данных или адреса базы. Эти параметры являются чисто инфраструктурными и должны попадать в код так, как описано в 12factors.</li>
104 </ul><p><strong>Ссылки</strong></p>
104 </ul><p><strong>Ссылки</strong></p>
105 <ul><li><a>Что такое DevOps?</a></li>
105 <ul><li><a>Что такое DevOps?</a></li>
106 <li><a>Инжиниринг в букинге</a></li>
106 <li><a>Инжиниринг в букинге</a></li>
107 <li><a>Среды разработки. Мужики, выкатывай!</a></li>
107 <li><a>Среды разработки. Мужики, выкатывай!</a></li>
108 <li><a>Вебинар: Как распространять инженерную культуру в своей компании?</a></li>
108 <li><a>Вебинар: Как распространять инженерную культуру в своей компании?</a></li>
109 </ul>
109 </ul>