«СКБ Контур» — одна из крупнейших и старейших ИТ компаний в России. В конце октября ей исполняется 30 лет, количество всех сотрудников перевалило за 8 тысяч.
По оценкам, собранным на сервисе оценки работодателей «Моего круга», в июле 2018 «Контур» разделил первое место с «Яндексом» среди компаний-тяжеловесов.
«Контур» основали в Екатеринбурге, когда город еще назывался Свердловском. Но ИТ тогда и ИТ сейчас — две разные сферы. Все развивается со скоростью света, наследие и масштабы не всегда помогают в конкуренции.
Поэтому мы попытались разобраться, какой «Контур» на самом деле — древний динозавр или передовая технологическая компания — и поговорили с Александром Голубевым, отвечающим за разработчиков в компании.
Александр Голубев
Что делает СКБ «Контур»
— Андрей Михайлов, который стоял у истоков «Контура», рассказывал, что всё началось с продажи программ по учету зарплаты и труда. В начале 90-х время было тяжелым, и в «Контуре» занимались разными вещами. Даже продажей техники и принтеров.
Программы тогда делали десктопными, их писали на C++, Delphi, часто под нужды только одного определенного заказчика. Потом, конечно, все переписали и перевели в веб. Постепенно и всё лишнее отошло, а основное осталось до сих пор — учёт зарплаты и софт для бухгалтерии.
Правда, теперь это только одно из направлений. Мы делаем продукты для всех нужд бизнеса. Сертификаты, документооборот, электронная подпись, отчетность. Продуктов стало так много, что сосчитать, сколько их на самом деле — трудная задача. Оценки расходятся в диапазоне от 30 до 60. Просто из-за вопросов, а что считать одним продуктом.
Офис «Контура» в Екатеринбурге
— Но есть какой-то продукт-локомотив?
Долгое время им был «Контур.Экстерн». В начале 2000-х появилась возможность сдавать налоговую отчетность через интернет. И хотя интернета толком ни у кого не было, мы все равно сделали ставку на веб. И оказались правы: продукт выстрелил, и начался бурный рост компании.
Семь лет назад, когда я пришел, компания была раза в три меньше. Сейчас разработкой у нас занимается около тысячи человек. А тогда было человек триста.
— Трудно было справляться с ростом?
Почему было? Рост и сейчас продолжается. Людей, продуктов и клиентов становится все больше и больше. Мы на четверть прирастаем год от года. Масштабируем процессы, отказываемся от неработающих, придумываем новые. Видимо, как-то справляемся.
Нам нравится, что мы разрабатываем именно свои продукты. Люди в командах — программисты, аналитики, тестировщики — все относятся к продуктам, как своему детищу, предлагают идеи, улучшения. Нам не интересно делать заказы на внешку, которые не связаны с нашей основной работой — это не про «Контур».
О технологиях и языках
— У вас наверное еще высокие требования к качеству и чистоте кода, как это бывает в больших бизнесах. У разработчиков не возникает культа инструмента из-за этого?
— Когда в компанию приходит вчерашний или текущий студент с горящими глазами, у него больше приверженности к конкретному языку. Он его опробовал, у него что-то начало получаться, и он очень одухотворен этим. И конечно хочет работать и развиваться в одном направлении. Это хорошо на самом деле.
Команда программирующих зомби на хакатоне «Контура»
Но с опытом приходит понимание, что язык — это инструмент, а инструменты можно менять. Ты начинаешь развиваться с точки зрения построения архитектуры, использования алгоритмов, хранилищ, очередей, протоколов, API— всего, где язык не важен, а важны более высокоуровневые вещи.
Поэтому среди синиоров значительно меньше тех, кто фанатично предан одному языку.
— Я пробежался по требованиям ваших вакансий, и кажется вы реально используете всё, что существует.
— Ну да, не используем только совсем низкоуровневые вещи. На ассемблере в «Контуре» не пишут.
Большая часть серверного кода у нас пишется на C#. Есть немного Java, Go и Node.js в инфраструктуре и некоторых продуктах. Мобильные приложения — на Kotlin, Swift и C# (Xamarin). Все, что вокруг data science, пишем на Python и R, без них там никуда. В зависимости от задач используем подходящие реляционные, документные, колоночные или key-value хранилища данных: MS SQL Server, MariaDB, PostgreSQL, MongoDB, Cassandra, ClickHouse, Redis, Kafka, HDFS. Есть и собственные разработки: например, Kanso — распределённое отказоустойчивое хранилище данных с семантикой бинарного лога (похоже на Google GFS), Zebra — документная in-memory база данных, Echelon — распределённая отказоустойчивая очередь заданий. Мы много лет используем их в продакшне, и, возможно, однажды они появятся в опенсорсе.
Клиентский код пишем на TypeScript или JavaScript с Flow. Главный фреймворк — React, для которого у нас написана библиотека компонентов по интерфейсным Гайдам, но где-то еще используем Angular. А вот сказать однозначно, кто победил — TypeScript или JavaScript — пока нельзя. Борьба еще идет.
— Как ты сам думаешь?
— Поскольку я из бэкендеров, то склоняюсь к TypeScript (хотя конечно писал и на JS очень много, даже еще когда не было React). Человеку, привыкшему к статической типизации, TypeScript привычнее. В любом случае, почти весь код для фронтенда или для Node.js пишется с типами.
Мастер-класс на летнем Конфуре 2018 — внутренней конференции разработчиков «Контура»
Но в целом у меня отношение к языкам не религиозное. Какие инструменты удобнее для конкретных задач, те и надо использовать. Магистерскую я вообще на Erlang писал. В 2011-м году, когда я пришел в «Контур», на Эрланге даже был написан один продукт. Но когда его главный идейный вдохновитель ушел, с поиском специалиста на замену были проблемы. Поэтому переписали на проверенный С#.
— И как вы определяете, где какой язык будет использоваться?
У менеджеров разработки и тимлидов достаточно большая степень свободы, они сами вольны выбирать инструменты и технологии. Но поскольку продукт стартует не в вакууме, они обсуждают выбор с «соседями», более опытными коллегами, смотрят, могут ли найти спецов. Свобода есть, но не могу сказать, что мы каждый день экспериментируем с новыми языками. Нам нужны проверенные инструменты для промышленной разработки, чтобы потом можно было развивать и поддерживать собственные продукты.
У нас есть практика дизайн-ревью. Если ты хочешь запустить новый проект или внести серьезную поправку в текущий, ты оформляешь презентацию и собираешь встречу специального сообщества, где крутые инженеры дают тебе фидбэк.
Конечно, если ты решишь, что никто тебе не указ — ультиматумов и запретов не будет, зарплату не отнимут. Но, если команда вопреки всему решает выбрать спорную технологию, она должна быть готова к рискам. Проект может оказаться не совместим с частью инфраструктуры или в него нельзя будет интегрировать какую-то функциональность — тогда все почувствуют много боли.
Обычно все обсуждается. Месяц назад была идея писать один из новых сервисов на F#. Я в таких случаях стараюсь вести диалог, спрашиваю: «А почему именно F#? Где ты будешь искать людей?» В итоге убедили человека остаться на C#. То есть, убедить — да, приказать — нет.
— А ты сам пробовал писать на F#?
Нет, но ведь и в обсуждениях подобного рода я участвую не один. У нас есть инженерный совет: семь крутых инженеров. Это люди, отобранные исходя из историй успеха внутри компании. Они наработали авторитет во многих проектах. Ещё ребята занимаются проектами по развитию Управления разработки (это подразделение, объединяющее большинство разработчиков «Контура»).
— Вы пытались собрать в этом совете разнообразие стеков?
Разнообразие хороший поинт, но для нас не главный. Поскольку инженеры крутые, у них есть достаточный кругозор. Они пишут код на C#, но для них не будет проблемой разобраться в вопросах по Java.
Диверсификации в совете нет, но не надо думать, что все обсуждения идут только в нем. Кроме инженерного совета у нас есть профессиональные сообщества. Например, у фронтендов есть свой руководитель, свое коммьюнити с высокими скиллами. Решение о развитии фронтенда принимает гибридный коллектив, в том числе представитель инженерного совета.
Инструментарий
Большая часть команд использует YouTrack как трекер задач. В некоторых командах используют Trello и Jira. Код пишем в Visual Studio, Visual Studio Code, Rider, WebStorm и так далее. Много используем продукты JetBrains для разных задач.
В качестве CI-системы используем TeamCity, деплоим сервисы через Octopus в приватное облако под управлением собственной системы Houston или в Kubernetes. Метрики собираем через Graphite. Для алертов по метрикам используем Moira. Логи собираем, храним и просматриваем в ELK.
Ежедневное общение идет в Slack и Telegram. Есть Стафф — собственная внутренняя соцсеть. Там публикуются новости о продуктах, вакансиях, социальной жизни, о спортивных мероприятиях. Там же можно бронировать переговорки и писать статьи. Это становится популярным каналом обмена информацией. Все больше и больше вещей обсуждается в онлайне.
В последние годы мы разрабатываем инфраструктурные решения сразу на GitHub. Самый известный опенсорсный продукт — система для уведомлений о нештатных ситуаций Moira, кроме нас её используют в Avito и Яндекс.Деньгах. Самый масштабный — Восток. Это набор инструментов для разработки микросервисов на платформе .NET, который помогает им общаться друг с другом и автоматически собирает их логи, метрики и распределённые трассировки.
О структуре компании
Самый большой офис «Контур» находится в Екатеринбурге. С ростом компании нужно все больше сотрудников, поэтому компания постоянно расширяется. Офисы разработки уже есть в Новосибирске, Перми, Ижевске, Казани, Иннополисе, Ростове-на-Дону и Санкт-Петербурге. Причем инициатива об открытии новых офисов часто идет от самих сотрудников. Несколько крутых инженеров планировали переехать жить в Питер — тогда мы и открыли офис в этом городе.
Подавляющее большинство сотрудников работают в офисах, но поскольку команды могут быть распределены между городами, в этом году «Контур» решил открыться к найму удаленщиков. Мы ещё учимся работе в этом формате, и таких сотрудников становится всё больше.
«Контур» разделен на три больших направления — создание продуктов, продажи и работа с клиентами, внутренние службы. Отношения выстроены настолько горизонтально, насколько это возможно в компании из почти 10 тысяч человек: мы активно работаем над сохранением старых и появлением новых связей между сотрудниками.
В продуктовых командах работают сотрудники разных специализаций: программисты, тестировщики, аналитики, дизайнеры интерфейсов, маркетологи, эксперты, менеджеры… Новые стартапы пилит одна команда, выросшие продукты часто разделяются на несколько сервисов и разрабатываются силами нескольких подкоманд.
Команды независимы и автономны: руководители стараются не мешать им лишними инструкциями, бюрократией и протоколами.
У команд есть руководители с разными ролями. Тимлиды отвечают за качество разработки. Менеджер разработки, чаще всего бывший инженер, выстраивает процесс создания продукта. Менеджер проекта занимается не только разработкой, но и продажами, продвижением, маркетингом, общением с партнёрами. Есть еще руководители продуктового направления. Они принимают решения о запуске новых продуктов или расширении старых.
О найме
— К вам сложно попасть?
— Сложно, но можно. Есть, например, большая система стажировок для студентов, которые теперь проводятся круглый год. Этим летом, например, стажировались 140 студентов, большинство остались в компании.
— Я слышал про ваши гильдии собеседующих. Расскажешь, что это?
Это инженеры разных специальностей, которые участвуют в найме программистов. Например, для бэкенд-разработчиков они проводят технические собеседования в три или четыре этапа: проверяют умение писать код, который работает; умение пользоваться алгоритмами и структурами данных; умение создавать архитектуру. У мидлов и синиоров проверяют еще кругозор в технологиях.
В гильдию сейчас входит порядка 90 разработчиков. Чтобы попасть туда, нужно выбрать этапы, которые хочется проводить (код, алгоритмы, архитектура), и провести несколько собеседований в качестве «ведомого» (обычно собеседования проводят пары «ведущих» и «ведомых» инженеров). Пройдя этот отбор, человек попадает в пул гильдии собеседующих.
Мы считаем нормальным, если каждый ее участник раз неделю проводит собеседование. Так люди могут и заниматься своей работой, и вносить вклад в найм программистов.
Гильдия оценивает технический уровень кандидата и передает отчет мне или моим заместителям. Мы проводим финальное собеседование, проверяем скорее софт-скилы, насколько человеку важна ценность работы, насколько он может рефлексировать над своими ошибками.
Постерная секция на летнем хакатоне
— Такая система сделала процесс быстрее?
Безусловно стало быстрее и понятнее. Раньше существовал перечень приоритетов команд в виде рейтинга. Эйчар шел по нему сверху вниз и по очереди предлагал командам кандидата. В итоге одна команда могла с ним пообщаться и отклонить, другая пообщаться и отклонить, третья. Нельзя было понять, сколько будет собеседований у человека. Оценка технических скиллов тоже была размытой — команды уделяли внимание разным вещам.
Сейчас человек проходит четыре этапа и финальное собеседование минут на сорок. Через десять минут после него мы уже делаем оффер или отказываем.
Всё длится три, максимум четыре дня. Раньше матожидание было две-три недели.
— Для всех направлений набираете одинаково?
Нет, все эти этапы относятся в первую очередь к бэкендерам — шарпистам и джавистам. У фронтендеров эти этапы схлопнуты в одно большое собеседование.
Вообще, для нас важны не только технические скиллы у человека. Конечно, есть некая граница, технический минимум. Но важнее, сможет ли человек адаптироваться и развиваться. В некотором смысле, у наших разработчиков культ развития.
Люди без горящих глаз и желания развиваться нам не подходят. Даже если мы такого человека примем, скорее всего, не сработаемся.
— Новичок приходит. Что дальше?
Они попадают в Буткамп и там проходят адаптацию. Буткамп состоит из двух частей. Первая — обучение — длится две недели: три дня на знакомство с «Контуром» в целом, с продуктами, хозяйственными моментами — где кафе, где конференц-зал, погружение в культуру, традиции, праздники; ещё полторы недели на знакомство с технологиями и инструментами. Например, разработчики повторяют чистый код, обработку исключений, использование элементов функционального программирования, тестирование и TDD, SOLID, DI. Изучают, как устроена инфраструктура и общие сервисы, чтобы говорить на одном языке с другими разработчиками.
Стендап в офисе
Кроме обучения новички общаются с тимлидами, менеджерами разработки. Тимлиды и менеджеры могут начинать общение и сами, потому что это открытая информация — кто пришел с очередным набором. А набор в Буткамп случается каждые три недели.
В итоге, за эти две недели кандидат определяется, в какие команды он пойдёт на стажировку.
Стажировки — это уже второй этап. За время испытательного срока человек может побывать на нескольких стажировках. В среднем их бывает три, примерно по три недели в команде. А может выбрать одну команду сразу и остаться в ней.
— Относительно столиц, Екатеринбург — маленький город. Нет такого, что джуны приходят просто прокачаться перед переездом, а синиоры уезжают в солнечные страны?
— Да, люди не только приходят, но и уходят. «Контур» очень много вкладывает в образование, но никогда не привязывает людей, не заставляет подписывать контракты с какими-то обязательствами. Конечно, мы грустим когда люди уходят, но практически всегда поддерживаем связь дальше.
Есть крутые инженеры, которые ушли из «Контура» и работают теперь в Facebook, Amazon и Google.
Конечно, чтобы их удерживать, недостаточно плюшек на кухне и зарплаты побольше. Нужны прорывные задачи. У нас есть большие и высоконагруженные системы, сложные продуктовые задачи, важные опенсорсные проекты.
Мы следим за рынком и платим соответствующие ему зарплаты, чтобы не было таких ситуаций, когда человек приходит с конкурирующими оффером, а мы начинаем вертеться, как ужи на сковородке.
Про внутренние угоны сотрудников
Рабочее пространство в «Контуре»
Когда запускаются новые проекты, мы в первую очередь начинаем искать людей внутри. Внутренний найм чаще всего происходит кулуарно. Ко мне приходит менеджер и просит найти ему в команду кого-то, кому на своем месте не сидится. А бывает, что в «Контур» приходят устраиваться сразу целой командой, говорят: «Хотим работать на вас». Тогда я иду к руководителям направлений и говорю: «Расчехляйте бэклоги, доставайте отложенные продукты — появилась целая команда».
Но вообще тема с переходами между командами немного болезненная для «Контура». Это следствие того, что они во многом независимы друг от друга и персонал тоже набирают независимо. Конечно, иногда случается, что сотрудник переходит резко, без предварительных договорённостей. Разные руководители по-разному к этому относятся.
Кто-то спокойно — все таки человек продолжает приносить пользу компании. Кто-то более ревностно, говорит: «В команде времена тяжелые, а у меня ещё людей уводят». Кто-то говорит: «Я не прочь отдать, но поговорил бы сначала со мной. Не надо идти напрямую к сотруднику и подговаривать».
Обсуждение горизонтальной мобильности идет уже не первый год, точки зрения разные. Каждую можно понять. Я сам считаю, что лучше мы предложим человеку что-то внутри компании, чем отпустим за пределы.
Возможностей внутри компании очень много. Например, один продуктовый аналитик, психолог по образованию, увидел внутри «Контура» возможность работать по специальности: теперь у нас есть штатный психолог, который рассказывает другим о том, как менять свою работу.
Но вопрос, конечно, деликатный.
Как быть с выгоранием
Преобразование энергии — хакатон 2018
— Часто сталкиваетесь с выгоранием сотрудников?
Не скажу, что часто, но сталкиваюсь. Стараемся помогать найти себя. Даем возможности переходить между проектами, менять роль, обязанности. Можно встретиться или созвониться по скайпу с тем самым штатным психологом: он проконсультирует, как быть.
Порой мне кажется, что я и сам выступаю в роли такого психолога. Люди приходят пообщаться за жизнь, им важно просто быть услышанными, получить поддержку. Не всегда важны конкретные предложения о переходе или деловые решения — иногда важно просто участие.
— Ты сам лично выгорал?
Да, конечно. Это было относительно недавно, когда я вступил на роль руководителя управления разработкой. С начала года и до июня было выгорание в связи с переходом.
До этого я был менеджером в команде, а стал руководителем направления. Очень выросла цепочка обратной связи от того, что я делаю, до того, как компании приходит польза.
Когда я был программистом, было проще. Есть фича — закоммитили, зарелизили и готово. Менеджером разработки стало уже сложнее, но все равно — я все ещё в команде, у нас обновления, обсуждения, жизнь кипит. Я вижу, что сервис улучшается, пользователи дают фидбэк, все круто.
Сейчас, придя в руководство, я понимаю, что команд много, они релизят и релизят. Но моего душевного вовлечения в это нет, я не могу со стопроцентной уверенностью сказать, что я приложил к этому руку. Нет, не приложил — люди на местах сделали эти фичи, а я как-то уж больно высоко.
И мне было тяжело с этим справляться.
Александр Голубев на Конфуре
Но помогло осознавание, что я уже попадал в подобную ситуацию, пусть и меньшего масштаба. Тогда я отнёсся к проблеме, как к вызову. Окей, я не умею работать с задачами большого размера, когда нет быстрой обратной связи. Значит мне надо научиться.
Я справился благодаря тому, что изменил свое отношение, и начал больше внимания уделять продвижению глобальных инициатив, нежели погружения в текучку.
— А для чего вы проводили хакатон по играм? Это не для тех, кому стало скучно писать бизнес-софт?
Это просто фан, я вижу в этом элемент создания комфортной среды. Если человеку хочется участвовать в каких-то соревнованиях, надо ему помочь.
Но я не верю, что такой инструмент поможет с выгоранием. Вот человек на хакатоне игры пописал и понял, что это круто. Но мы же в компании не разрабатываем игры и не можем человеку предложить продолжать их делать, если ему так понравилось.
Просто когда в команде кончилась мана и надо топлива пополнить — ты подключаешься к активностям, и даже не обязательно к хакатонам. У нас два раза в год проходит Конфур — конференция разработчиков, и в её организацию вовлечено довольно много людей. Можно и для компании полезное сделать, и разнообразить свою деятельность. А ещё у нас каждый год у нас проходят спортивные мероприятия по всей стране. Конечно, конференции и состязания нужны, чтоб сплачивать, укреплять горизонтальные связи. Но, в какой-то степени, это способы снять напряжение.
Веселые вопросы
— Если ребята из «Яндекса»расскажут тебе про свой офигенный корпоратив, чем перед ними похвастаешься ты?
Награждение победителей на Конфуре
Я в целом не особо люблю хвастаться, кто круче группу на новый год привёз. Не к этому лежит душа. Я бы похвастался нашей конференцией, которая проходит каждые полгода. Там собираются разработчики из всех офисов.
С одной стороны есть и чем развлечься — традиционные «Что где когда», концерты и прочее — и большая рабочая программа, всякие мастер-классы. Инженеры устраивают хакатоны и участвуют в соревнованиях, например, много лет играют в ICFP Contest. Каждый может сделать доклад на конференции, провести митап. В этом году мы у нас было около тридцати митапов, соревнований и тренировок по машинному обучению.
Так что если я буду хвастаться, скажу, что мы не только тусовки тусуем, но и с работой совмещаем. Хотя я уверен, в «Яндексе» тоже такое есть. Не думаю, что это их впечатлит.
— Чувствуйте себя рок-звездами в Екатеринбурге?
А как это можно понять? Я считаю, что в целом у нас всё хорошо. На Bentley не ездим, но все, что нужно есть. Машина, квартира, люди ездят в отпуска в разные страны, живут хорошо. «Контур» в этом помогает, даже займы дает в сложных ситуациях. Так что рок-звездой себя не чувствую, а счастливым от того, что все в достатке — пожалуй, да.
— Как скоро софт заменит бухгалтеров и юристов?
Мы как раз думали о подобных вопросах, но единодушно сформулировать не смогли. Лично моё мнение — лет через десять профессии типа юристов и бухгалтеров очень сильно изменятся. Привычную часть, знание кучи разных правил возьмут на себя машины.
Бухгалтеры и юристы станут ближе к программистам и дата сайентистам. Задачей бухгалтера будет не проводки делать, а анализировать финансовые потоки. У юристов data science будет помогать в поиске ответов на вопросы, но эти вопросы надо будет правильно формулировать. Влияние человека все равно будет нужно, но людей в этих профессиях станет меньше. Зато квалификация от них потребуется выше.
— Если бы «Контур» был корпорацией из киберпанка, какой социальный строй он установил бы в своем городе?
Ну, наверное, ближе к демократии, может немного технократии. Точно не тоталитаризм. Власть народу!
— Когда в Екатеринбурге снесли башню, не было жалко?
Мое мнение — то, что стоит и не используется, нужно либо снести и построить что-то нужное, либо найти применение. В общем, чтобы не просто торчало и напоминало об ушедших днях.
Если старое отжило, его надо заменить новым.