«Команда разработки — самодостаточный организм»: SEMrush о Java и свободе выбора
Компания SEMrush выделяется в ряду спонсоров Joker сразу по нескольким причинам. Во-первых, это не банк или аутсорсер, а платформа для маркетологов. Во-вторых, при участии компании в Java-конференции её CTO Олег Краснов известен любовью к C. В-третьих, для неё этот Joker станет первым.
Из-за всего этого только интереснее было расспросить и о том, как в компании обстоят дела с Java, и о подходе к разработке в целом, и об ожиданиях от конференции. Вот с кем мы пообщались:
- Елена Даниленко, HR generalist
- Олег Краснов, CTO
- Анатолий Чичиков, старший Java-разработчик
Елена Даниленко (HR generalist)
— SEMrush впервые становится спонсором Joker — чего компания ждёт от первого опыта?
— В нашей компании большинство рабочих вопросов решается личным общением. Поэтому одна из наших целей — познакомиться, рассказать о себе и пообщаться с Java-разработчиками на интересующие нас темы. Помимо этого, нам очень приятно иметь возможность поучаствовать в поддержке такого значимого события, как конференция Joker. Мы за то, чтобы было больше нетворкинга, хорошего и разного :)
— Порой IT-специалисты недолюбливают понятие «маркетинг» — их не отпугивает то, что вы делаете маркетинговую платформу?
— Отпугивает, скорей всего, не само понятие «маркетинг», а то, что не очень понятно, что именно стоит за этим словом. Но мы ведь не маркетинговая, а IT-компания. Сами мы занимаемся не маркетингом, а разработкой высокотехнологичной онлайн-платформы для людей, которые являются профессионалами в этой сфере или хотят понять своё положение на рынке.
И для нас важна не продуктовая сфера, из которой придёт к нам потенциальный коллега, а то, согласен ли он с нашим подходом к работе. Мы стараемся дать командам разработки максимум свободы в принятии решений — и нам хорошо работается с теми людьми, которые готовы полностью нести ответственность за свой продукт и за процесс его разработки, работая над улучшением качества и того, и другого. Мы стараемся максимально прояснять эту позицию при общении с кандидатами.
— У SEMrush офисы в четырёх странах, а где находятся разработчики (в первую очередь интересует Java)?
— Разработка у нас ведётся в СПб, Праге (Чехия) и Лимассоле (Кипр). Больше всего Java-команд у нас в Санкт-Петербурге: сейчас их семь. На будущий год планируем увеличить это количество хотя бы вдвое. Также Java-девелоперы работают в нашем офисе в Лимассоле.
Олег Краснов (CTO)
— Когда CTO компании специализируется на C, у выбирающего место работы Java-разработчика может возникнуть опасение, что в такой компании он окажется на вспомогательных ролях. Что у вас с этим?
— Специфика SEMrush не в том или ином языке, а в следующем: мы считаем, что команда разработки — это самодостаточный развивающийся организм. И команда может сама выбирать, что ей использовать — включая язык разработки.
Это добавляет свободы, это добавляет ответственности, но и делает процесс управления ситуацией более сложным делом. Управление из сбора отчётов и использования «кнута» превращается в убеждение и мотивацию. Общение равных — это мне по душе.
Добавлю, что отношение к Java у нас как к хорошему языку программирования с большим комьюнити и развивающейся экосистемой. Проекты, написанные на Java, у нас прекрасно существуют и развиваются, что вселяет в нас уверенность в том, что мы хотим, чтобы их количество росло.
— В 2014-м вы выступали с докладом «Когда стоит писать свою базу данных». И в связи с этим интересно:, а какой в SEMrush подход к вопросу «брать готовое или делать собственное»?
Такой же, как и с выбором языка: ребята сами решают, какого пути придерживаться, делать что-то своё или использовать стандартное решение. Если же говорить исторически, то в ряде продуктов произошёл переход от стандартных решений к самописным, ведь, как известно, хорошо написанное частное решение работает лучше стандартного.
Если говорить про мой личный опыт, представленный в докладе, то на момент разработки не было ни стабильного работающего Hadoop, ни Mongo, так что я действовал по обстоятельствам :)
— В нашем недавнем материале про холивор Java vs C++ вы упоминали продукт с более чем 150 серверами, и хочется понять:, а какой вообще у SEMrush масштаб? Какие ещё есть крупные продукты, сколько суммарно серверов?
— Давайте начнём с «железа». Сейчас у нас около 440 реальных серверов, а также порядка 250 виртуальных машин. Технологический стек разработки, если говорить о языках — от ANSI C до Node.js и, конечно же, Java.
Самые крупные наши проекты — это «Backlinks», «Domain & Phrase Analytics» и «Tracking». «Backlinks» — наиболее крупный и нагруженный из них, более 150 «машин», его смысл в построении базы обратных ссылок всех страниц интернета, эдакий собственный Google. «Domain & Phrase Analytics» — самый старый продукт компании, более 60 серверов, аналитика поисковой выдачи по более чем 30 локальным базам. «Tracking» — один из самых динамично развивающихся продуктов, 28 серверов, динамика позиций сайтов в поисковой выдаче.
Эти три продукта со стороны бэкенда написаны на C/C++, но успешных продуктов на Java у нас тоже хватает — таких, как «SEO Ideas» и «Site Audit», более подробно о них вы можете прочитать на нашем сайте.
Анатолий Чичиков (старший разработчик)
— Какие технологии/инструменты используются в случае с Java (и лично вами, и в SEMrush в целом)?
— Мы приветствуем всё, что облегчает поставку ценности пользователю при минимальных затратах времени. Также всегда стараемся идти в ногу со временем и использовать последние стабильные версии языков и библиотек.
Если говорить о проекте, к которому причастен я, то из Java-фреймворков это, конечно же, Spring (Boot, Web, Data, AMQP). Для анализа текстов используем Lucene. В повседневности широко используем Lombok, Guava и стримы Java 8. Что касается внешних средств хранения данных, то это MongoDB, Redis и RabbitMQ.
В других Java-командах технологии могут варьироваться в зависимости от задач, но зачастую ядро — это Spring и Java 8. Кто-то хранит большие объёмы информации в HDFS и использует Hadoop для обработки. Кому-то важны сложные запросы и транзакции — их выбор PostgreSQL. Есть команды, которые за компромиссы между скоростью вставки и сложностью запросов — используют, как и мы, MongoDB.
Сборка и деплой — Maven, Gradle, Fabric, Ansible. Многие команды используют Docker в продакшене.
Инструменты — Intellij IDEA, TeamCity, YouTrack, GitLab. Из интересного: наша команда достаточно успешно использует XRebel. А на уровне компании сейчас внедряем межкомандное код ревью, пробуем Upsource.
— Есть ли какая-либо недавняя масштабная задача, о которой хотелось бы рассказать?
— Думаю такой масштабной задачей я могу назвать «SEO Ideas»: проект, который начала и пишет уже чуть больше года наша команда. Его цель — превратить кучу непонятных рядовому маркетологу метрик и данных по конкурентам в конкретные рекомендации к действию. Люди любят простоту, поэтому пока стабильно растём.
Это распределённая система потоковой обработки данных. Там есть concurrency, задачи по обработке текстов, работа с внешними API и балансировка нагрузки на них. Серверная бизнес логика полностью на Java, клиентская часть написана на JavaScript. На мой взгляд Java как язык и как платформа уверенно держит удар новых хайповых технологий (NodeJS, Go и т.д.) как по производительности, так и по удобству использования. Соблазна или потребности сменить её у нас не возникало.
— В SEMrush многое сделано на C/C++ —, а у вас как Java-разработчика не возникает ощущения «с Java было бы лучше»? :)
— Использование C/C++ — это необходимость в некоторых проектах, так как перед этими командами стоят очень требовательные к ресурсам задачи. Один из самых ярких примеров — составление графа ссылок и ранжирование доменов всего интернета. Использование Java нам бы дорого тут обошлось, и решение использовать C позволило высвободить побольше ресурсов для других, не менее нужных продуктов.
— Хорошо ли Java сочетается с подходом «самоорганизующихся команд»?
— Да, вполне. В нашем случае команда полностью берёт на себя ответственность за свои эксперименты и стабильность продукта, а тут Java и её зрелые библиотеки показывают себя с лучшей стороны: ноги себе простреливаем редко.
Также мы стараемся писать, насколько это возможно, простые и понятные плоские модули, предпочтение отдается горизонтальным связям и постоянной готовности к изменениям. И здесь нас Java тоже обычно не подводит: средства рефакторинга и разрешения зависимостей у нее отличные.
— C «разношёрстностью» команд, самостоятельно выбирающих языки и технологии, не возникают ли у вас сложности с interoperability?
— Нет, здесь никаких проблем. Весь SEMrush — это, по сути, набор микросервисов, и мы в качестве «lingua franca» между ними используем JSON и REST. В отдельных случаях, когда речь идет о большом объёме данных или запросов, возможны бинарные решения, но это скорее исключения, чем правила.
— У вас есть некоторый опыт в Groovy и Scala —, а связан ли этот опыт с работой в SEMrush, и используют ли там в продакшене эти языки?
— Сам я в SEMrush практически не писал на этих языках. Но вообще в компании Groovy используется, пусть и менее активно, чем многое другое. Насколько я знаю, в основном его любят QA, они пишут красивые тесты на Spock. У меня самого к Groovy был интерес как к скриптовому языку. В целом он приятен и лаконичен, и я понимаю, за что его любят люди. Тем не менее, вышло так, что скрипты я пишу в основном на Python, и считаю его оптимальным инструментом, когда дело пахнет рутиной.
А Scala, насколько я знаю, у нас пока не прижилась. Сам я некоторое время назад вплотную изучал этот язык, и тоже не могу сказать, что мы с ним сошлись характерами. Язык непростой, требует много времени на изучение, и каждый программист пишет на нём очень по-разному. Просматривая GitHub на тему Scala, можно иногда почувствовать присутствие внеземного разума. На мой взгляд, в эпоху быстро меняющихся требований и однокнопочных интерфейсов это скорее минусы.
Сам я сейчас с интересом посматриваю на Kotlin, продолжая активно писать продукт на Java. Подкупает то, что язык прост, лаконичен, безопасен и делается прагматиками для прагматиков. В нашей компании такие инструменты любят. Не исключаю, что у нас появится проект на нём, если сформируется критическая масса желающих попробовать.
— Спасибо за ответы, будем ждать вас на Joker!