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

👨‍💻 Герой: Алек­сандр Тре­гер, 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 — это гуд