Последние полтора года мы с моим братом-близнецом работали над Wasp: новым языком программирования для разработки полнофункциональных веб-приложений с меньшим количеством кода.
Wasp — это простой декларативный язык, который упрощает разработку веб-приложений и при этом позволяет использовать новейшие технологии, такие как React, Node.js и Prisma.
В этом посте я расскажу вам, почему мы считаем, что Wasp может стать большой вещью для веб-разработки, как он работает, где мы сейчас находимся и каковы планы на будущее.
Почему Wasp?
Вы знаете, как использовать React, разбираетесь в HTML/CSS/..., умеете писать бизнес-логику на бэкенде (например, в Node), но когда вы хотите создать настоящее веб-приложение и развернуть его для использования другими, вы тонете во всех деталях и дополнительной работе — отзывчивый пользовательский интерфейс, правильная обработка ошибок, безопасность, билды, развертывание, аутентификация, управление состоянием сервера на клиенте, управление базой данных, различные среды,…
Хосе Агинага весело описал неожиданную сложность разработки веб-приложений в своем блоге в статье "Каково это — изучать JavaScript в 2016 году", которая по-прежнему актуальна 4 года спустя.
Мы создаем Wasp, потому что, хотя мы оба опытные разработчики и работали над множеством сложных веб-приложений на различных технологиях (JQuery -> Backbone -> Angular -> React, собственные скрипты / makefile -> Grunt -> Gulp -> Webpack, PHP -> Java -> Node.js, ...), мы все еще чувствуем, что создавать веб-приложения сложнее, чем должно быть, из-за большого количества шаблонов и повторяющейся работы, вовлеченной в процесс.
Главным открытием для нас стало то, что в то время как технологический стек продолжает быстро развиваться, основные требования к приложениям в основном остаются прежними (авторизация, маршрутизация, модель данных CRUD, ACL, ...).
Именно поэтому почти 2 года назад мы начали думать о разделении спецификации веб-приложения (что оно должно делать) и его реализации (как оно должно это делать).
Это привело нас к идее извлечения общих функций и концепций веб-приложений в специальный язык спецификации (Wasp), в то время как детали реализации по-прежнему описываются с помощью современного стека (сейчас это React, Node.js, Prisma).
Наше видение Wasp заключается в создании мощного, но простого языка, на котором вы можете описать свое веб-приложение как можно более человеческим языком. Мы хотим сделать верхнюю часть айсберга на картинке выше как можно более приятной, в то время как нижняя часть должна быть гораздо меньше.
На таком языке, с помощью всего нескольких слов, вы можете указать страницы и их маршруты, указать, какой тип аутентификации вы хотите, определить основные сущности / модели данных, описать основной поток данных, выбрать, где вы хотите развернуть приложение, реализовать конкретные детали в React/Node, и пусть Wasp позаботится о соединении всего этого, билда и развертывании.
Полный пример смотрите здесь.
Почему именно язык (DSL), разве фреймворки уже не решают эту проблему?
Фреймворки (например, Ruby on Rails или Meteor) нас очень вдохновляют. Однако мы хотим сделать еще один шаг вперед — разработав язык, специализированный для веб-приложений (DSL), мы можем избавиться от большого количества шаблонов и обеспечить более чистый и простой опыт разработчика.
С другой стороны, мы не пытаемся заменить все на Wasp и не думаем, что это имело бы смысл — как раз наоборот, Wasp действует как «клей» между вашим React и Node.js кодом, избавляя вас от тяжелой работы и позволяя вам сохранить гибкость написания собственного кода. Большая часть кода по-прежнему пишется на React и Node.js, а Wasp служит основой всего вашего приложения.
Еще одно преимущество DSL заключается в том, что он позволяет Wasp понимать требования веб-приложения во время сборки и рассуждать о них до генерации окончательного кода, и это то, чему мы особенно рады.
Например, при генерации кода для развертывания в продакшн он может выбрать наиболее подходящую архитектуру на основе своего понимания веб-приложения и развернуть его на бессерверной или другой архитектуре (или даже в комбинации). Другим примером может быть повторное использование логики модели данных во всех частях стека, в то время как в Wasp она определяется всего один раз.
DSL открывает потенциал для оптимизации, статического анализа, расширяемости и беспрецедентной эргономики.
Как это работает?
Компилятор Wasp компилирует исходный код .wasp/React/Node.js в код React/Node.js.
В настоящее время Wasp поддерживает только Javascript, но мы планируем добавить Typescript в ближайшее время.
Техническое примечание: компилятор Wasp реализован на языке Haskell.
Диаграмма компиляции Wasp
Хотя сейчас поддерживаются только React и Node.js, в будущем мы планируем поддерживать множество других технологий.
Сгенерированный код является человекочитаемым и может быть легко проверен и даже выброшен, если Wasp становится слишком ограничивающим. Если код не инжектится, вам не нужно смотреть на сгенерированный код — он генерируется Wasp'ом в фоновом режиме.
Wasp используется через wasp CLI — чтобы запустить проект
wasp
в режиме разработки, достаточно выполнить wasp start
.Где сейчас Wasp и куда он движется?
Наша большая идея — перенести как можно больше знаний о домене веб-приложений в сам язык Wasp, что даст Wasp больше возможностей и гибкости.
В конечном итоге, поскольку Wasp будет иметь такое глубокое понимание требований веб-приложения, мы сможем создать на его основе визуальный редактор, позволяющий не разработчикам участвовать в разработке наряду с разработчиками.
Кроме того, Wasp не будет привязан к конкретной технологии, а будет поддерживать несколько технологий (React/Angular/..., Node/Go/...**.
В настоящее время Wasp находится в стадии Alpha, и некоторые функции еще не доработаны или отсутствуют, есть вещи, которые мы еще не решили, и другие, которые, вероятно, будут меняться по мере нашего развития, но вы можете попробовать его и создавать и развертывать веб-приложения!
Что Wasp поддерживает в настоящее время:
- полнофункциональный аутентификатор (email и пароль)
- страницы и маршрутизация
- стирает грань между клиентом и сервером — определяйте действия и запросы сервера и вызывайте их непосредственно в коде клиента (RPC)!
- интеллектуальное кэширование серверных действий и запросов (автоматическое аннулирование кэша)
- определение сущностей (модели данных) с помощью Prisma.io
- ACL на фронтенде
- импорт зависимостей NPM
Что будет дальше:
- ACL на бэкенде
- развертывание одним кликом
- больше методов авторизации (Google, Linkedin, ...**)
- более тесная интеграция сущностей с другими функциями
- темизация
- поддержка явно определенного API сервера
- inline JS — возможность смешивать JS-код с кодом Wasp!
- поддержка Typescript
- рендеринг на стороне сервера
- визуальный редактор
- поддержка различных языков на бэкенде
- более богатый язык wasp с лучшим инструментарием
Вы можете ознакомиться с нашим репозиторием на github.com/wasp-lang/wasp и попробовать его на wasp-lang.dev/docs -> мы всегда рады отзывам и предложениям по улучшению Wasp!
У нас также есть сообщество на Discord, где мы общаемся о вещах, связанных с Wasp — присоединяйтесь к нам, чтобы узнать, чем мы занимаемся, поделиться своим мнением или получить помощь в вашем проекте Wasp.
Опыт YCombinator
Компания Wasp стала участником YCombinator зимой 2021 года!
Здесь мы рассказываем о нашем пути и о том, как мы попали туда, подав заявку в третий раз.
Начало
Около 2 лет назад (начало 2019 года) мы с братом впервые задумались об идее (специфичного для конкретного домена) языка, специализированного для разработки веб-приложений в полном стеке — языка, который убирает «котел» и делает веб-разработку проще. Мы назвали его Wasp (Web App SPecification).
Проработав над ним около года в качестве пет проекта (исследование пространства, общение с потенциальными пользователями, создание прототипа, обучение), мы поняли, что для того, чтобы сделать из него что-то серьезное, нам потребуется полная самоотдача, поэтому мы уволились с текущей работы и полностью посвятили себя Wasp, начав работать над ним, чтобы посмотреть, как далеко мы сможем продвинуться.
Опыт YCombinator
Из-за характера Wasp (открытый исходный код, веб-фреймворк/язык) мы понимали, что в какой-то момент нам понадобится привлечь средства, если мы хотим выжить. Ранее у нас был свой стартап, и мы работали в нескольких стартапах в прошлом, поэтому мы уже знали достаточно много о том, как это делать и чего ожидать.
Поэтому, как только мы начали работать на полную ставку (начало 2020 года), мы сразу же подали заявку в YCombinator (лучший стартап-акселератор в мире). Вскоре нас пригласили в США (мы из Европы) на финальное очное собеседование!
Мы потратили недели на подготовку к интервью, оттачивая нашу подачу, видение, бизнес-план, понимание наших пользователей, делая макеты интервью — все ради этих решающих 10 минут (да, интервью длится всего 10 минут!). В итоге мы не прошли финальное собеседование, но получили обнадеживающие отзывы о том, что, хотя мы еще слишком рано, у нас есть потенциал и нам стоит попробовать подать заявку снова, когда мы добьемся большего прогресса. Для нас это имело большой смысл, так как у нас был только очень простой прототип и небольшая тяга.
Мы решили продолжить работу над Wasp еще некоторое время и продолжить подавать заявки в YC и общаться с другими интересными акселераторами/инвесторами, и посмотреть, к чему это нас приведет — если ничего другого, мы многому научимся по пути :)!
Спустя полгода, добившись прогресса с разных сторон, мы прошли второе собеседование (на этот раз онлайн благодаря Covid), и хотя мы чувствовали, что были очень близки, нас все равно не взяли — они хотели увидеть больше динамики, больше доказательств того, что людям это нужно.
Наконец, к осени 2020 года мы были в положении, когда выпустили раннюю альфа-версию Wasp, сумели построить начальное сообщество (>50 человек в Discord, 500 звезд на Github) и попали в «Продукт дня» на Product Hunt. Со всем этим мы подали заявку на участие в YC в третий раз и попали туда!
Интересный факт: если вы подавали заявку в YC ранее и получили отказ, это будет плюсом, когда вы подадите заявку в следующий раз (это показывает настойчивость, и они видят ваш прогресс). Кроме того, хотя мы потратили значительное время на подготовку к собеседованию с YC, вся эта подготовка помогла нам лучше понять нашу идею, что действительно нужно нашим пользователям (разработчикам) и как правильно это преподнести, так что это стоило того, независимо от результата собеседования.
Что теперь?
Сейчас (февраль 2020 года) мы находимся в середине программы YCombinator, создаем сообщество, общаемся с разработчиками и развиваем Wasp в направлении бета-версии.
Нас по-прежнему только двое, и Wasp находится на ранней стадии, но с удивительными членами сообщества на нашей стороне и с поддержкой YC мы не боимся мечтать о большом!
Наши уроки по привлечению средств — 250+ встреч за 98 дней до переподписки на раунд.
Wasp — это язык конфигурации (DSL) для создания полностековых веб-приложений с меньшим количеством кода и лучшими практиками, который работает вместе с React и Node.js. Наша миссия — упростить разработку веб-приложений и дать разработчикам возможность продолжать использовать силу кода и свои любимые инструменты. Нас поддерживают Y Combinator и инженеры из Airbnb, Facebook и Lyft.
Мы находимся в стадии Alpha (попробуйте)! → Присоединяйтесь к нашему сообществу → Работайте с нами
После окончания зимнего батча 2021 года от Y Combinator, мы очень рады сообщить, что Wasp собрала 1,5 миллиона долларов в нашем первом раунде финансирования! Возглавляет раунд Lunar Ventures, к нему присоединяется HV Capital.(Статья на TechCrunch)
На момент проведения Demo Day наш продукт имел солидную популярность (200+ созданных проектов, 1k звезд на Github, хорошие отзывы на ProductHunt и HackerNews), но еще не был монетизирован, что типично для проектов с открытым исходным кодом на этой стадии. Находясь в ЕС, мы также не имели связей в Bay Area до сбора средств.
ВНИМАНИЕ
Я постараюсь воздержаться от «общих» советов (поскольку наш сбор средств — это одна точка данных) и сосредоточусь на статистике и конкретных вещах, которые сработали для нас. Имейте в виду, что то же самое может не сработать для вас — я рекомендую всегда принимать советы с щепоткой соли, чтобы понять, что имеет наибольший смысл в вашем случае.
Когда мы подходили к сбору средств, мы не знали, чего ожидать. У нас были друзья из предыдущего раунда, которые очень быстро собрали большой раунд (еще до Demo Day), и мы слышали пару историй от нескольких других основателей YC, которые также были довольно успешны, поэтому мы представляли, что и для нас все пройдет быстро.
Как видно из названия, у нас было довольно насыщенное путешествие с большим количеством встреч, на которых мы получили много информации о том, как улучшить нашу презентацию, и, что еще важнее, как найти нужных инвесторов.
Вот наша статистика:
- мы поговорили с 212 инвесторами → это привело к 250+ встречам
- 98 дней прошло между первой и последней подписью SAFE
- 171 инвестор прошел мимо, 24 не ответили, 17 инвестировали.
А вот как все это выглядит на графике:
Вот некоторые вещи, которые сработали для нас:
Мы относились к сбору средств как к процессу продаж (и придерживались его)
Воронка сбора средств Wasp
Это означает, что у нас была типичная воронка продаж — генерация лидов, продажа (питчинг) и последующие действия:
- Генерация лидов: все началось, конечно же, с Demo Day, с которого мы получили 100+ лидов, но ни один из них в итоге не инвестировал (подробнее об этом ниже). После этого мы в основном полагались на наших товарищей по раунду YC в определении подходящих инвесторов и получении представлений.
- Питчинг: мы провели разговорный питч без доски, но у нас был одностраничник Notion, из которого я выкладывал ссылки во время разговора (например, на наш график трафика, отзывы пользователей и т.д.). Это также хорошо сработало, поскольку инвесторы обычно находили это интересным и продолжали пролистывать по ходу разговора, задавая последующие вопросы.
- Последующие действия: мы проводили их раз в неделю. Обычно я «пакетно обрабатывал» их каждую среду. Мы использовали Streak для выявления всех потенциальных клиентов, от которых не было вестей более 7 дней (для этого есть фильтр), а затем вручную отправляли им электронные письма.
Мы начали с того, что отслеживали все в Google Sheets, но при большом количестве предложений вскоре стало трудно ориентироваться в их воронке. Затем мы перешли на Streak (использовали их шаблон для сбора средств и немного изменили его), и это отлично сработало. Самым полезным для меня было наличие CRM, интегрированной с gmail, что сделало процесс гораздо более плавным и дало нам лучший обзор воронки. Как только я получал письмо, я видел, на какой стадии находится инвестор, а также было очень легко добавлять новых инвесторов прямо из gmail — это избавляло нас от ужасного переключения контекста и позволяло сосредоточиться.
Наш питч стал намного лучше после ~50 встреч
Мы продолжали критически относиться к своему питчу и составляли список вопросов, над которыми, по нашему мнению, нужно было еще поработать. Мы назвали это «созданием повествования», например, почему для нашего продукта сейчас самое подходящее время, представление команды или как мы планируем монетизировать. Мы разговаривали с другими компаниями в том же пространстве (devtools, OSS), изучали сравнения (крупные компании, с которыми мы сравнивали себя), разговаривали с нашими ангелами, которые были экспертами в своей области, и использовали все это для создания более убедительной истории.
Я никогда не планировал выучить наш питч наизусть, но после того, как я произнес его сотни раз, это произошло — и я, и Мартин (мой брат и соучредитель, который не выступал, но всегда сидел позади меня и давал обратную связь, особенно в начале) знали его слово в слово, и я понял, насколько более отшлифованно он звучит и насколько увереннее я себя чувствую по сравнению с тем, когда мы только начинали.
Нашей целью было дойти до 100 «нет»
После примерно 50 встреч (и примерно 20 венчурных компаний, которые отказались от нас) мы начали чувствовать себя немного разочарованными, поскольку все шло не так легко, как мы изначально ожидали. Затем я пообщался с другом, который также недавно закончил сбор средств, и он устроил мне экскурсию по Streak — я увидел их цифры и то, что более 150 инвесторов прошли мимо них! После этого я понял, что наши 20 проходов — это только начало и что вместо того, чтобы гнаться за «да», мы должны гнаться за «нет» :) — Они более предсказуемы, вы получите их много, и они четко покажут ваш прогресс.
У нас было 100 с лишним лидов с Demo day — ни один из них не инвестировал
Возможно, это довольно специфично для нашего случая, но все было именно так. Связь со стартапом на Demo Day — это очень малозатратное действие для инвесторов. Кроме того, как бы много инвесторов ни было на Demo Day, их еще больше.
Когда мы отсортировали полученные связи, около 20% оказались действительно подходящими для нас, то есть они инвестируют в компании deep tech / OSS, инвестировали недавно, инвестируют на нашей стадии и т.д.
Мы по-прежнему встречались практически со всеми заинтересованными лидами, но быстро поняли, что из-за того, что наш продукт является глубоко техническим, а компания — преддоходной, только инвесторы с инженерным образованием были действительно заинтересованы, потому что они могли понять и увлечься тем, что мы делаем. Это подтолкнуло нас к тому, чтобы генерировать лиды с гораздо более узкой направленностью.
Мы изучили другие компании OSS и dev tools из нашей группы, посмотрели, кто инвестировал в них, и попросили о знакомстве. Наши товарищи по раунду тоже были в режиме сбора средств, они знали, как это может быть трудно, и хотели помочь, поэтому все продвигалось очень быстро.
Мы научились не тратить время на неверующих
Когда мы научились фокусироваться на высококвалифицированных лидах, мы также поняли, что очень трудно (невозможно) изменить чье-то мнение. Многим инвесторам понравились мы и то, что мы делаем, но они скептически относились, например, к размеру рынка или потенциалу монетизации и дали это понять с самого начала. Многие из них хотели продолжить общение, хотели встретиться с нашими ангелами-инвесторами и т.д., но все это не помогло изменить их мнение, и это очень отвлекало нас. Я считаю, что очень трудно изменить чье-то мировоззрение, особенно на начальном этапе, когда зачастую нет весомых фактических доказательств.
Прохождение через «долину смерти»
Как вы видите на графике, примерно за два месяца мы едва перевалили за $300 тыс. и целый месяц не имели никакого прогресса. В то же время мы чувствовали, что наш питч стал значительно лучше, и мы обращались к инвесторам, которые нам больше подходили. Это было одно из самых трудных времен, когда мы видели, как другие закрывают свои раунды, но мы решили довериться процессу и продолжать идти вперед, пока не используя все ресурсы, которые у нас были. В это же время наш ведущий инвестор потратил время на проведение собственной тщательной проверки Wasp, поэтому, хотя со стороны кажется, что никакого прогресса не было, на самом деле многое происходило за кулисами.
Внезапно несколько вещей сошлись воедино с разных сторон, и наш раунд был быстро закрыт! Это было поистине волшебное чувство — начать привлекать инвесторов за один день, даже во время первого звонка, когда раньше нам требовались недели, чтобы закрыть первый чек на 50 тысяч долларов. Немаловажным фактором было и то, что наш раунд заполнялся, и это, конечно, мотивировало инвесторов действовать быстрее.
Мы сравнивали себя с крупными, успешными компаниями
Это один из лучших советов по привлечению средств, который мы получили от партнеров YC. Вначале мы не понимали, насколько это важно, но как только начались встречи, мы поняли, что это один из лучших способов объяснить инвесторам потенциал нашей компании. Учитывая инновации в технологии, которые не так просто понять, им нужно было за что-то зацепиться, чтобы понять, как может работать бизнес-модель и дистрибуция, и это звучит гораздо более выполнимо, если есть руководство к действию, которому мы можем следовать, а не изобретать его заново. Мы продолжали работать над тем, чтобы найти хорошее сравнение (у нас их было несколько) и объяснить, в чем мы похожи и почему.
Удачи — у вас все получится!
Я надеюсь, что эта статья была вам полезна и что наша история послужит вам стимулом для продолжения работы в трудную минуту! Мы желаем вам удачи, а также не стесняйтесь обращаться к нам, если у вас возникнут вопросы.
Следите за новостями YC Startup Library на русском в телеграм-канале.