Стартап, вязнущий в болоте микросервисов и SPA фреймворков

Недавно я посмотрел интервью с DHH, это был keynote на (онлайн) конференции RailsConf 2020. DHH это автор и мейнтейнер веб-фреймворка Ruby On Rails, CTO компании Basecamp. Известен как адвокат фулл-стек разработки, монолитных архитектур, profitable from day zero подхода и противник венчурных денег. В интервью он рассказывает, что современный зоопарк веб-технологий, узкая специализация ("реакт разработчик"), раздутость команд и оверинжиниринг это следствие бесконтрольного использования венчурного капитала. Вот небольшая история в тему.

Один мой знакомый несколько лет назад пошел работать в стартап. CTO стартапа был очень умный мужик, который до этого работал и в маленьких и больших компаниях, и разрабатывал на куче технологий. Знакомый был первым программистом в стартапе, и когда дошло дело до работы, то CTO ему говорит: "короче, берем микросервисную архитектуру, ядро пишем на Java, а для хранения данных возьмем key-column-value базу. Нам нужно будет быстро масштабироваться, а как известно SQL не скейлится. На фронтенде будем использовать реакт". Суть стартапа: веб-приложение, без рокет саенса, без особой реактивщины или интерактивности.

Хозяин-барин, подумал знакомый, засучил рукава и принялся за работу. Так как "микросервисы" не задеплоишь на хероку просто так, то пришлось решать кучу задач, не имеющих непосредственного отношения к приложению: подбирать фреймворки для service discovery и rpc, организовывать CI/CD и infrastructure-as-a-code, подымать разные окружения, и так далее. До непосредственно работы над продуктом дело не особо доходило. Наняли еще пару программистов, а знакомому так понравилась вся эта инфраструктурная фигня, что он не особо-то и расстраивался.

Через пол-года, когда понаписали кучу REST API которые вроде как-то работали, наняли фронтенд ребят. Ребята засели и еще пол-года делали базовый набор компонент чтобы можно было заверстать страничку регистрации и логина. Ну и еще личный кабинет. К этому времени количество микросервисов выросло до 6 или 7 и уже пришлось делать специальный микросервис-аггрегатор запросов, который упрощал фронтендерам работу. Отсутствие джоинов и транзакций в замечательной масштабируемой NoSQL базе порождало кучу баттхерта и костылей-воркэраундов в коде, замедляло разработку, а потом, как оказалось еще и здорово тормозило всё приложение. Скорость разработки была просто черепашьей, два года спустя запустили все в продакшн, но никакого миллиона пользователей не пришло. Сотни нефти тратились на AWS в двух AZ просто потому что почему бы и нет, ведь нужна была redundancy и durability.

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

Потом пришли новые продукт менеджера, сменили направление продукта и начали думать как итерироваться побыстрее. CTO ушел заниматься другим проектом, пришёл новый. Переписали всё на Vue. Живут всё так же с микросервисами и джавой, как-то это всё дело едет и спустя 4 года после старта вроде даже приносит деньги. Большая часть исходной команды уже давно срулила по своим делам, новые люди делают новые вещи.

Если ретроспективно смотреть сейчас на те дела, то мне это кажется чистым безумием. Для стартапа, ключевой характеристикой которого является быстрый запуск и итерация идей, берется самая дорогая (с точки зрения стоимости разработчиков), медленная в разработке технология—Java. Для фронтенда берется тоже недешевая и медленная в разработке штука (для отрисовки кнопки надо писать кучу бойлерплейта). Чтобы подсыпать загустителя в и так уже почти битумное болото, выбирается проприетарная NoSQL база данных, которая еще сильнее замедляет и усложняет разработку. Все это мультиплицируется с помощью микросервисов и микрофронтендов. Минорное изменение задевает три репозитория и требует регенерации схемы данных. Ну и конечно же итоговое решение тормозит. Потому что куча запросов на разные сервисы, потому что NoSQL. Локальная разработка и дебаг превращается в кошмар, developer experience просто отвратительный. В надежде как-то двигать это вперед, раздувается команда. Собраны все грабли из разбросанных по саду земных наслаждений архитектора-астронавта. Микросервисы не приносят никакого профита, только бабки зря проедают. Собрано полное буллшит-бинго облачного архитектора. Все, просто все как известном ролике только не смешно ни разу.

Мы со знакомым наверное чего-то не знали. Наверное были какие-то причины, побудившие выбрать такой медленный с точки зрения разработки стек. Но после того как я сам разработал на Rails и запустил несколько небольших проектов (но зарабатывающих для моего клиента деньги) я абсолютно и совершенно не понимаю как так получилось. Потом прикидывали — MVP того уровня который делала толпа узкоспецализированных людей мы бы могли забабахать вдвоём за пару месяцев. Если бы тот стартап запускался сейчас, то наверное в копилку добавился бы Kubernetes, Service Mesh и еще какая-нибудь дичь, дабы окончательно обездвижить золотую разработку.

В интервью DHH говорит что в команде которая работает над их сервисом электронной почты Hey, 8 разработчиков: два андроид разработчика, два ios разработчика, 4 разработчика "web core" (как он это назвал). 8 разработчиков делают продукт—почтовый клиент—для всех платформ. Это меньше, чем было в команде моего знакомого. Там только бекендеров было около 8, а еще фронтенд… Про nomadlist, remoteok я уже говорил. Эти штуки сделал и запустил один человек. В одиночку.

Это не нытье против микросервисов или spa, или кубернетеса. Это скорбь об утраченном времени, о человеко-годах, потраченных впустую, о неуместном использовании инструментов. Это скорбь о других стартапах, убитых несвоевременным использованием google-scale технологий.


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred