Docker — отличный инструмент, который в последние годы стал практически обязательным для многих команд разработчиков и проектов. Почему? По многим причинам, о которых я подробно рассказываю в одном из своих предыдущих постов. Сегодня я хотел бы сосредоточиться исключительно на одном аспекте… деньгах.
Может ли Docker сэкономить мои деньги?
В двух словах: да, может.
Но давайте посмотрим как, и, что более важно, сколько.
Для этого я хотел бы представить вам воображаемый проект под названием RevoCRM. Я буду использовать его в качестве примера, чтобы рассчитать влияние Docker на стоимость разработки программного обеспечения. Разговор о деньгах — всегда деликатная тема, поэтому я не буду делиться подробностями конкретного проекта, а скорее обобщу свой опыт из нескольких проектов, над которыми мне довелось работать.
Допустим, RevoCRM — набирающий популярность CRM-инструмент для малого и среднего бизнеса. Он распространяется по модели SaaS и имеет ~5 000 активных подписчиков по всему миру, в основном в США и Европе. Хотя RevoCRM является амстердамским стартапом, его команда разработчиков полностью удалена и состоит из разработчиков из разных стран, в основном из Восточной Европы.
В настоящее время RevoCRM использует Docker как для разработки, так и в качестве части инфраструктуры хостинга. Но так было не всегда, и в этом исследовании я оценю некоторые затраты, сэкономленные благодаря Docker. Я рассмотрю следующее:
- затраты на отток сотрудников;
- затраты на ежедневную разработку;
- затраты на тестирование и обеспечение качества;
- затраты на внедрение изменений в инфраструктуру.
Давайте посмотрим подробнее, сколько можно сэкономить благодаря Docker.
Как Docker снижает затраты на отток сотрудников?
Введение нового сотрудника в команду — это всегда трудоемкий процесс. Это особенно верно в отношении разработчиков программного обеспечения. Программные продукты, такие как RevoCRM, состоят из множества различных компонентов, таких как базы данных, сервисы, сторонние библиотеки и другие инструменты. Каждый новичок, прежде чем написать свою первую строчку кода в проекте, должен установить и настроить все это на компьютере. Благодаря Docker сейчас все это сводится к одной единственной команде:
docker-compose up
Но в старые времена RevoCRM без докеров требовалось от 4 до 5 дней, чтобы вся платформа была установлена и запущена на компьютере разработчика. Команда разработчиков RevoCRM полностью удаленная, и у каждого разработчика своя любимая операционная система и конфигурация. Таким образом, процесс немного отличался для каждого сотрудника. Но обычно это была совместная работа как минимум нескольких человек, чтобы помочь новому разработчику установить проект на его машине. В среднем каждый новый разработчик тратил 36 рабочих часов своего времени, и еще 24 часа другие члены команды пытались ему помочь, что в итоге составляет 60 часов, потраченных на первоначальную настройку.
Команда разработчиков RevoCRM состоит из 8 разработчиков (6 back-end и 2 front-end разработчика) и 2 тестировщиков. Их средний коэффициент оттока сотрудников составляет 20%, что означает, что каждый год они вводят 2 новых членов команды. Зная, что средняя почасовая ставка одного сотрудника RevoCRM составляет 30 евро, мы можем рассчитать общие годовые затраты, сэкономленные благодаря Docker:
2 разработчика / год × 60 часов × €30 / час = €3 600 / год.
Не так много? Потерпите, потому что экономия начинает накапливаться довольно быстро, когда новичок и его коллеги начинают ежедневную работу над новыми функциями.
Как Docker снижает затраты на ежедневную разработку?
К сожалению, Docker не сделает кодинг за вас, вам все равно понадобятся разработчики в вашей проектной команде 😉 Но что может сделать Docker, так это гарантировать, что всякий раз, когда один из разработчиков вносит какие-либо изменения в конфигурацию проекта, они будут автоматически доступны для других разработчиков. До того, как команда RevoCRM перешла на Docker, они постоянно сталкивались с изменениями в технологическом стеке. Когда в RevoCRM добавлялась новая интеграция, или база данных, или какой-либо другой сервис, он не работал автоматически для всех разработчиков.
Иногда небольшое изменение могло помешать всей команде сосредоточиться на своих задачах в течение приличного количества времени. Самыми ожесточенными были ссоры между back-end и front-end разработчиками. Каждая сторона жаловалась, что другая постоянно добавляет то, что не работает из коробки на их машинах. Борьба с этими техническими проблемами занимала в среднем 5 рабочих часов в месяц у каждого разработчика. Внедрение Docker помогло сэкономить:
5 часов × 8 разработчиков × €30 / час × 12 месяцев = €14 400 / год.
Docker явно помогает внедрять изменения в техническом стеке с меньшими осложнениями для других членов команды. Но он также может облегчить внедрение изменений для разработчика, который их внедряет. Вместо того чтобы искать руководства по установке нового сервера баз данных, разработчики могут использовать один из доступных шаблонов (Docker Images) из общедоступного репозитория под названием Docker Hub. Это может сэкономить день работы каждый квартал или около того.
8 часов × 4 квартала × €30 / час = €960 / год
Docker помогает снизить стоимость кодирования. А как насчет дальнейших этапов процесса разработки? Приносит ли он экономию и на этапе тестирования?
Как Docker снижает затраты на тестирование и QA?
Одним из важнейших преимуществ Docker является то, что он обеспечивает согласованное поведение программного обеспечения на всех машинах. Это относится как к компьютерам разработчиков, так и к тестовым серверам. Почему это так важно? Потому что это значительно сокращает время тестирования и проверки качества. Слышали ли вы когда-нибудь знаменитую фразу «Странно, на моей машине это работало хорошо»? Это очень распространенная проблема. Тестировщики обвиняют разработчиков в том, что они предоставили некачественный код, но во многих случаях этот код действительно работал на локальных машинах разработчиков.
До того, как команда RevoCRM внедрила Docker, почти 17% всех пользовательских историй, предоставленных на тестирование, приходилось отклонять только потому, что тестировщики не могли заставить их работать и тестироваться должным образом. Затем эти истории дорабатывались разработчиками и снова отправлялись на тестирование.
Весь этот процесс занимал примерно 2,5 часа на каждую проблемную историю пользователя, переданную на тестирование. Команда разработчиков RevoCRM фактически разделена на две небольшие команды, каждая из которых состоит из 4 разработчиков и одного тестировщика. И каждая из этих команд способна выполнять примерно 10 пользовательских историй в месяц. Таким образом, экономия в процессе тестирования после внедрения Docker выглядит следующим образом:
2 команды × 10 США × 17% отказов × 2,5 часа × 12 месяцев * €30 / час = €3060 / год.
Кроме того, разработчики RevoCRM смогли лучше тестировать функции самостоятельно, не передавая их специальным тестировщикам. Это стало возможным благодаря тому, что настройка Docker упростила им сквозное тестирование. Ранее разработчики бэкенда сосредотачивались только на внесении изменений в API, но не проверяли, хорошо ли они работают с фронтэндом. Это позволило сократить общее количество проблем и время, затрачиваемое на исправление ошибок, почти на 10%. К тому времени каждый разработчик тратил 20 часов в месяц на исправления и доработки. Благодаря Docker экономия времени и затрат была значительной:
8 разработчиков × 20 часов × 10% улучшения × 12 месяцев * €30 = €5760 / год.
Экономия на разработке и тестировании складывается в немалую сумму, и есть еще один аспект, в котором Docker очень помогает — инфраструктура.
Как Docker снижает затраты на изменение инфраструктуры?
Если говорить об инфраструктуре хостинга, то Docker в сочетании с дополнительными инструментами (такими как Kubernetes или Docker Swarm) дает множество преимуществ. Простота управления инфраструктурой, простота масштабирования… вот лишь некоторые из них. Я не буду подробно описывать все эти преимущества, поскольку это потребовало бы отдельной статьи в блоге. Вместо этого я сосредоточусь на двух конкретных аспектах: большой переносимости и отсутствии привязки к поставщику.
Не так давно технический директор RevoCRM решил усовершенствовать свой план аварийного восстановления. Возможно, на это его вдохновило недавнее событие, произошедшее с популярным хостинг-провайдером OVH. Один из их центров обработки данных загорелся и полностью сгорел, в результате чего многие их клиенты потеряли данные, а сервисы не работали в течение нескольких дней.
Если это случилось с OVH, то может случиться со всеми, — подумал он. И поэтому он решил иметь по крайней мере двух хостинг-провайдеров одновременно. К счастью, RevoCRM уже работала на Docker и Kubernetes. Благодаря этому процесс воссоздания инфраструктуры у второго хостинг-провайдера был не только возможен (никакой блокировки поставщика), но и представлял собой относительно простую задачу (из-за переносимости контейнеров Docker). Вместо того чтобы потратить неделю или около того на настройку, весь процесс занял всего около 3 часов! Хотя это была разовая работа, различные изменения инфраструктуры происходят каждые несколько месяцев или хотя бы раз в год (особенно если ваш стартап планирует масштабирование). Это конкретное изменение принесло 2500 евро экономии. Вместо того чтобы нанимать внешнего консультанта для выполнения этой работы, технический директор сумел настроить среду самостоятельно. И теперь он может спать спокойно 😉.
Итоги экономии
Итак, пришло время для окончательного ответа на вопрос, сколько денег вы можете сэкономить благодаря Docker? Давайте подведем итог всей экономии RevoCRM:
Более 30 000 евро экономится каждый год благодаря Docker. Это примерно 5% от всех ежегодных затрат на разработку RevoCRM. Или, другими словами, дополнительные 3 недели бесплатных часов разработки. Часы, которые могут быть потрачены, по крайней мере, на несколько дополнительных функций, которые могут быть предоставлены вашим конечным пользователям каждый год.
Снизит ли Docker затраты и на мой проект?
Вы все еще не уверены, что Docker будет хорошим решением для вашей команды разработчиков? Хотя Docker является очень полезным инструментом и может помочь вам сократить расходы на разработку, есть, конечно, некоторые случаи, в которых он не будет лучшим выбором. Обязательно прочитайте мою предыдущую статью «Когда использовать и когда не использовать Docker?», чтобы понять, принесет ли Docker пользу вашему проекту.
По моему опыту, многие команды разработчиков, жалующиеся на Docker, просто не используют его должным образом. В таком случае все деньги, которые вы могли бы сэкономить благодаря Docker, могут оказаться упущенной возможностью. К счастью, наш технический директор решил написать книгу об оптимизации Docker. В своей книге Михал объясняет, как работать с образами и контейнерами Docker, чтобы извлечь из них максимальную пользу. Обязательно порекомендуйте ее своей команде разработчиков.