«Я не успеваю писать код, но участвую во всех важных обсуждениях». Как работает руководитель разработки Яндекс.Практикума
«Я не успеваю писать код, но участвую во всех важных обсуждениях». Как работает руководитель разработки Яндекс.Практикума
Тысячи пользователей онлайн: как работать, когда у тебя высоконагруженный проект Кто такой технический директор? Почему он главный, но не пишет код?

👨‍💻 Герой: Алек­сандр Тре­гер, 33 года, Москва. Выпуск­ник МАТИ, факуль­тет инфор­ма­ци­он­ных технологий

🛠 Рабо­та: Руко­во­ди­тель служ­бы раз­ра­бот­ки Прак­ти­ку­ма. Рабо­та­ет в офи­се, 5/2. Обыч­но начи­на­ет в 11:00, закан­чи­ва­ет в 20:00

🧭 Рынок: Руко­во­ди­тель раз­ра­бот­ки в Москве: 595 вакан­сий, из них 38 — топ-менеджмент.

Сайт за 300$

Мой путь в раз­ра­бот­ку начал­ся ещё в шко­ле, как хоб­би. Мы изу­ча­ли Pascal, я пери­о­ди­че­ски оста­вал­ся после уро­ков в ком­пью­тер­ном клас­се, про­бо­вал что-то про­грам­ми­ро­вать. Потом позна­ко­мил­ся с C++.

🤔 Почи­тай­те: Поче­му в шко­ле до сих пор изу­ча­ют Pascal

Бли­же к стар­шим клас­сам дома появил­ся интер­нет, и я начал инте­ре­со­вать­ся, что под капо­том у раз­ных сай­тов, как они сде­ла­ны. Смот­рел исход­ный код и раз­би­рал­ся, как всё устро­е­но. Тогда было мало обу­ча­ю­щих мате­ри­а­лов, но мне уда­лось най­ти доку­мен­та­цию и фору­мы, и так я позна­ко­мил­ся с HTML, JS и PHP.

Тогда же, в послед­них клас­сах шко­лы, зара­бо­тал на этом пер­вые день­ги. Я часто бывал в одном интернет-кафе мое­го рай­о­на, и там мне по зна­ком­ству пред­ло­жи­ли сде­лать сайт для мест­ной локаль­ной сети. Запла­ти­ли 300$, раз­де­лил их с дизайнером.

Реально ли сейчас, ничего не зная, сделать сайт за деньги?

Вполне. Напри­мер, порог вхо­да в вёрст­ку крайне низ­кий. Порой слож­нее поль­зо­вать­ся «Вор­дом». Сайт мож­но свер­стать незна­чи­тель­ным набо­ром HTML-тегов вооб­ще без при­ме­не­ния CSS или не вла­дея совре­мен­ны­ми тех­ни­ка­ми. Нику­да не исчез­ла воз­мож­ность свер­стать сайт топор­но «на таб­ли­цах», как это дела­ли 20 лет назад, неис­ку­шён­ный заказ­чик вряд ли заме­тит разницу.

Череда первых работ

На послед­них кур­сах уни­вер­си­те­та устро­ил­ся на первую про­грам­мист­скую рабо­ту — по зна­ком­ству позва­ли в сеть интернет-магазинов. Я раз­ра­ба­ты­вал фронт и бэк, ещё и зани­мал­ся дизайном.

Потом рабо­тал в несколь­ких местах: в обра­зо­ва­тель­ном интернет-проекте; в ком­па­нии, кото­рая про­да­ва­ла метал­ло­про­кат и ило­сос­ную тех­ни­ку; в интернет-провайдере; в одной из попу­ляр­ных информационно-правовых систем. Вез­де задер­жи­вал­ся нена­дол­го, от одно­го до пяти меся­цев. Кого-то настиг кри­зис 2009 года, где-то не было воз­мож­но­сти для раз­ви­тия и ста­но­ви­лось скучно.

В нача­ле 2010 года устро­ил­ся в Авто.ру — пер­вое ста­биль­ное место рабо­ты. Там я про­ра­бо­тал пол­то­ра года, зани­мал­ся бэк-офисом и реклам­ным движком.

Переход в сервис знакомств

Через пол­то­ра года я попал на собе­се­до­ва­ние в сер­вис зна­комств Badoo. Рабо­тать в Авто.ру было вполне ком­форт­но, но на новом месте пред­ло­жи­ли зна­чи­тель­но более инте­рес­ные усло­вия. В ито­ге про­ра­бо­тал там 7 лет, при­шёл PHP-разработчиком и успел вырас­ти до тим­ли­да неболь­шой команды.


Рабо­чее место в Badoo. Я слева 

7 лет в Badoo

В Badoo тогда было несколь­ко команд: бил­линг, плат­фор­ма, антис­пам и дру­гие. Я рабо­тал на пере­до­вой — в коман­де Feature-team, кото­рая зани­ма­лась про­дук­то­вой раз­ра­бот­кой. К нам при­хо­ди­ли мене­дже­ры про­дук­та и гово­ри­ли, какая им нуж­на функ­ци­о­наль­ность: новая стра­ни­ца, сер­вис или пись­мо. Или про­си­ли вне­сти изме­не­ния в то, что уже было.

Одной из базо­вых задач нашей коман­ды было хра­не­ние и под­го­тов­ка дан­ных, из кото­рых фор­ми­ру­ют­ся кли­ент­ские стра­ни­цы. Пона­ча­лу мы встав­ля­ли эти дан­ные в HTML-шаблоны и отда­ва­ли в бра­у­зер. Зву­чит про­сто, но и в этом были нюан­сы: сто­ит учесть, напри­мер, что Badoo под­дер­жи­ва­ет 40 язы­ков. Что­бы сфор­ми­ро­вать на каж­дом из них лек­си­че­ски пра­виль­ную фра­зу вида «шатен, ростом 170 см, с голу­бы­ми гла­за­ми», было напи­са­но вну­ши­тель­ное коли­че­ство кода.

Со вре­ме­нем Badoo пре­вра­тил­ся в муль­ти­плат­фор­мен­ный сер­вис: у нас была вер­сия для веба, для мобиль­ных устройств, при­ло­же­ния для iOS, Android и Windows Mobile. Поми­мо основ­но­го при­ло­же­ния Badoo, появи­лись дру­гие со сво­ей ауди­то­ри­ей, но на той же плат­фор­ме: Bumble, Chappy и Lumen. Ещё были white label при­ло­же­ния с той же ауди­то­ри­ей, но дру­гим интер­фей­сом: HotOrNot, Huggle и Blendr. Про­цесс раз­ра­бот­ки пре­об­ра­зил­ся. Мы нача­ли раз­ра­ба­ты­вать API с исполь­зо­ва­ни­ем Google Protobuf, доба­ви­лась под­держ­ка вер­сий раз­лич­ных кли­ен­тов, научи­лись делать A/B-тесты.

В Badoo я участ­во­вал в раз­ра­бот­ке боль­шин­ства круп­ных и важ­ных про­ек­тов, застал ком­па­нию в нача­ле её стре­ми­тель­но­го роста, при­ни­мал уча­стие в ста­нов­ле­нии мно­гих рабо­чих про­цес­сов. Напри­мер, в пере­хо­де с SVN на Git, транс­фор­ма­ции сай­та в Single Page Application, инте­гра­ции с аме­ри­кан­ски­ми при­ло­же­ни­я­ми HotOrNot и Fiesta.

Специфика большого проекта

Badoo — попу­ляр­ный сер­вис с боль­шой ауди­то­ри­ей. Это клас­си­че­ский хайлоад-проект — на систе­му посто­ян­но идёт высо­кая нагруз­ка, поль­зо­ва­те­ли лай­ка­ют друг дру­га, обща­ют­ся, реги­стри­ру­ют­ся, загру­жа­ют фото­гра­фии. Цена ошиб­ки в таком слу­чае вели­ка, но резуль­тат того сто­ит: дела­ешь про­дукт, кото­рым поль­зу­ют­ся мил­ли­о­ны людей.

👉 При­мер. Одним из зна­чи­мых про­ек­тов, где чув­ству­ет­ся мас­штаб сер­ви­са, была систе­ма груп­по­вых уве­дом­ле­ний. Пока поль­зо­ва­тель отсут­ству­ет в сер­ви­се, у него может нако­пить­ся мно­го собы­тий: появи­лась новая пара, кто-то посе­тил про­филь, при­шло сооб­ще­ние. Поль­зо­ва­те­лю не нра­вит­ся, когда в почту валит­ся куча писем, так что мы научи­лись их объ­еди­нять. В ито­ге при­хо­дит не десять сооб­ще­ний, а одно, в кото­ром десять новостей.

Для рабо­ты с уве­дом­ле­ни­я­ми раз­ра­бо­та­ли отдель­ную систе­му управ­ле­ния база­ми дан­ных. Это при­ло­же­ние, кото­рое хра­нит мас­сив собы­тий и в нуж­ный момент отправ­ля­ет новую пар­тию уве­дом­ле­ний. Это одна из самых нагру­жен­ных систем в Badoo: в каж­дом из двух дата-центров на момент запус­ка рабо­та­ло по 4 таких при­ло­же­ния, что­бы справ­лять­ся с нагруз­кой — на пике тогда дохо­ди­ло до 25 тысяч запро­сов в секунду.

У боль­ших про­ек­тов обыч­но есть соб­ствен­ная инфра­струк­ту­ра, в кото­рой нуж­но разо­брать­ся. В неболь­ших ком­па­ни­ях часто исполь­зу­ют­ся гото­вые реше­ния и при­ни­ма­ют­ся все их недо­стат­ки. Круп­ные же могут поз­во­лить создать для себя новую тех­но­ло­гию. Это повы­ша­ет порог вхо­да для новых раз­ра­бот­чи­ков, и с этим нуж­но мирить­ся. С дру­гой сто­ро­ны, удач­ные прак­ти­ки и тех­но­ло­гии могут лег­ко стать вос­тре­бо­ван­ны­ми и вне этой ком­па­нии, осо­бен­но если она актив­но под­дер­жи­ва­ет opensource.

Порог вхо­да в раз­ра­бот­ку Badoo нель­зя назвать про­стым: нуж­но дер­жать в голо­ве кучу зави­си­мо­стей и осо­бен­но­стей архи­тек­ту­ры, боль­шую нагруз­ку и объ­ё­мы хра­ни­мой инфор­ма­ции. Пони­мать, как пра­виль­но полу­чать и обра­ба­ты­вать данные.

Собственный фреймворк

Я был авто­ром ново­го PHP-фреймворка Badoo. Он был нужен, что­бы упро­стить созда­ние стра­ниц сай­та, в том чис­ле быст­ро из короб­ки делать мобиль­ные вер­сии, а так­же изба­вить­ся от высо­кой свя­зан­но­сти кода.

Начи­на­ю­щим про­грам­ми­стам: что такое фрейм­вор­ки и библиотеки

Инте­рес­ный опыт: нуж­но было собрать такой фрейм­ворк, кото­рый не отпуг­нёт раз­ра­бот­чи­ков и будет сов­ме­стим со ста­рым кодом. Поэто­му мы реши­ли создать что-то своё, а не пере­хо­дить на гото­вое реше­ние. Ста­ра­лись для сво­их: что­бы им было удоб­но раз­ра­ба­ты­вать, тести­ро­вать и рефакторить.


Моё зна­ком­ство с Mac нача­лось с рабо­че­го ноут­бу­ка в Badoo. Пора­бо­тав на нём, я понял, что MacOS гораз­до удоб­нее для раз­ра­бот­ки, чем Windows и Linux 

Из разработчика в тимлиды

🤔 В тему: кто такой тимлид

Послед­ние два года в Badoo я руко­во­дил неболь­шой груп­пой раз­ра­бот­чи­ков. Мы зани­ма­лись про­ек­том, свя­зан­ным с рекла­мой: было мно­го рабо­ты по бил­лин­гу, инте­гра­ции с соц­се­тя­ми и вза­и­мо­дей­ствию с пла­тёж­ны­ми систе­ма­ми. К тому момен­ту я уже дав­но инте­ре­со­вал­ся, как пра­виль­но управ­лять коман­дой и выпол­нять мене­джер­ские функ­ции, читал соот­вет­ству­ю­щие кни­ги и ста­тьи, поэто­му эта роль для меня была изна­чаль­но понят­на и я осо­зна­вал, что нуж­но делать.

Мне обе роли нра­вят­ся, и раз­ра­бот­чи­ка, и руко­во­ди­те­ля. Кодить — увле­ка­тель­ный про­цесс, от это­го не уйдёшь. Но и в руко­вод­стве есть свои пре­ле­сти, когда ты сила­ми боль­шо­го чис­ла людей можешь делать боль­шие про­ек­ты. Когда у тебя есть коман­да — это кру­тое ощу­ще­ние: «Ты не один, вме­сте вы може­те сде­лать намно­го больше».

Переход в Яндекс

Со вре­ме­нем у меня появи­лось ощу­ще­ние, что в Badoo я достиг потол­ка: ска­зал­ся узкий стек тех­но­ло­гий, не хва­та­ло раз­ви­тия. Так­же повли­я­ла сме­на при­о­ри­те­тов раз­ви­тия ком­па­нии. Поэто­му я начал смот­реть на пред­ло­же­ния на рын­ке. В ито­ге ока­зал­ся в про­ек­те с рабо­чим назва­ни­ем «Яндекс.Навыки», кото­рый поз­же пре­об­ра­зо­вал­ся в Практикум.

Когда я при­шёл, в коман­де было два раз­ра­бот­чи­ка, один фронт и один бэк. Они уже сде­ла­ли про­то­тип пер­во­го тре­на­жё­ра на Ruby, и сто­я­ла зада­ча на его осно­ве сде­лать бое­вую вер­сию. Мы сле­до­ва­ли про­дук­то­во­му бэк­ло­гу рели­за, кото­рый к тому вре­ме­ни был уже сформирован.

Пер­вое вре­мя я актив­но вни­кал во внут­рен­нюю инфра­струк­ту­ру Яндек­са и участ­во­вал в раз­ра­бот­ке бэкен­да на Django. Мы добав­ля­ли новые моде­ли, про­ек­ти­ро­ва­ли базу дан­ных: про­фес­сии, кур­сы, уро­ки, зада­ния, сохра­не­ние реше­ний, вычис­ле­ние про­грес­са сту­ден­та. С ростом коман­ды у меня нача­ло при­бав­лять­ся мене­джер­ских функ­ций и на код оста­ва­лось всё мень­ше времени.

Из тимлида в руководителя службы

Коман­да посте­пен­но вырос­ла до 10–12 чело­век, ста­ло ещё боль­ше внут­рен­них заказ­чи­ков. Мене­джер­ской рабо­ты ста­ло зна­чи­тель­но боль­ше, чем тех­ни­че­ской. Мой фокус сме­стил­ся от про­грам­ми­ро­ва­ния к орга­ни­за­ции коман­ды, управ­ле­нию про­цес­са­ми, боль­ше­му погру­же­нию в про­дукт и нала­жи­ва­нию вза­и­мо­дей­ствия с дру­ги­ми отделами.

У руко­во­ди­те­ля служ­бы гораз­до боль­ше раз­но­об­раз­ных кон­тек­стов, чем у раз­ра­бот­чи­ка. Я не успе­ваю писать код и не зани­ма­юсь мик­ро­ме­недж­мен­том, но участ­вую во всех важ­ных обсуж­де­ни­ях и про­во­жу ревью архи­тек­тур­ных решений.

👉 Одна из моих глав­ных задач — под­дер­жи­вать ком­форт­ную атмо­сфе­ру в кол­лек­ти­ве и рабо­тать с талан­та­ми. Зача­стую поста­вить цель раз­ра­бот­чи­кам не так-то про­сто. Кому-то боль­ше под­хо­дят гло­баль­ные архи­тек­тур­ные зада­чи — зако­пать­ся в код, пере­брать всю систе­му. Кому-то — мене­джер­ские, напри­мер, дого­во­рить­ся со все­ми и пра­виль­но выстро­ить рабо­ту. И тут надо быть очень акку­рат­ным, что­бы вер­но напра­вить чело­ве­ка и помочь ему с ростом, а не вогнать его в уныние.

Инте­рес­но, что софт, кото­рый я исполь­зую как руко­во­ди­тель, не силь­но поме­нял­ся: Яндекс.Трекер для задач, Trello для заме­ток, WebStorm и PyCharm для кода, чаты в Telegram. Но намно­го актив­нее стал исполь­зо­вать кален­дарь — тако­го коли­че­ства встреч рань­ше не было.


Домаш­нее рабо­чее место руко­во­ди­те­ля служ­бы разработки 

Работа в Практикуме

В Прак­ти­ку­ме сей­час око­ло 20 раз­ра­бот­чи­ков: две коман­ды зани­ма­ют­ся фрон­том, одна — бэком, неболь­шая груп­па тести­ро­ва­ния. Все раз­ра­бот­чи­ки в том чис­ле зани­ма­ют­ся девоп­сом: у нас нет выде­лен­ных систем­ных адми­ни­стра­то­ров, поми­мо тех, что под­дер­жи­ва­ют внут­рен­ние облака.

В каж­дой коман­де есть свой тим­лид и свои про­цес­сы. Так что я совсем не лезу в мик­ро­ме­недж­мент: не гово­рю нико­му, какую брать зада­чу и как её решить.

У нас нет выде­лен­ных про­ект­ных мене­дже­ров в раз­ра­бот­ке, их роль на себя берут раз­ра­бот­чи­ки, кото­рым это инте­рес­но. Для них это такая точ­ка роста — не толь­ко пишут код, но и могут рас­ши­рить свою зону ответ­ствен­но­сти: обща­ют­ся с про­дак­та­ми, деком­по­зи­ру­ют зада­чи, сле­дят за жиз­нен­ным цик­лом проектов.

«Раз­ра­бот­чи­ки могут взять роль про­ект­ных мене­дже­ров. Для них это точ­ка роста» 

Мы ста­ра­ем­ся раз­ра­ба­ты­вать реше­ния, кото­рые мож­но исполь­зо­вать мно­го раз. Напри­мер, наша плат­фор­ма поз­во­ля­ет быст­ро созда­вать кур­сы и добав­лять новые интер­ак­тив­ные тре­на­жё­ры раз­но­го пла­на. Это даёт воз­мож­ность в сжа­тые сро­ки соби­рать новые про­фес­сии и начи­нать обу­че­ние сту­ден­тов — не нуж­но раз­ра­ба­ты­вать каж­дый раз с нуля.

Я все­гда под­дер­жи­ваю ини­ци­а­ти­вы кол­лег. Мы лег­ко можем при­ду­мать что-то за нефор­маль­ным раз­го­во­ром на кухне и взять это уже в сле­ду­ю­щий спринт. На одном из моих пер­вых мест рабо­ты я столк­нул­ся с совер­шен­но про­ти­во­по­лож­ным отно­ше­ни­ем к ини­ци­а­ти­вам и твор­че­ско­му под­хо­ду, кото­рый я про­яв­лял, поэто­му все­гда очень ценю, когда ребя­та при­но­сят свои идеи и предложения.

Что­бы все были в кур­се, как дела в раз­ра­бот­ке, каж­дая коман­да про­во­дит еже­днев­ные стен­да­пы по 15 минут. Еже­не­дель­но про­во­дим встре­чи по теку­щим и буду­щим про­ек­там. В кон­це сприн­тов про­во­дим ретро­спек­ти­ву и обсуж­да­ем, что мож­но изме­нить в про­цес­сах. У всей коман­ды Прак­ти­ку­ма ещё есть регу­ляр­ное демо, где все пока­зы­ва­ют резуль­та­ты за послед­нее время.


Кам­пус Яндек­са в Сочи — коман­да Прак­ти­ку­ма на экс­кур­сии в Абха­зии. Фото из хол­ла забро­шен­ной гостиницы 

Развитие и перспектива

Пре­лесть IT в том, что все­гда есть куда раз­ви­вать­ся. Это настоль­ко боль­шая сфе­ра, что быть спе­ци­а­ли­стом во всём невоз­мож­но. Я, напри­мер, силён в раз­ра­бот­ке, но не так силён в data science. Тут у меня огром­ное поле для роста.

Есть воз­мож­но­сти для раз­ви­тия и в про­ек­тах, кото­рые мы дела­ем. Наши заказ­чи­ки поль­зу­ют­ся инстру­мен­та­ми, кото­рые было бы здо­ро­во заме­нить или дора­бо­тать, и мы им пред­ла­га­ем своё реше­ние. Напри­мер, дела­ем свою удоб­ную CMS и про­дви­ну­тые диа­грам­мы Ган­та, что­бы улуч­шить общее планирование.

В сво­бод­ное вре­мя я ста­ра­юсь под­тя­ги­вать недо­ста­ю­щие навы­ки. В том чис­ле изу­чаю наши кур­сы, недав­но под­тя­нул зна­ния по Node.js. Полу­ча­ет­ся двой­ная поль­за: полу­чаю новые зна­ния и отправ­ляю коман­де баг-репорты.

Поче­му Node.js — это гуд