«Команда розробки — самодостатній організм»: 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!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.