Мой блог

Давайте создадим программный продукт, который будет делать все, а потом будем развивать его

О том, что не нужно создавать сверхмодули, написано немало литературы, но как быть с функционалом уровня целого проекта? Здесь все не так очевидно. Каждый проект – это, как минимум, отдельное хранилище в репозитории. Как максимум, отдельная команда разработки, другой инструментарий, другие принципы развертывания и отладки, другой язык программирования. Взаимодействие между разными проектными командами бывает очень сложным, и велик соблазн делать все одним проектом. Когда компания маленькая и команда небольшая, это может быть оправдано. Но с развитием, проекты со слишком большой степенью ответственности становятся зоной конфликта команд разработчиков.

Это хорошо прослеживается на примере веб-разработки. В небольших проектах я часто видел ситуацию, когда клиентская и серверные части были просто папками в репозитории проекта, а в корне находилась система сборки и выкладки проекта на бой. Удобство такого подхода для проектов одного разработчика очевидно. Беда начинается при масштабировании. Проекты развиваются неравномерно. Одним проектам может потребоваться десяток программистов для работы над клиентской частью и только один над серверной. Другим - наоборот. Потребность каждому разработчику настраивать полноценное рабочее окружение, включающее локальную базу данных, серверную и клиентские части, инструменты выкладки и отладки, быстро превратят разработку в кошмар. Возникает не только проблема избыточной сложности для каждого отдельно взятого разработчика, но и проблемы с доступом, тестированием и безопасностью.

Принимая решение о выделениии какого-то функционала в отдельный проект, я задаю себе ряд вопросов:

  1. Будет ли функционал разрабатываться на языке, отличном от основного языка программирования проекта?
  2. Есть ли вероятность, что над заданным функционалом будет работать отдельная команда разработчиков?
  3. Будет ли функционал запускаться в окружении отличном от окружения, в котором работает основной проект?
  4. Есть ли вероятность того, что конкретно под заданный функционал будут выделены отдельные вычислительные мощности?

Ответ “ Да ”на любой вопрос означает, что следует серьезно задуматься о том, не следует ли выделить заданный функционал в отдельный проект? Особенно важно задуматься об этом перед началом его разработки, так как выделение части функционала в отдельный проект на этапе завершения продукта или после его выхода, обойдется в сотню раз дороже.

06 мар.2018