Можно ли одному разработчику сделать серьёзную бизнес-систему

Когда речь заходит о корпоративном портале, внутренней CRM, системе заказов или специализированном сервисе, часто возникает один и тот же вопрос: может ли один разработчик вообще справиться с таким проектом?

Привычная картина серьёзной разработки выглядит иначе: менеджер проекта, аналитик, дизайнер, несколько программистов, тестировщик, DevOps. Поэтому предложение работать напрямую с одним Laravel-разработчиком иногда вызывает вполне понятное недоверие.

Мы разобрали этот вопрос без лозунгов про «индивидуальный подход» и «гибкость небольшой команды». В интервью:

  • где проходит граница задачи для одного исполнителя;
  • почему компании выбирают solo-модель и какие у неё риски;
  • как компенсировать отсутствие команды и code review;
  • что должно остаться у бизнеса, если разработчик исчезнет;
  • когда проект перерастает одного человека и что делать дальше;
  • какие вопросы задать разработчику до старта и как связать это с MVP.

О чём разговор

Формат
Интервью, ~20 вопросов
Тема
Solo-разработка серьёзных бизнес-систем на Laravel
Для кого
Заказчики, которые выбирают между студией и одним исполнителем
Связанные материалы
Почему бизнесу иногда нужен Laravel, а не WordPress · Какие бизнес-процессы стоит автоматизировать

Начнём прямо. Один разработчик и серьёзная бизнес-система — это вообще совместимые вещи?

Да.

Но с очень важной оговоркой: далеко не любая система.

Один разработчик вполне может создать серьёзный рабочий продукт, если проект находится в разумных границах по объёму и сложности.

Например:

  • внутренний портал компании;
  • B2B-кабинет для дилеров;
  • система обработки заказов;
  • специализированная CRM;
  • сервис для автоматизации одного бизнес-процесса;
  • личные кабинеты клиентов;
  • система согласований;
  • небольшой micro-SaaS;
  • система резервирования товаров;
  • управление заявками, объектами или спецификациями.

Но если речь идёт о системе масштаба крупного банка, маркетплейса или инфраструктуры большой корпорации, один человек — очевидно неправильная модель.

Проблема начинается тогда, когда пытаются представить одиночную разработку как универсальное решение.

Она не универсальна.

Тогда почему компании вообще выбирают одного разработчика вместо студии?

Обычно причина довольно прозаичная.

Компания не хочет оплачивать большую организационную надстройку вокруг относительно компактной задачи.

В классической студийной модели клиент может взаимодействовать с менеджером, который передаёт информацию аналитику, тот — разработчику, затем подключается тестировщик и так далее.

Для больших проектов это оправданно.

Для небольшой специализированной системы иногда получается наоборот: коммуникация становится сложнее самой разработки.

При прямой работе цепочка короче:

бизнес → разработчик → работающая система

Человек, который обсуждает процесс с клиентом, одновременно понимает архитектуру системы и пишет код.

Информация меньше искажается по дороге.

Но разработчик ведь не бизнес-аналитик. Почему он вообще должен понимать процессы компании?

Он не обязан заменять профессионального бизнес-аналитика на крупном проекте.

Но разработчик бизнес-систем обязан уметь задавать вопросы.

Причём иногда довольно неудобные.

Например:

  • откуда появляется эта заявка;
  • кто её создаёт;
  • кто должен её подтвердить;
  • почему менеджер переносит данные вручную;
  • что происходит, если товар закончился;
  • кто имеет право предложить замену;
  • кто подтверждает замену;
  • какая версия документа считается актуальной;
  • что происходит после изменения заказа;
  • где сейчас хранится история решений.

Если разработчик просто записывает требования в стиле «здесь нужна кнопка», а потом реализует кнопки, хороший продукт из этого получается редко.

Нужно понимать не экран.

Нужно понимать процесс за экраном.

Но один человек одновременно анализирует, проектирует базу данных, пишет backend, frontend и ещё тестирует. Разве качество неизбежно не падает?

Такой риск существует.

Поэтому принципиально важно не пытаться быть одновременно десятью специалистами на уровне крупной продуктовой команды.

В небольших проектах работает другой подход.

Используются проверенные технологии и стандартные решения там, где нет необходимости изобретать собственные.

Например, для бизнес-системы обычно нет смысла писать с нуля:

  • авторизацию;
  • очередь задач;
  • отправку уведомлений;
  • работу с файлами;
  • систему фоновых задач;
  • базовые компоненты интерфейса;
  • журналирование;
  • типовые механизмы доступа.

Фреймворк уже решает значительную часть инфраструктурных задач.

Работа разработчика должна концентрироваться на том, что действительно уникально для бизнеса.

Хорошо. А кто тогда проверяет разработчика?

Вот это уже более серьёзный вопрос.

В команде существует естественный внутренний контроль: pull request, code review, тестировщики, технический руководитель.

При работе одного специалиста такой контроль действительно слабее.

Поэтому его приходится компенсировать процессом.

Например:

  • автоматическими тестами критической логики;
  • статическим анализом;
  • журналированием действий пользователей;
  • staging-средой;
  • резервным копированием;
  • мониторингом ошибок;
  • небольшими релизами;
  • регулярной демонстрацией работающей системы.

Особенно важно не разрабатывать систему полгода «в тишине», чтобы потом впервые показать её заказчику.

Чем меньше команда, тем чаще должен появляться проверяемый результат.

А если разработчик заболел или вообще исчез?

Это один из главных рисков модели с одним исполнителем.

И его нельзя отрицать.

Правильный вопрос здесь не «может ли разработчик исчезнуть».

Конечно, может.

Правильный вопрос:

что останется у бизнеса после этого?

У заказчика должны быть:

  • исходный код;
  • доступ к репозиторию;
  • доступ к серверу;
  • доступ к базе данных;
  • резервные копии;
  • описание развёртывания;
  • основные технические инструкции;
  • понятная структура проекта.

Система не должна существовать только в ноутбуке разработчика.

Если новый специалист получает проект и не может даже понять, как его запустить, — это уже проблема организации разработки.

То есть документация обязательна?

Документация должна соответствовать масштабу системы.

Для небольшого проекта нет смысла писать несколько сотен страниц технической документации, которую никто не будет читать.

Но должны быть описаны хотя бы ключевые вещи:

  • архитектура проекта;
  • основные модули;
  • внешние интеграции;
  • переменные окружения;
  • процесс развёртывания;
  • фоновые задачи;
  • резервное копирование;
  • нестандартные бизнес-правила.

Часть документации должна находиться непосредственно рядом с кодом.

Тогда вероятность её актуальности выше.

А что происходит, когда проект начинает расти?

Это нормальная ситуация.

Более того, успешный внутренний сервис часто именно так и развивается.

Сначала компания автоматизирует один процесс.

Например:

заявка → проверка → согласование → выполнение

Потом появляются:

  • дополнительные роли;
  • новые статусы;
  • интеграции;
  • отчёты;
  • уведомления;
  • документы;
  • мобильные сценарии;
  • новые подразделения.

В какой-то момент один разработчик действительно становится ограничением.

И это не означает, что изначальная модель была ошибочной.

Просто проект перешёл в другую стадию.

И что тогда? Всё переписывать?

Нет.

Если система изначально построена нормально, к проекту можно подключать дополнительных разработчиков.

Для этого особенно полезно разделять систему на понятные модули.

Например:

  • пользователи и организации;
  • каталог;
  • заказы;
  • согласования;
  • документы;
  • уведомления;
  • интеграции;
  • аудит.

Необязательно сразу строить микросервисную архитектуру.

Для многих подобных проектов хороший модульный монолит гораздо практичнее.

Но внутри проекта должны существовать границы.

Тогда команда может расти вместе с системой.

Раз уж вы упомянули микросервисы: разве серьёзная система сегодня не должна сразу строиться на микросервисах?

Нет.

Микросервисы решают конкретные организационные и технические проблемы.

Но они одновременно создают новые:

  • несколько приложений;
  • взаимодействие между сервисами;
  • распределённые транзакции;
  • мониторинг;
  • инфраструктуру;
  • очереди;
  • управление версиями API;
  • более сложное развёртывание.

Если системой занимается один или несколько разработчиков, а нагрузка не требует распределённой архитектуры, микросервисы легко превращаются в дорогую архитектурную декорацию.

Для многих B2B-систем разумнее начинать с хорошо структурированного монолита.

А разделять его тогда, когда для этого появилась реальная причина.

Получается странно: один разработчик вроде бы дешевле, но одновременно является риском. Где тогда преимущество?

Главное преимущество — не обязательно цена.

Оно в скорости передачи информации.

При прямой работе разработчик может услышать:

«Менеджеры постоянно путают версии заказа».

И сразу начать выяснять:

  • почему появляются версии;
  • кто может менять заказ;
  • когда изменения должны блокироваться;
  • нужно ли хранить предыдущие версии;
  • кто подтверждает изменения.

В длинной коммуникационной цепочке исходная проблема иногда превращается в техническое задание:

«Добавить поле “Версия заказа”».

Формально задача выполнена.

Но проблема бизнеса может остаться.

Это звучит так, будто один разработчик всегда эффективнее агентства.

Нет.

Есть проекты, где агентство или команда объективно лучше.

Например, если одновременно требуется:

  • сложное исследование интерфейсов;
  • мобильное приложение;
  • backend;
  • большой frontend;
  • интеграция с несколькими корпоративными системами;
  • миграция большого массива данных;
  • круглосуточная техническая поддержка;
  • серьёзная нагрузка;
  • несколько параллельных направлений разработки.

Один человек просто становится узким местом.

И попытка сэкономить здесь может увеличить сроки и риски.

А где проходит граница?

Не существует числа вроде «до 100 пользователей можно одному, после 100 нельзя».

Количество пользователей вообще далеко не всегда главный показатель.

Гораздо важнее:

  • количество бизнес-процессов;
  • число интеграций;
  • сложность предметной области;
  • требования к отказоустойчивости;
  • скорость изменений;
  • количество параллельных задач;
  • цена ошибки.

Система для 20 сотрудников производственной компании иногда может оказаться сложнее сервиса с несколькими тысячами пользователей.

Что тогда должен спросить заказчик у разработчика перед началом проекта?

Я бы не начинал с вопроса:

«Сколько лет вы программируете на Laravel?»

Это полезная информация, но она мало говорит о том, как будет устроена работа.

Гораздо интереснее спросить:

  • Где будет храниться исходный код?
  • Получу ли я доступ к репозиторию?
  • Как делаются резервные копии?
  • Что произойдёт, если разработку продолжит другой человек?
  • Есть ли отдельная тестовая среда?
  • Как фиксируются изменения?
  • Как будет контролироваться доступ пользователей?
  • Как отслеживаются ошибки?
  • Какие части системы будут покрыты автоматическими тестами?
  • Что вы считаете главным техническим риском проекта?

Последний вопрос особенно интересный.

Если разработчик отвечает, что никаких рисков нет, — это само по себе информация.

А какие признаки говорят о том, что одному разработчику проект лучше не отдавать?

Несколько признаков довольно очевидны.

Слишком много работ должны идти одновременно

Например, одновременно необходимо разрабатывать web-систему, мобильное приложение, несколько интеграций и заниматься миграцией данных.

Критичен очень короткий срок

Один разработчик физически не может масштабировать количество часов.

Система должна поддерживаться круглосуточно

Один человек не может гарантировать полноценное 24/7 присутствие.

Ошибка системы может иметь критические последствия

Некоторые классы программного обеспечения требуют другого уровня процессов, контроля и сертификации.

Уже существует большая команда

Тогда разработка становится не только технической, но и организационной задачей.

А когда, наоборот, один разработчик может быть удачным вариантом?

Обычно тогда, когда существует конкретный бизнес-процесс, который нужно привести в порядок.

Например, сейчас он выглядит так:

Excel → Telegram → письмо → ещё одна таблица → уточнение по телефону → повторный ввод данных

И задача заключается не в создании «новой корпоративной платформы», а в том, чтобы сделать нормальный единый рабочий процесс.

В таких случаях небольшая команда или один разработчик действительно могут быть эффективнее большой структуры.

Насколько вообще важна технология? Почему именно Laravel?

Для клиента сама технология редко является основной ценностью.

Бизнесу обычно важно другое:

  • чтобы система работала;
  • чтобы её можно было дорабатывать;
  • чтобы данные не терялись;
  • чтобы новый разработчик мог разобраться в проекте;
  • чтобы интеграции не ломались после каждого обновления.

Laravel удобен для такого класса задач потому, что вокруг него уже существует зрелая инфраструктура для типичных серверных задач:

  • работа с базами данных;
  • авторизация;
  • очереди;
  • фоновые задания;
  • API;
  • уведомления;
  • тестирование;
  • планировщик;
  • работа с файлами.

Это позволяет меньше времени тратить на инфраструктуру и больше — на сам бизнес-процесс.

Можно ли сказать клиенту заранее, сколько будет стоить вся система?

Иногда можно.

Но для нестандартной бизнес-системы точная цифра до детального изучения процесса часто является скорее предположением.

Особенно если на первом разговоре звучит:

«Нам нужна CRM примерно как наша таблица, только нормальная».

После разбора может оказаться, что внутри этой таблицы скрываются:

  • роли пользователей;
  • согласования;
  • статусы;
  • интеграции;
  • документы;
  • история изменений;
  • уведомления;
  • права доступа.

Поэтому разумнее сначала определить минимальный рабочий контур системы.

То есть сделать MVP?

Да, но термин MVP часто понимают неправильно.

MVP — это не обязательно плохая или урезанная система.

Это минимальный законченный процесс, который уже приносит пользу.

Например, вместо попытки сразу автоматизировать весь отдел продаж можно начать с одного участка:

заявка → назначение ответственного → обработка → согласование → завершение

Он должен работать нормально от начала до конца.

После этого можно добавлять следующий процесс.

Последний вопрос. Можно ли всё-таки одному разработчику доверить серьёзную систему?

Можно.

Но доверять нужно не количеству людей.

И не слову Laravel.

И даже не красивому портфолио.

Нужно смотреть на то, как организована разработка.

Есть ли:

  • понятная архитектура;
  • контроль версий;
  • резервное копирование;
  • документация;
  • тестирование;
  • прозрачный доступ к исходному коду;
  • регулярные рабочие версии системы;
  • возможность передать проект другому специалисту.

Если всего этого нет, команда из пяти человек тоже не гарантирует хороший результат.

А если процесс разработки выстроен нормально, один сильный разработчик способен создать и долго развивать вполне серьёзную бизнес-систему.

Главное — понимать масштаб задачи и вовремя заметить момент, когда проект действительно перерос одного человека.

Вместо вывода

Вопрос «может ли один разработчик сделать серьёзную систему?» поставлен немного неправильно.

Гораздо полезнее спросить:

«Достаточен ли один разработчик именно для нашей задачи — и что произойдёт с проектом, если он станет в несколько раз больше?»

Если на оба вопроса есть понятный ответ, количество людей в команде перестаёт быть главным критерием выбора.

Обсудить проект

Нужен похожий контур — обсудим.

Связаться

Связанные материалы

B2B-портал с интеграцией 1С · Закупочный портал сантехники · Laravel vs Битрикс и OpenCart