Увидеть новый и пока мало кому известный язык программирования в маленьком стартапе или пет-проекте у друзей — дело обыденное. Спросишь, зачем его взяли, скажут, что просто изучили из любопытства, понравилось и решили поэкспериментировать, потому что устали от вечных Java/.Net/JS на работе.
Но если компания говорит о себе фразами в духе «международный бизнес», «офисы по всему миру», «культ продуктивности», «нам важен результат, а не процесс», «нам нужны горящие глаза и стремление развиваться» — обычно от них не ждешь сюрпризов. Некоторые даже вводят стоп-листы на новые технологии, пока те не наберут вес в индустрии. На вопросы о минусах инструментов уклончиво говорят: «главное люди, а не языки».
У Wrike, где около 400 разработчиков, другой подход. Они не закрыли глаза на недостатки JavaScript и даже не выбрали компромисс, вроде Flow или TypeScript — а пошли совсем радикальным путем. Переписали фронт на язык, который тогда вряд ли знала и тысяча человек, и, кажется, до сих пор абсолютно в себе уверены.
Wrike занял почетное третье место среди medium-компаний в рейтинге лучших работодателей в ИТ «Моего круга» со средней оценкой 4.82. В топ самых высоко оцениваемых качеств компании входят: социальный пакет, комфортные условия труда, отношения с коллегами, адекватная зарплата и профессиональный рост.
— Wrike основал Андрей Филев в 2007 году в Санкт-Петербурге. Потом он начал развивать бизнес в Америке, в Кремниевой долине. Тогда это была совершенно другая компания, а сейчас мы сильно выросли.
В начале у Андрея была аутсорсинговая компания. В ней начали искать софт, который позволил бы более эффективно работать — управлять временем и ресурсами. По-настоящему классного инструмента на тот момент не нашлось, и появилась идея создать свой. Тогда и родился Wrike.
Мы начинали с простых вещей, но постепенно продукт стал расти. Это было 12 лет назад, и можно сказать, что мы приняли участие в формировании рынка подобных work management-систем. Сейчас Wrike используют свыше 18 000 компаний по всему миру.
— А та аутсорсинговая компания до сих пор существует?
Да, называется Murano Software. Но она к нам не имеет отношения. Wrike — полноценная компания одного продукта, которая была экспериментом в рамках аутсорсинговой компании, но очень быстро взлетела и отделилась.
— Там до сих пор им пользуются?
Да, до сих пор.
Что такое Wrike
Wrike — это платформа для управления проектами и совместной работы в очень широком смысле: от личного to-do листа вплоть до системы, которая подходит для огромных компаний.
Внутри можно создавать проекты с множеством задач и подзадач, настраивать отчеты для сбора данных, выводить диаграммы Ганта, отслеживать задачи в календаре, редактировать их одновременно с другими участниками. Дополнения Wrike помогают управлять загруженностью команды в режиме реального времени или проводить сложные многоканальные маркетинговые кампании. Есть API для интеграции в другие инструменты. Есть расширения, например, для Adobe Creative Cloud. Оно позволяет просматривать и комментировать файлы не выходя из системы.
Wrike не стремится сделать акцент на определенной функции, индустрии или профессии. Он позиционируется, как универсальный инструмент для всего — вплоть до замены почтовой системы, мессенджера, базы знаний, баг-трекера и многого другого.
— Расфокусировка на всех и для всего не делает хуже отдельные части?
— Мы сознательно не идём в узкопрофильные ниши. Например, не хотим делать исключительно баг-трекинговые системы для разработчиков типа Jira. Мы не хотим делать софт только для программистов или только для дизайнеров. Нам интересно делать универсальный продукт. При этом мы понимаем, что есть сильно специализированные кейсы, которые мы не охватываем.
Но это и не наша цель — понравиться всем, или полностью занять нишу ИТ. Хотя мы, разрабатывая Wrike, используем его как систему для задач и баг-трекер.
— То есть, можно взять баг-трекер быстрее, мессенджер быстрее, но это будет пять разных инструментов и синхронизироваться между ними сложно.
— Но тогда и конкурировать приходится со всеми. Atlassian с одной стороны. Slack как мессенджер — с другой.
— Да, сейчас только ленивый не разрабатывают системы управления проектами и продуктами.
— Но компаний, которые конкурировали бы с нами по всем пунктам, на самом деле, не так много.
— Atlassian разве не такой?
— Он больше заточен на ИТ-рынок. Например, для дизайнеров Jira слишком сложная.
Ее очень сложно кастомизировать. Есть даже профессия — Jira Setup Manager. Мы же стараемся делать так, чтобы ты зашел на сайт, взял бесплатный аккаунт и все — с первого дня можешь использовать без проблем.
— Но вы же говорите, что тоже тесно работаете с клиентами и тоже направляете менеджеров которые, налаживают процессы.
Да, у нас есть команда Customer Success и Deployment-менеджеров, а также целая система туров, гайдов, электронных книг и всякой документации. Есть менеджеры, которые помогут настроить Wrike уже под готовые процессы. Иногда они работают с крупными клиентами one-to-one. Иногда сразу со многими (например, записывая вебинары). Даже если человек зарегистрировал триал и не разобрался в продукте, у него будет возможность пообщаться вживую с кем-то из райкеров и понять, как что работает.
— Вообще, внедрение продукта в компанию с тысячами пользователей — это та еще задача.
— Случалось, что с кем-то из больших клиентов было очень сложно?
Обычно чем больше компания, чем больше у нее рабочих процессов — тем тяжелее работать. Мы, конечно, не аутсорс. Не бывает такого, что приходит какой-то толстосум и говорит: «вот вам много денег, сделайте мне такую штуку». Наши продакт-менеджеры сами определяют пути развития продукта. Но бывают клиенты с интересными запросами.
В Airbnb, например, используют платформу в очень необычных кейсах. Каждая квартира и, каждый человек, который ее арендует— это отдельный проект в Wrike.
Или автомобильная компания Coil [название изменено]. У них покупатели заказывают запчасти. Давать этим людям аккаунты Wrike — так себе идея. Не будешь же каждому владельцу Coil делать свою учетную запись. Но компания очень хотела, чтобы была удобная возможность работать с клиентами.
Мы, конечно, не сказали, что прямо сейчас для них сделаем такую фичу. Но менеджеры поняли, что она улучшит продукт в целом. Так появились «внешние формы запросов», для людей, у которых нет аккаунта Wrike.
— Получилось, вы делали для Coil [название изменено], а подошло и всем остальным?
— Не совсем. Мы одновременно анализировали рынок и строили гипотезы — эта задача лежала в потенциальном роадмапе. Если бы был запрос, который совсем нам не подходит, мы бы не стали делать.
Внутренняя структура Wrike
Мы работаем по Scrum. Компания разделена на команды по фичам — примерно по 10 человек. Они разного состава, но в каждой есть бэкенд, фронтенд, скрам-мастер, QA, автоматизатор QA, UX-дизайнер, продакт оунер, продуктовый аналитик (аналитики иногда бывают на несколько команд). Такой состав полнофункционален и может сделать фичу от и до.
Есть внутренние команды, которые делают фреймворки, компоненты, дизайн-киты, занимаются переходом с одной версии языка программирования на другую.
Некоторые команды являются общими для всей компании. Например, это SysOps, которые занимаются серверной инфраструктурой, и DevOps — они занимаются деплоем и доставкой продукта. Релизы у нас от одного до 3 раз в сутки.
Еще частично используем уже известную всем структуру Spotify с гильдиями. Например, фронтенд, где состоят фронтендеры из всех команд. Есть фронтенд-лиды, которые занимаются менеджментом, архитектурой. И есть лиды гильдий.
Мы пока не дошли до того, чтобы выделять их из команд. Но вообще это логично и органично. Сейчас люди, обладая высокими техническими архитектурными навыками, находятся в инфраструктурных командах.
Wrike — это не совсем про бюрократизированную структуру. Но это не значит, что у нас творится хаос. Если человек делает то, что ему нравится, и делает это хорошо — то возможности для роста у него будут независимо от того, какую он занимает должность.
— А в каком офисе что делается?
— В Питере и Воронеже инженерные r’n’d офисы. В Питере у нас 400 человек, в Воронеже — 40. Есть офисы в Сан-Хосе, Сан-Диего. В этом году откроется офис в Праге. Недавно расширили офис в Дублине. В январе этого года открылся офис в Мельбурне, в Австралии.
— В американских офисах у нас отдел продаж, маркетинг, менеджеры (CSM). В Дублине тоже CSM и продажи. Есть еще команда аналитиков. В Петербурге — самый большой и объединяющий офис. Здесь у нас менеджеры по работе с клиентами, продакт-менеджеры, аналитики, дизайнеры, разработка и бэк-офис.
— Все работают в офисах или вы открыты к удаленке?
— Удаленные скрам-команды — это очень сложно. Нам хочется, чтобы люди были рядом и контактировали между собой. В департаментах, которые могут предполагать удаленную работу (например, Customer Support), мы ребят не сильно ограничиваем.
— Удаленка в разработке — спорный момент. Сейчас много о ней говорится, в англоязычных твиттерах постоянно обсуждают эту тему. Есть «за» и «против». На наш взгляд, «против» больше. Мне, как менеджеру команды, было бы тяжело обеспечивать продуктивность и общий дух, растить и коучить удаленных сотрудников.
У нас достаточно гибкий график, люди не сидят в офисе строго с десяти до шести. Если есть стендап, то будь добр — приди, а уже когда он пройдет и сколько будет длиться, команды выбирают сами. Если что-то случается, тоже без проблем — человек пишет, что работает из дома.
— Когда продукт международный, от разработчиков часто требуют хорошо знать английский, чтобы говорить с заказчиками.
— У нас нет заказчиков, мы же не аутсорс. Компания международная, и часть коммуникаций, действительно, ведется на английском, но это касается не всех. Для разработчиков в России у нас нет специального требования знать английский.
Раз в месяц есть митинги, на которых мы рассказываем обо всех изменениях в компании и финансовых показателях. Общение с саппортом происходит на английском. Тикеты с багами клиентов тоже, конечно, на английском языке. Для тех, кто хочет подтянуть или выучить язык, такая возможность есть – у нас ведутся постоянные занятия с преподавателями, для сотрудников они бесплатные.
Но мое мнение — если разработчик не вчера начал разрабатывать, он знает английский хотя бы на уровне чтения документации. Без языка ты даже не можешь погуглить ничего.
Может, конечно, у разработчиков не true British accent и нет Оксфорда за плечами, но изъясниться и прочесть что-нибудь они обычно могут.
Почему Dart лучше JavaScript и TypeScript
— Сейчас все это большая сложная система. Но она выросла из внутренней разработки очень давно и с тех пор много менялась. Из-за этого не осталось архитектурных просчетов, которые теперь мешают жить?
— Конечно, проект большой. У нас на бэкенде то ли полтора, то ли два миллиона строк кода на Java. На фронтенде тоже сопоставимо. Но я не знаю ни одного человека, который может спроектировать систему на пять лет вперед, и она будет развиваться не перестраиваясь.
Бывает, что-то падает. Иногда мы понимаем, что два года назад были глупее. Но это естественно с точки зрения инженера. А как иначе?
— Поэтому есть внутренние команды, которые периодически занимаются переписыванием старых частей.
— Да, я иногда говорю, что нам надо сесть и порефакторить, а то стрельнет так, что все отстрелит. Садимся и рефакторим. Мешает архитектура — делаем архитектуру.
— Что у вас за стек?
— На бэкенде Java. База данных SQL. На фронтенде интересная штука. Когда-то давно у нас был JavaScript, но мы поняли, что он вообще не масштабируется и выбрали Dart.
— Что-что выбрали??
— Dart. Да, это нормальная реакция. Типизированный язык от Google, которому сейчас уже почти семь лет. Мы наверное самые главные евангелисты этого стека в России.
— Самые главные или единственные?
— Кстати, сейчас он активно развивается. Гугл запустил Flutter — это такой мобильный фреймворк, написанный как раз на Dart. Есть Russian Dart Community, которое мы создали и поддерживаем. Там уже около полутора тысяч человек. Конечно, по меркам JavaScript это не особо внушительно, но и немало.
В декабре прошлого года мы организовали конференцию DartUp — был огромный зал и пришло много людей. И многие реально используют Dart в продакшене. Язык постепенно развивается, и это очень круто.
— Так что мы сейчас на коне. Говорить «в мире», наверное, претенциозно, но, на самом деле, так и есть. DartUp — это самая большая конференция по Дарту в мире. Даже больше, чем у Google.
— На конференции было около трехсот человек. Хотя еще два года назад казалось, что мы одни в поле воины.
— Это все любопытно, но как работать на таком масштабном проекте, если не наймешь людей, нет ни библиотек, ни фреймворков.
— Это заблуждение. Недавно мы взяли в команду человека, для которого Dart вообще был первым языком программирования.
— В Dart все есть. Это язык из разряда C# и Java — там все что нужно, встроено. И это вообще неправда, что там все пусто и катаются перекати поле. Там встроено даже больше, чем в некоторых двадцатилетних языках. Библиотеки, инструменты, поддержка фреймворков — Angular там тоже есть.
Конечно, нет инфраструктуры, как на JS. Но проблема в том, что, когда люди пишут миллионы библиотек, получаются миллионы плохих библиотек. И, может, только сто нормальных.
А если библиотеки пишет Google, который использует Dart в AdWords и AdSense, то среднее качество гораздо выше.
Прелесть языка в том, что он простой и Си-подобный. То есть мы нанимаем разработчиков на C++, C#, Java, JavaScript — кого угодно. Мы не требуем знания Dart. Естественно, на улице не найти дарт-разработчика.
В моей команде есть разработчик с опытом Си шарпа, дотнета. На фронте он никогда даже не писал. И он за пять дней запилил фичу. Потому что язык такой, как будто ты писал на нем всю жизнь.
По-хорошему, разработчики-инженеры пишут бизнес-логику, неважно на каком языке.
— Но люди не начинают писать как на своем старом языке? Те же JS-ники пришли с динамического языка на статический.
— Поэтому у нас процесс отбора не самый простой. Но справедливый и честный.
— Ок, почему язык хорош?
Я бы сказал он один из самых жестко типизированных, которые компилируются в JS. Когда мы года четыре назад сидели на фронтенде и нас было человек 8 — ты можешь хоть обмазаться всякими линтерами, правилами, всем на свете — а он все равно будет что-то пропускать. Нужна была статическая типизация, максимально строгая.
На Dart если что-то напишешь неправильно, сразу это поймешь. В нем более раннее обнаружение ошибок, которое позволяет даже не тестируя код понимать, работает он или нет.
Во встроенной библиотеке нет хаоса, когда одно обновилось, а другое отвалилось. Потому что вместе с языком поставляется SDK, который гарантирует, что после обновления все работает. Не нужно подключать миллион библиотек, чтобы получить потоки и стримы — все уже там.
Сейчас на свете два языка, которые позволяют писать под все платформы —под мобильные, под бэкенд, под десктоп, под веб. Это JS и Dart. У JS минусов известно сколько. А у Dart огромный плюс — типизация.
Поэтому остается только один жестко типизированный язык, который позволяет писать под все платформы с нормальным тулингом. Многие в пример приводят Kotlin, но для веба — это не очень.
— Теперь не жалеете что, например, TypeScript не выбрали?
— Не теперь, а в принципе не жалеем. Я советую посмотреть доклад Виктора Логова из JetBrains на конференции HolyJS [Вероятно, спикер перепутал имя, и речь шла о докладе Антона Лобова].
Они делают поддержку TypeScript в своих продуктах, и он там просто разносит TS по полочкам, аргументированно. И после этого вообще нет желания его брать. Складывается ощущение, что фичи в нем появляются по принципу «Давайте вот это добавим? А давайте».
— Чтобы я поверил, расскажите что плохо в Дарте? Не может быть, что все идеально.
Запросто. Есть проблемы, но не с языком, а с Google. Они внутри используют достаточно много инструментов, которые не шарят наружу. У нас сейчас есть прямой канал с Google, мы состоим в ряде внутренних организаций, и они потихоньку отдают эти инструменты.
Но это актуально только для нас, для очень большой кодовой базы.У маленьких проектов вообще проблем нет.
— После опыта с Dart вы не захотели Java заменить на Go?
— Зачем? Dart мы выбрали по определённым параметрам. Это было взвешенное решение.
— Один из наших спикеров говорит, что есть компании, которые переписывают все на новые технологии, а есть компании, которые зарабатывают деньги. Переписывание не должно быть самоцелью. Есть бизнес-задачи, и есть инструменты, которые должны их реализовывать.
— Мы экспериментируем с разными технологиями. Если в какой то момент поймём, что Go работает лучше, то попробуем.
На фронтенде мы идем в сторону независимых приложений. На бэкенде — монорепозиторий. В этом есть много плюсов, но есть и определенные минусы — об этом можно долго говорить. Мы смотрим в сторону микросервисной архитектуры, исходя из того, что будет полезно в наших условиях.
Микросервисная архитектура хорошо работает там, где мало связей. Если у тебя много связей, то микросервисы превращаются в боль. Серебряной пули нет. Для этого у нас есть целая команда, которая исследует, что лучше всего использовать в наших условиях.
Найм инженеров, а не знатоков языка
— Кем надо быть, чтобы к вам попасть?
— Мы берем людей, которые заинтересованы в том, что они делают. Это уже клише — про горящие глаза. Тем не менее, это важно. Даже если ты хороший разработчик, но тебе все равно, что пилить, лишь бы работать с десяти до шести и получать деньги — с большой вероятностью это нам не подойдет.
— Мы берем людей, которые хотят учиться, развиваться. Если считаешь, что уже всего достиг и теперь король мира — это тоже не наш вариант.
— Так как у нас достаточно хороший канал фидбека от разработчика к бизнесу и обратно, то подход «нате, работайте» не очень подходит. Мы стараемся нанимать людей, которые готовы предложить свое видение, у них есть мнение и вопросы.
Это движет проект вперед намного быстрее, чем если нанять трех супер-сеньоров, которые говорят «мое рабочее время вышло и вообще вы платите мне недостаточно». Они сделают меньше, чем человек, который за сутки на хакатоне запилит проект, доведет его до продакшена.
— Мы ищем людей, которым не все равно, которые заинтересованы двигаться вперед.
— Вот я к вам пришел, сказал, что я весь такой целеустремленный, у меня много своего мнения, горят глаза. Я еще прыснул в них чем-нибудь, чтобы поблескивали, говорю, берите меня. Вот так и возьмете?
— Собеседования не такие простые. Мы создаем условия, близкие к рабочим процессам, и смотрим, как человек себя показывает. Если ты разработчик, то будешь писать код. Если эйчар — будешь собеседовать.
— На собеседовании разработчик будет писать код?
— Да, я знаю, это сейчас очень обсуждаемо.
Понятно, что мы смотрим на несколько показателей, когда собеседуем разработчиков. Но наш стек не самый типичный, и кодовая база большая, поэтому кроме горящих глаз мы ждем, что человек как инженер умеет разбираться в сложных концепциях, независимо от языка.
Если человек говорит: «Я React-программист», — это уже звучит странно. То есть если не React, ты не разберешься?
Мы стараемся давать задачи, которые сами делаем каждый день. Они не требуют суперзнаний о предметной области. Мы не спрашиваем, что такое замыкание в JS. Можем спросить: «Вот у тебя есть Jira и Wrike. Как ты синхронизируешь данные между ними?»
Неважно, на каком языке кандидат напишет эту задачу — хоть на Go, хоть на чем угодно. Можно даже просто нарисовать, что где взять и куда положить. Скорее, мы набираем инженеров, чем специалистов по языкам.
— Если пришел человек с гениальным инженерным мышлением и решил задачу так, что вам очень нравится, но у него нет «горящих глаз и вот этого всего», он попадет в компанию?
— Это лукавый вопрос. Если он крутой инженер, значит глаза горят. Не бывает кода в вакууме. Не бывает людей, которые решают олимпиадные задачки, и их все устраивает. Любой программист — эгоист и нарцисс. Просто у него это выражается в коде. Любому человеку хочется, чтобы результаты его труда были видны и приносили пользу людям.
А из этого вытекает то, что человеку не все равно, что делать. Почему, например, тяжело найти людей в банковскую и финансовую сферы? Там бывает скучновато. Я не говорю за всех, но делать платежки для австралийского банка… Пусть там будет суперархитектура — спроси любого, и почти каждый тебе скажет «не хочу».
— В банках скучно. А у вас весело?
— Пока даже чересчур.
Мне нравится Wrike тем, что постоянно появляются новые задачи, на которые я могу влиять. Не бывает, что за нас все уже придумали. Мы всегда обсуждаем, высказываем свое мнение, вкладываемся в каждую фичу, в каждую итерацию.
— Задачи между командами сильно отличаются?
— Специфика бывает совсем разная. Одна команда делает Gantt-чарт. У них там Canvas, своя логика. Команда, которая делает одновременное редактирование задач, как в Google Документах — там и математика, и Dart на бэкенде. От команды к команде стек один, но применение совершенно разное.
— Если человек говорит, что устал в своей команде и хочет что-то другое, получит ли он это от простого перехода?
— Конечно. Переходы бывают часто и любые. Люди становятся из бэкендеров фронтами, инженеры становятся продакт-оунерами. Когда я пришел в Wrike, меня поразило количество горизонтальных связей между командами. Люди постоянно общаются, куда-то вместе ходят, тусят.
— Как так получилось? Большая компания, 400 человек в офисе. Как они сдружились?
— Это вопрос подбора и культуры. Про культуру тяжело говорить — это эфемерные вещи. Ты их чувствуешь, но описать словами не можешь. Во время подбора есть этап Cultural fit, когда мы смотрим, насколько человек подходит команде.
— Что там за критерий. Как вы определяете, подходит или нет?
— Есть ТОП-5 тупых вопросов на собеседовании. Один из них — кем вы себя видите через пять лет. Он звучит не очень, но в другой формулировке полезен. Например, какие у тебя цели, чего ты вообще хочешь? И если человек может их сформулировать, это уже плюс.
— Если человек сказал, но вам не понравилось, чего он хочет?
— Редко такое бывает, что человек хочет чего-то сильно противоположного нашим ценностям. Если скажет, что хочет петь или на лыжах кататься, тогда да, это будет странно.
Наша задача — искать людей, которые хотят делать работу хорошо, приносить пользу и развиваться. А развитие невозможно в вакууме. Надо общаться. Вместе с другими людьми ты достигаешь большего. Если просто приходить, не здороваясь садиться за свои места, восемь часов работать и уходить — то для собственного развития вы сделаете гораздо меньше.
— То есть плохо, если человек ничего не ответит?
— Нет. Мы не поставим на нем крест. Все люди чего-то хотят.
— Я просто пытаюсь понять, можно ли не пройти этот этап собеседования?
— Легко. Мы немного фрики в плане продуктивности и достижения целей, мы ищем людей себе подобных. Есть те, кому нравится быть в процессе, а есть люди, которым нравится результат. Мы про второе.
— Вот еще почему можно не пройти. Wrike — это safe place. Тот же Google говорил, что один и самых ключевых критериев успешной команды — это психологическая безопасность. Я могу брать на себя ответственность только если знаю, что я в безопасности.
Если человек откровенно токсичный, мы знаем, что он будет приносить команде больше разрушения — даже если он суперкрутой программист.
— Людей надо критиковать, чтобы они учились?
— Критиковать — это не совсем правильное слово. Обязательно нужна обратная связь. Мы здесь не для того, чтобы искать виноватых — мы здесь, чтобы делать работу качественно.