С вами Саша Хрущев, технический директор IT-компании WINFOX, и у меня для вас лихо закрученная история нашего лоу-код продукта. Это история о хитрости и глупости, взлетах и падениях, нищете и богатстве, немного приправленная сомнительными умозаключениями. Все совпадения случайны, а персонажи вымышлены.
Акт 1. Сделка с рободьяволом
Меня всегда манила идея пассивного дохода. На дворе были веселые времена, начало 2010-х. Слово «крипта» еще не звучало из каждого утюга, и можно было майнить, не привлекая лишнего внимания. Но, помимо крипты, которую постоянно шатало, хотелось чего-то большего. Хотелось бизнес-империю.
Так мы задумали сделать робот для онлайн-игры, какой-нибудь простенькой стратегии, коих на рынке множество. Строительство зданий, тренировка войск, походы на противника… Все подобные игры требуют времени — это основной ресурс. Игрок должен тратить тонны своего внимания, возвращаясь к игре и отдавая команды, чтобы прогрессировать и набирать уровни. Либо платить деньги.
Для начала нужно было поиграть в игру, чтобы понять игровые механики и возможные способы монетизации. Рыцари, драконы, тетки в бронелифчиках, замки, построенные с нарушением всех ГОСТов… Очень не хотелось в это все вникать, но я заставил себя погрузиться в мир эльфов, королевств, альянсов и вычурных аватаров, за которыми прятались уставшие работяги и скучающие домохозяйки.
Неожиданно, но игра меня затянула. Даже моя реальность, наполненная событиями, путешествиями и новыми встречами, начала растворяться. Что уж говорить о тех, у кого за окном вчера, сегодня и завтра — депрессивный райцентр отдаленного субъекта РФ.
Я не потратил на игру ни копейки, зато убедился, что на этом можно заработать. И мы начали действовать.
Во всех подобных начинаниях есть гарантированное слабое звено. Угадайте, кто) Поэтому первым желанием стало максимально исключить себя из процесса. Идеально было бы разработать такой инструмент, который позволил бы в пару движений реализовывать любые игровые механики. Таких механик сотни, и писать тонну кода под каждую контрпродуктивно.
Для решения этой задачи мне приглянулась Java Scripting API и скриптовые движки Rhino и Nashorn. Помимо достоинств, у этих движков была куча недостатков. По сути Rhino был вообще интерпретатором. Nashorn уже худо-бедно умел в JIT-компиляцию и делал Rhino по всем тестам, но все равно был тормозным.
Может, на тот момент технология Java Scripting API не подходила для создания какого-то адского энтерпрайза, зато она позволяла описывать достаточно сложную бизнес-логику, обладая минимальными познаниями в программировании. Все, что сложнее, сделает всемогущая Java.
Первая версия получилась достаточно убогой. Это был простой интерпретатор скриптов, который мог взять скрипт из файла и запустить его. Возможности этого «продукта» тоже были скудные: отправка запросов к игре, запись и извлечение результатов в базу и из базы.
Мы назвали свой продукт Приладой. Какие бы названия мы не пытались дать ему потом, все было тщетно. Прозвище Прилада прочно прилипло. И бесит меня до сих пор.
Пока мой коллега разбирался с первой версией, в муках рождалась вторая. Она уже предполагала набор необходимой криптографии, работу с датами, возможность выполнять задачи в отдельных потоках, межпоточный обмен данными и кучу других мелких фич, превративших эту поделку в убогий, но все же инструмент. А самое главное, я добавил туда визуальный веб-редактор и возможность запуска, сохранения и редактирования скриптов.
Вторая версия стала настоящим подарком. С ней количество реализованных игровых механик экспоненциально росло, а я параллельно занимался оптимизацией и исправлением бесчисленных багов. Я даже прикрутил встроенный аналог VCS, чтобы можно было хоть как-то отслеживать изменения в сценариях.
В конце концов все особо мерзкие баги были исправлены, все основные механики реализованы, десяток тестовых аккаунтов разной степени прокачки был готов к реализации. Начались первые продажи. Шел 2014-й год. Мы изобретали лоу-код…
Акт 2. Падение Империи
Душа жаждала масштабирования, так как фермы на двести с лишним аккаунтов, которая крутилась на стопке ноутов, под растущие запросы и потребности явно не хватало. Наши боты постоянно болтались в топах игроков и турниров, уровни аккаунтов летели как бешеные. Клиенты скупали акки пачками, а мы не успевали их растить.
Прилада никак не могла крутить больше двадцати аккаунтов даже на самом мощном ноуте, потому что жрала процессор и память, как старенький V8 жрет бензин, запивая маслом. Прожорливость Прилады могла сравниться только с ее отвратительной производительностью.
Это мешало наполеоновским планам. Продажи росли, и зрела идея перейти с Прилады на что-то более эффективное, например, Node.js. Почему нода? И там, и там JavaScript, так что по факту бизнес-логику переписывать не пришлось бы. Нужно было только по минимуму заменить специфичные для Прилады библиотеки и функции, которых уже набралось порядком.
Я как мог, в перерывах между основной работой, оптимизировал Приладу, но сказывался мой низкий уровень как программиста. Итоговые улучшения на 5-10% на фоне общей ужасной картины не давали даже визуального прироста.
За забором толпились клиенты. Растить ферму бесконечно было нельзя: она жрала электричество, шумела и требовала постоянного обслуживания. И мы решили оставить Приладу за бортом. Фактически все механики уже были разработаны, отлажены и работали как часы, так что с их переносом на ноду можно было не откладывать.
За месяц Node.js-программист, которого мы наняли, перенес логику бесчисленных скриптов на ноду. Уверен, это стоило ему седых волос. Но чего только не сделаешь ради денег?
Когда последняя строчка кода была перенесена, мы затестили производительность. Node-версия была быстрее моей Прилады в пять раз. В пять, Карл. И в этом крылась большая проблема.
Той самой ночью наша новая ферма ботов вышла на совершенно другой уровень. Тысячи ботов яростно строили, выращивали, грабили, властвовали и унижали все на карте, сея хаос и панику. Если бы сервера игры не лагали, то со стороны эта картина выглядела бы апокалиптичной. Но они тормозили безбожно, и за этими тормозами скрывалась реальная картина происходящего.
Тем временем клиенты, в том числе и наши, не нашли ничего лучше, чем строчить жалобы в техподдержку разработчиков игры. Те же, немного потупив, все-таки заблочили нашу ферму, заодно пройдясь по всем остальным ботоводам.
Новая версия фермы не проработала и суток. Все, что мы получили, потратив кучу времени и ресурсов, — это полторы тысячи недоаккаунтов на минимальном уровне прокачки. До созревания им оставалось не менее недели.
Все дальнейшие попытки пустить фермы работать через десятки прокси не увенчались успехом. Разработчики игры прикрутили новые механизмы авторизации и борьбы с ботами, победить которые мы не смогли. Да в этом и не было смысла: нас уже заметили.
Там, где работа Прилады не была заметна из-за ее природной тормознутости, новая технология спалила нашу армию клонов в два счета. Лучшее — враг хорошего…
Акт 3. Рождение Республики
Из каждого поражения мы выносим что-то несомненно важное. В основном, опыт. Но в нашем случае после фиаско на руках остались какой-никакой продукт и далеко идущие выводы. Продукт я, в меру своей занятости, постепенно развивал, накручивая на него всякий приятный функционал, параллельно изучая Java и веб-разработку. А вот выводы позабыл. До тех пор, пока со мной не случился WINFOX.
Первым заказом WINFOX стала впечатляющая по своему размаху платформа для бронирования отелей за баснословные 900 тысяч рублей. Я совершенно четко понимал, как ее надо было делать. На предыдущей работе мы делали похожую систему за 2,5 миллиона рублей (как вам тогдашние цены?). Только в команде тогда было пять человек. Сейчас же у заказчика не было таких бюджетов, а у нас — такой команды. И если с фронтом было все в порядке, то с бэком — полная безысходность. И я решил: пора. Пора расчехлять Приладу.
К этому времени я порешал проблемы с производительностью, которые случались из-за постоянной ненужной сериализации и десериализации объектов и строк, оптимизировал работу с базой, прикрутил кеширование и, самое главное, победил мерзкую ошибку java.lang.runtimeException: Class file too large!. Она не давала нормально работать с хоть сколько либо значимыми объемами данных.
Прилада как решение для написания какого-либо серьезного бэкенда тогда не годилась. Поэтому 70% бюджета, отведенного на бэк, мы потратили на доработку самой Прилады. Смелое решение, не правда ли?
Сначала были собственный ORM, конструктор REST API, нормальная многопоточность, работа с документами Microsoft Office и PDF, работа с файловой системой, обертки для вызовов сторонних API и Web IDE, от которой уже не хотелось вскрыться в первый час работы… Зато потом все методы и бизнес-логику мы набросали чуть ли не за месяц.
Дальше — больше. В 2017-ом, после некоторых доработок в области безопасности, Прилада появилась в крупном энтерпрайзе (не скажу, где именно, потому что NDA). Там эта штука живет и здравствует до сих пор. Там мы, помимо развития самого продукта, решили проблемы производительности и стабильности нашей Прилады, а также получили первые наработки по сборке веб-приложений на ее базе, взяв за основу один доставшийся нам внезапно скоропостижно умерший коммерческий продукт. Там же мы впервые подружили нашу Приладу с нейросетями и научились с ее помощью парсить и скрапить все подряд. И, самое главное, теперь это был уже полноценный лоу-код с визуальным конструктором процессов.
Простая и надежная, как лопата, Прилада до сих пор радует заказчика и приносит нам деньги. А проект на ее базе стал самым долгоиграющим в WINFOX и одним из самых долгоиграющих у заказчика.
Впоследствии Прилада неоднократно становилась основой стартапов, иногда успешных, и вполне крупных коммерческих B2B- и B2C-проектов из разных сфер бизнеса.
Внимательный читатель скажет: «Хех, да чуваки просто выдавали свою поделку за уникальную разработку, стригли кучу денег, при этом оставляя клиента с непонятной неподдерживаемой ерундой». И да, и нет. Код Прилады мы никогда не прятали. Более того, за всю историю заказчики несколько раз заказывали независимый аудит и код-ревью, по результатам которых мы исправили кучу замечаний. Один раз мы прошли через серьезный аудит безопасности, по итогам которого пришлось выкинуть кое-какие сторонние зависимости и немного переписать код. В конце концов, цель Прилады — дать нашим клиентам хороший сервис по привлекательной цене. И с этим наш продукт прекрасно справляется уже почти десять лет.
Прилада в датах:
2013 год — первая версия на Rhino — интерпретатор скриптов.
2014 год — полноценная версия с Web IDE и набором библиотек.
2015 год — переход на Nashorn, падение Империи, создание WINFOX.
2016 год — бурное развитие, первый коммерческий проект.
2017 год — выход Прилады в энтерпрайз.
2018 год — запуск крупного стартапа и пары магазинов на основе Прилады, использование Прилады как шины данных в энтерпрайзе, сборка веб-приложений, «настоящий» лоу-код.
2019 год — запуск двух крупных проектов в электронной коммерции на основе Прилады.
2020 год — ковид, стагнация, только багфикс и апдейты по безопасности, переход на Graal.JS.
2021 год — пара новых библиотек, несколько мелких проектов.
2022 год — интерес к лоу-коду растет, но за весь год только пара минорных апдейтов, потому что инвестиций в продукт нет, реализован один проект.
2023 год — серьезный проект с HighLoad, международный проект, пришедшее впервые осознание важности продукта.
Эпилог
Мы не сразу заметили, как в нашем лексиконе все чаще стали мелькать слова «импортозамещение» и «лоу-код». Осмотревшись, мы внезапно обнаружили, что на рынке есть много аналогов нашей Прилады, куда как более функциональных и продвинутых. По сравнению с ними наш продукт не такой уж и лоу-код. И вообще, наши инвестиции в собственное решение за последние годы сопоставимы с бюджетами корпоративов, а продажи Прилады как отдельного продукта вообще равны нулю. Б — бизнес.
И вот, на десятом году жизни продукта, мы начинаем действовать. Как и зачем, расскажу в следующей статье.
P.S. Статья не изобилует техническими подробностями. Я постараюсь исправить это в следующих материалах. Сейчас мне хотелось поделиться странной историей рождения Прилады и рассказать, как легко создатели и владельцы продукта, немного опередившего время, прохлопали наступление эпохи лоу-кода и хайп с импортозамещением. Не делайте так. Создавайте продукты, которые делают мир лучше, и зарабатывайте на них. Всем добра!
titan_pc
Опять low code. И через 10 лет программисты вымерли не потому что их chat gpt заменил, а потому что какой-нибудь бизнес аналитик познал крутой Лоу код. И лоулиндзянями повыкидывал всех разрабов.
Вот зачем бизнесу давать инструменты такие, где надо мало кодить. Ну а потом появиться же лоукод платформа, где лоукодом её же можно и переделывать) Ну и всё. Извини чат джпт, не сегодня... Мы ещё раньше заберём работу у будущих айтишников.
Рассадники зла эти лоукод платформы.
Год 2025 мы сделали супер релиз. Но мы больше не нужны. Так как доли акций у нас были мизерные, продукт просто отобрали и мы теперь пошли в общепит обратно.
MindHunter11993
Начнем с того, что low-code совершенно спокойно может и зачастую должен существовать рядом с программистами и дает целый ряд плюшек.
1. Он позволяет очень быстро пилить прототипы из готовых/полуготовых кусков и проверять бизнесовые гипотезы.
2. Он позволяет освободить программистов от задачек по типу "кнопочку мне перекрасьте, а вот тут поля местами поменяйте, а вот тут мне надо еще один показатель выводить, а вот тут график мне нарисуйте, а вот тут бла-бла-бла..." и дать им заниматься реально важными и сложными задачами.
3. Он позволяет быстро получить готовое решение в случае, если ты стартап не в IT (да, такое бывает), тебе нужна система, но нет возможности нанять команду программистов. Или, допустим, ты знаешь, что должно быть на входе и на выходе, но не понимаешь, как это должно работать внутри. Подходящая платформа и кадры легко эту задачу решат.
4. Он позволяет пристроить уйму выпускаемых ежегодно джунов, которых многие на порог не пускают. Даже, если ты работаешь на low-code, понимать, как система работает очень даже надо. И это часто дает нужный опыт, чтобы потом перейти в программисты, набравшись опыта.
5. Ну и, наконец, из-за перегретого рынка, часто low-code - единственная возможность решить свою задачу.
А ChatGPT при использовании его в больших проектах, а не для лаб в универе и каких-то скриптов на пару сотен строк - тот же джун, за которым надо многое переделывать и вообще нужен глаз да глаз. Уже сейчас началось "Как с помощью ChatGPT решать десятиминутную задачу два часа". Так что конкретно эта вещь очень нескоро составит конкуренцию нормальным программистам.