<-- ✦ -->
Через час, когда Минхо вышел в общую зону за водой, он заметил Джисона, сидящего за свободным столом рядом с его секцией. Стажёр впился взглядом в монитор, на котором была открыта вики, его пальцы летали по клавиатуре с пугающей скоростью. Рядом стояла кружка с дымящимся кофе — откуда он нашел сироп? — и открытая пачка чипсов. Минхо прошел мимо, стараясь не смотреть. Но краем глаза уловил, как Джисон на секунду оторвался от экрана, поймал его взгляд и подмигнул. Просто подмигнул. Без всякой причины. Минхо ускорил шаг, чувствуя, как за ушами становится жарко. В своей переговорной он закрыл стеклянную дверь и прислонился к прохладной стене. «Это будут долгие полгода», — подумал он, глядя на свой идеально организованный стол, который почему-то казался теперь слишком пустым. Рядом не хватало второй кружки. Которая бы ему была, конечно, совершенно не нужна. Он сел за стол, открыл чат в корпоративном мессенджере и набрал сообщение Чонсу:minho_lee: «Я ненавижу стажёров».
Ответ пришел через минуту: pm_chansu: «Я видел, как ты на него смотрел. Не ври» Минхо убрал телефон и уставился в монитор, где на рабочем столе было открыто тестовое задание Хан Джисона. Он прочитал его еще раз. Код был чистым, логичным, с неожиданными, но элегантными решениями. И в комментариях, среди технических пояснений, была одна странная строчка:«// знаю, это можно сделать проще, но красота кода — это тоже архитектура. правда ведь? :р»
Минхо смотрел на этот смайлик, и где-то глубоко в нем, там, где не было места для ошибок и импровизации, что-то неуловимо сдвинулось с привычной орбиты. Он закрыл файл, открыл пул-реквест Чанбина и начал писать замечания. Работа, знакомая, предсказуемая, безопасная. Но перед глазами всё ещё стояла чужая кружка с дымящимся кофе — тот самый латте с ореховым сиропом, который Минхо принципиально считал детским напитком, недостойным взрослого разработчика. И почему-то это вызывало раздражение. Или, может быть, что-то другое, чему он пока не хотел подбирать название.<-- ✦ -->
Вводный тренинг для новых сотрудников проходил в конференц-зале на шестом этаже — помещении с такими толстыми стенами, что внутри не ловила сотовая связь, а воздух, казалось, здесь не проветривали с момента основания компании. Хан Джисон сидел на пластиковом стуле, который был создан специально для того, чтобы причинять боль, и смотрел, как на экране сменяют друг друга слайды с корпоративными ценностями. Пять ценностей. Пять. Он уже сбился со счета, сколько раз за последние полтора часа ему объясняли, что в этой компании важен каждый и результат превыше процесса. — ...и поэтому мы не используем сторонние библиотеки без согласования с архитектурным комитетом, — монотонно вещал HR-менеджер, женщина в безупречном жакете и с голосом, который мог убаюкать даже самый активный сервер. — Это обеспечивает единообразие кодовой базы и снижает риски при интеграции. Джисон сделал вид, что записывает что-то в блокнот. На самом деле он рисовал схематичный рисунок, который должен был изображать Минхо, но пока получался просто злой смайлик с бровями домиком. Он добавил ему чашку кофе и задумался: добавить сироп или нет? Судя по тому, как его новый тимлид отреагировал на утренний разговор, сироп там не пил никто. И вообще, кофе в той переговорной был, судя по всему, делом сугубо личным. Пальцы сами потянулись к телефону, который лежал на столе экраном вниз. Правила тренинга запрещали пользоваться, но Джисон быстро глянул на уведомления. Ничего важного. Он уже собирался убрать телефон, когда краем глаза заметил, как HR-менеджер окидывает взглядом его сторону. Пришлось снова сделать заинтересованное лицо и кивнуть в ответ на что-то про кросс-функциональное взаимодействие. Внутри нарастала знакомая тоска. Джисон не любил правила. Не любил, когда ему объясняли очевидное. Не любил сидеть в душных комнатах и слушать про миссию компании, которую всё равно через квартал поменяют после очередного ребрендинга. Он здесь был не поэтому. Джисон пришел сюда за деньгами — честно, без дураков. И за доступом к технологиям, которых не было в университетской лаборатории. Проект, который они с Феликсом начали еще на первом курсе, требовал мощностей, а покупать свой кластер за такие деньги было нереально. Поэтому он разослал резюме в пять мест и выбрал то, где предложили самый интересный стек и самую нелепую зарплату для стажёра. А ещё — где оказался этот Ли Минхо. Джисон поставил ручку и откинулся на спинку стула, вспоминая утреннюю встречу. Про него говорили разное. В университете ходили слухи, что Минхо — гений, которого переманили из крупной корпорации, что он сам переписал ядро их системы с нуля, что его код считается эталонным. Старшекурсники, которые проходили здесь стажировку, рассказывали, что Минхо — перфекционист до мозга костей, что он не улыбается, не пьет на корпоративах и заставляет переписывать код три раза, пока каждая строчка не станет идеальной. Для Джисона это звучало как описание его личного ада. Он привык работать быстро, грязно, на интуиции. Его код напоминал уличную импровизацию — не всегда красивую, но всегда работающую. Преподаватели говорили, что у него нестандартное мышление и пренебрежение к академическим стандартам. Феликс говорил, что он просто ленивый. — ...и последний блок: корпоративная культура и коммуникация, — HR-менеджер переключила слайд, и на экране появилась схема с разноцветными кружочками. — Важно помнить, что мы — одна команда. Любые конфликты решаются через конструктивный диалог. Уважение к коллегам — основа нашей работы. Джисон почувствовал, как уголок его губы дернулся. Он представил лицо Минхо, когда тот услышал про сироп. Конструктивный диалог. Интересно, если бы он спросил у тимлида, можно ли ему пользоваться его кружкой, это считалось бы конструктивным диалогом? Или уже актом войны? Он взял кружку Минхо сегодня утром, потому что забыл свою. И потому что хотел посмотреть на реакцию. Реакция превзошла ожидания. Минхо смотрел на него так, будто Джисон не кружку взял, а залил кофе в системный блок. Холодно, сдержанно, но в глазах — целый пожар. Джисон это заметил. Он вообще многое замечал, когда хотел. — Есть вопросы? — голос HR-менеджера вырвал его из размышлений. Зал молчал. Кто-то из стажёров — парень с кнопкой на рубашке, которую он явно надел специально для сегодняшнего дня — поднял руку и спросил про корпоративный транспорт. Джисон ждал, когда закончат про транспорт и парковку, а потом всё-таки поднял руку. — Да, какой у вас вопрос? — HR-менеджер указала на него. — У нас в офисе есть кофемашина, — сказал Джисон, и по залу прокатился легкий смешок. — Вопрос про сиропы. Сейчас там только ванильный и шоколадный. Будут ли новые вкусы? Например, ореховый? Или мы должны закупать их сами? На лице HR-менеджера на секунду отразилась растерянность. Она явно не ожидала, что вопросы про корпоративную культуру сведутся к ассортименту кофейных добавок. — Это... — она замялась, — я уточню у администратора. Но в целом, да, если есть запрос от сотрудников, мы стараемся его удовлетворить. Забота о комфорте — это тоже часть нашей философии. Джисон кивнул и сел обратно, чувствуя на себе взгляды остальных стажёров. Кто-то улыбался, кто-то качал головой. Ему было всё равно. Он получил ответ, и теперь у него был легальный повод через пару недель спросить, как продвигается вопрос с ореховым сиропом. Тренинг закончился через полчаса. Джисон собрал вещи и вышел в коридор, на ходу открывая карту этажа в телефоне. Секция разработки была на четвёртом, в крыле B. До летучки оставалось десять минут — если не заблудится в этом лабиринте из переговорок и кулеров, он успеет. Он уже свернул в нужный коридор, когда телефон завибрировал. minho_lee: «Ты где? Жду на летучке через 10 минут. Не опаздывай» Джисон посмотрел на время. Он прибавил шаг. В голове крутилось: Минхо ждёт. Не просто «летучка через десять», а «я жду». И это «не опаздывай» прозвучало не как просьба, а как приказ. Или предупреждение. Джисон почти бежал по коридору, ловя взглядом номера переговорок, и думал: интересно, сколько стажёров до него опоздали к Минхо на первую летучку. И что с ними случилось потом.<-- ✦ -->
Минхо сидел в переговорной, когда Джисон влетел внутрь с видом человека, который только что пробежал стометровку. Стажёр тяжело дышал, волосы растрепались ещё сильнее, на лбу выступила испарина. Но он успел. За секунду до назначенного времени. — Я... — Джисон выдохнул, — вовремя? Минхо посмотрел на часы. Потом на него. — Семь секунд в запасе, — сказал он ровно. — Садись. В переговорной уже сидели трое. Джисон мельком видел их утром в секции разработки, но сейчас, когда они все смотрели на него, он почувствовал себя экспонатом в террариуме. Первым в поле зрения попался парень, который занял место во главе стола — прямо напротив Минхо. Широкоплечий, с цепким взглядом, который ощупывал Джисона с такой же тщательностью, с какой Минхо, наверное, проверял пул-реквесты. Он сидел расслабленно, откинувшись на спинку стула, но в этой расслабленности чувствовалась сила — как у человека, который может в любой момент собраться и переписать половину системы, если потребуется. На столе перед ним стояла огромная кружка с чёрным кофе, такой же, как у Минхо. На кружке было написано: «Бэкенд — это просто». — Это Чанбин, — Минхо указал на него. — Ведущий разработчик. Отвечает за бэкенд. Чанбин кивнул, и в этом кивке не было ни приветливости, ни враждебности. Просто констатация факта: «я тебя заметил, продолжай». Джисон кивнул в ответ, чувствуя, что этого человека лучше не бесить. Рядом с Чанбином сидела девушка, которая смотрела на Джисона с таким откровенным любопытством, что ему захотелось проверить, не прилипло ли к щеке что-нибудь от чипсов. Она держала телефон под столом и, когда Джисон влетел в переговорную, быстро сунула его в карман — с видом человека, который только что что-то допечатывал и очень не хотел, чтобы это заметили. В уголках её губ играла усмешка, которая говорила: «о, этот стажёр будет веселее, чем я думала». — Соён, — представил Минхо. — Тоже фронтенд. Будет делать проект вместе с тобой. — Привет, — сказала Соён, и в её голосе послышалась лёгкая насмешка — то ли над ситуацией, то ли над тем, как Джисон влетел в переговорную. — Слышали про твоё тестовое. Директор говорил о нём полчаса на планерке. Джисон не понял, комплимент это или предупреждение, и решил просто улыбнуться в ответ. Третий — парень с идеально выправленной спиной и аккуратной стрижкой, которая, казалось, была сделана специально к первому рабочему дню. Он сидел с блокнотом, куда уже успел записать что-то ручкой — аккуратно, с подзаголовками и, судя по всему, маркерами разных цветов. Когда Джисон плюхнулся на стул, Минджэ (как выяснилось, его звали Минджэ) посмотрел на него с лёгким недоумением, будто не понимал, как можно так громко дышать в помещении. На его рубашке не было ни складки, а на лице — ни тени сомнения в том, что он здесь делает. — Всем остальным представишься позже, — закончил Минхо и развернул ноутбук к проектору. — Начнем. Джисон плюхнулся на свободный стул, стараясь дышать ровнее. Минхо вывел на экран список задач. — У нас есть три задачи на ближайшие две недели. Джисон слушал вполуха, разглядывая комнату и сидящих в ней. Маленькая, душная, с вечно работающим кондиционером, который дул прямо в спину. Стеклянные стены делали её похожей на аквариум, а всех сидящих внутри — на рыбок, за которыми наблюдают. Чанбин слушал Минхо с сосредоточенным видом, иногда кивал. Когда Минхо упомянул про легаси-модуль, Чанбин поморщился — едва заметно, но Джисон поймал эту реакцию. Похоже, у этого модуля была репутация. Соён что-то быстро печатала в телефоне, спрятав руки под стол. Палец скользил по экрану с такой скоростью, что Джисон заподозрил: она не заметки пишет. Интересно, кому и что она там строчила? Минджэ сидел с идеально прямой спиной и записывал каждое слово Минхо в блокнот. Карандаш двигался ровными строчками, без помарок. Джисон заглянул в блокнот через стол и увидел, что Минджэ уже оформил заголовок: «План работ на период 15–29 октября». Под ним — три пункта с подпунктами, аккуратно пронумерованными. Даже дедлайны были записаны с пометкой «согласовать». Джисон почувствовал укол совести — у него в рюкзаке валялся мятый блокнот, в котором он утром набросал график работы кофемашины и злой смайлик. — Первую задачу делают Минджэ и Соён, — продолжал Минхо. — Вторую — Чанбин. Третью... — он сделал паузу и посмотрел прямо на Джисона. Тот выпрямился, чувствуя, как взгляды всех троих скрещиваются на нём. — ...делает Хан Джисон. Под моим контролем. Соён подняла бровь, её палец замер над экраном телефона. Чанбин перевёл взгляд с Минхо на Джисона и обратно — в его глазах мелькнуло что-то вроде интереса. Минджэ аккуратно записал в блокнот: «Джисон — легаси, под контролем тимлида», и подчеркнул слово «контролем» двумя линиями. Джисон сглотнул. Легаси-модуль. Под контролем Минхо. В его голове это звучало как приговор, но где-то глубоко внутри шевельнулось другое чувство — азарт. — Рефакторинг, — Минхо переключил слайд, и на экране появилась схема старой архитектуры, густо утыканная красными пометками. — Это модуль, который писался пять лет назад под другие требования. Сейчас он тормозит всю систему. Нужно переписать его с нуля, сохранив обратную совместимость. — С нуля? — переспросил Джисон, вглядываясь в схему. — А смысл тогда в рефакторинге? Это же полная переработка. — Смысл в том, — Минхо говорил чётко, быстро, с той интонацией, которая не оставляла пространства для возражений, — что старый код — это технический долг, и я не хочу, чтобы ты его копировал. Легко накостылять поверх существующего. Сложно понять логику и пересобрать заново. — Он помолчал, давая словам осесть. — Завтра в девять у меня будет время. Приходи с вопросами. Чанбин усмехнулся — коротко, беззлобно, но вполне определённо. Соён прикрыла рот рукой, но глаза её смеялись. Минджэ записал в блокнот: «Джисон — завтра 9:00». — Понял, — кивнул Джисон. Внутри кольнуло. Не от того, что его поймали на невнимательности — это было ожидаемо. А от того, как Минхо это сделал. Без унижения, без попытки выставить его дураком. Просто констатировал факт: он не слушал. И предложил помощь. Завтра. В девять. — Вопросы по задачам есть? — спросил Минхо, обводя взглядом комнату. Чанбин покачал головой. Соён подняла руку и спросила про доступы к тестовой среде — технический, сухой вопрос, который Минхо закрыл в двух словах. Минджэ уточнил дедлайн по аутентификации и аккуратно записал ответ. — У меня есть, — Джисон поднял руку. Все посмотрели на него. — Слушаю. — Вы сказали, что у нас есть корпоративный чат для вопросов. А если вопрос срочный? Можно писать вам лично? Или вы предпочитаете, чтобы через общий канал? На лице Минхо промелькнуло что-то, похожее на удивление. Он явно ожидал технического вопроса, а не этикетного. — В личные можно, — ответил Минхо после паузы. — Но сначала проверь вики. И погугли. Я не отвечаю на вопросы, ответ на которые можно найти за три минуты. — А если ответа нет в вики? — не унимался Джисон. Соён тихо хмыкнула и снова потянулась к телефону. Чанбин покачал головой, но без осуждения — скорее с неверием в наглость этого парня. — Тогда пиши. — В голосе Минхо прорезалась лёгкая усталость. — Ещё вопросы? Джисон покачал головой и откинулся на спинку стула. Он получил, что хотел: легальный доступ к личному чату тимлида. Теперь можно будет писать ему напрямую. Не всегда, конечно, и не по пустякам. Но знать, что такая возможность есть, уже было маленькой победой. Когда все начали собираться, Соён задержалась у выхода и, проходя мимо Джисона, тихо сказала: — Ты либо очень смелый, либо очень тупой. Я пока не решила. — Я тоже, — честно ответил Джисон. Она рассмеялась — открыто, без насмешки — и вышла в коридор. Минджэ собрал свои вещи с педантичностью хирурга. Перед тем как уйти, он посмотрел на Джисона и сказал: — В документации по легаси-модулю 300 страниц. Удачи. Джисон не понял, было ли это пожеланием или предупреждением. Судя по тону — и тем и другим. Чанбин вышел последним, забрав свою кружку. На пороге он обернулся, окинул Джисона долгим взглядом и сказал: — Тестовое было сильное. Но это — другое. Здесь не получится выехать на креативе. Он кивнул Минхо, который уже смотрел в ноутбук, и вышел.<-- ✦ -->
После летучки все разошлись по своим местам. Джисон сидел за столом, который ему выделили — прямо напротив переговорной Минхо, чтобы, видимо, тот мог наблюдать за ним в любой момент, не вставая с кресла. Он открыл вики и начал читать документацию. Код, который написал Минхо, оказался именно таким, как о нем говорили. Чистым. Логичным. Без единой лишней строчки. Каждый метод, каждая переменная были на своих местах. Это завораживало. И бесило одновременно. Джисон привык, что его код — это хаотичное, но живое существо. Код Минхо был идеальной машиной. Без души, но идеальной. Он смотрел на экран, на эти идеальные строчки, и думал о том, как ему хочется добавить туда комментарий. Просто так. Без причины. Чтобы сломать эту стерильность. Чтобы оставить след. Телефон пиликнул. minho_lee: «Как успехи с документацией?» Джисон посмотрел в сторону переговорной. Минхо сидел за своим столом, смотрел в ноутбук, и казалось, что он не отвлекается ни на что. Но сообщение пришло.jisung_h: «Читаю. Пока всё понятно. Кроме одного места»
minho_lee: «Какого?»jisung_h: «В модуле кэширования. Вы используете свою реализацию вместо редиса. Я понимаю, зачем. Но не понимаю, почему именно так. В документации нет пояснений»
Три точки появились. Исчезли. Появились снова. Минхо печатал долго. minho_lee: «Приходи через 15 минут. Покажу» Джисон отложил телефон и улыбнулся. Он не ожидал, что Минхо согласится объяснять лично. Он вообще не ожидал, что тимлид будет отвлекаться на стажёра в первый же день. Через пятнадцать минут он стоял в проёме переговорной, сжимая в руках блокнот, в котором успел набросать схему их текущей архитектуры. Минхо кивнул на стул напротив. — Показывай, — сказал он, отодвигая свой ноутбук. Джисон сел, развернул блокнот и начал объяснять. Он говорил быстро, увлеченно, жестикулируя, тыкая пальцем в нарисованные схемы. Минхо слушал, не перебивая. Только иногда хмурился или кивал. — ...и вот здесь я не понимаю, — Джисон обвел кружком кусок схемы. — Почему вы не использовали готовое решение? Это же экономия времени и ресурсов. А вы написали свой велосипед. — Потому что готовое решение не покрывало всех наших кейсов, — ответил Минхо. — Мы тестировали редис. Он давал сбои при определённом типе нагрузки. Наша реализация — это компромисс между производительностью и стабильностью. — Но вы могли форкнуть редис и допилить, — не сдавался Джисон. — Могли. И потратили бы три месяца на то, чтобы разобраться в чужом коде. А потом ещё полгода на поддержку. Вместо этого мы написали своё за две недели. Джисон замолчал. В этом была логика. Жесткая, прагматичная, очень минховская. — Понял, — сказал он. — Спасибо. — Не за что, — Минхо снова уставился в свой ноутбук, давая понять, что разговор окончен. Джисон встал, собрал блокнот и уже направился к выходу, когда Минхо окликнул его. — Хан Джисон. — Да? — Про кружку. — Минхо поднял на него глаза. — В следующий раз приноси свою. Джисон замер. А потом улыбнулся — той самой улыбкой, которая бесила людей с первого курса. — А если я забуду? — спросил он. — Тогда пьешь из автомата, — Минхо вернулся к экрану. — В бумажных стаканчиках. — Жестоко. — Это не жестокость. Это порядок. Джисон вышел из переговорной, чувствуя, как внутри разливается странное тепло. Минхо мог бы просто промолчать. Мог бы сделать замечание при всех. Мог бы выкинуть кружку. Вместо этого он сказал: «в следующий раз приноси свою». Как будто допускал, что этот следующий раз наступит. Сидя за своим столом, Джисон открыл общий чат команды и увидел, что Минхо уже добавил его в список участников. В графе «роль» стояло: «стажёр». Рядом — аватарка с его фото, где он улыбается, щурясь на солнце. Обычное фото, без фильтров, без попытки казаться кем-то другим. Он посмотрел на аватарку Минхо. Та же, что и в мессенджере — тёмный силуэт на фоне окна, лица почти не видно. Загадочно. Недосягаемо. Джисон напечатал в личном чате:jisung_h: «Завтра в девять, да?»
Ответ пришел через минуту. minho_lee: «Да. Не опаздывай» Джисон отложил телефон и посмотрел в окно. За стеклом уже темнело, где-то вдалеке зажигались огни. Первый день стажировки подходил к концу. Он ничего не успел сделать, но чувствовал себя так, будто пробежал марафон. Он вспомнил, как сегодня утром смотрел на Минхо, протягивающего руку для рукопожатия. Вспомнил его сдержанное лицо, когда он услышал про «выше». Вспомнил, как Минхо сказал «я не отвечаю на вопросы, ответ на которые можно найти за три минуты», но всё равно ответил. Пригласил к себе. Объяснил. Но предчувствие уже запульсировало где-то под рёбрами, разгоняя кровь.<-- ✦ -->
Через четыре дня после того, как Джисон впервые переступил порог их секции, Минхо открыл пул-реквест и почувствовал, как внутри всё сжимается в тугой, болезненный узел. Он ждал этого момента с понедельника. Ждал и боялся — последнее он, конечно, не признал бы даже под пыткой. Каждое утро, приходя в офис за час до всех, он видел, как на столе у Джисона появляется новая кружка — на этот раз своя, купленная, судя по всему, в ближайшем магазине. Синяя, с глупой надписью «Probably busy». Минхо каждый раз закатывал глаза, проходя мимо. И каждый раз замечал, что кружка стоит ровно на том же месте, что и вчера. Будто стажёр хотел, чтобы её видели. Теперь он сидел в своей переговорной, смотрел на экран и не мог заставить себя начать ревью. Пальцы застыли над клавиатурой, курсор мигал в пустом поле для комментариев. Код был... странным. Минхо ожидал увидеть что-то среднее. Типичный стажёрский код: работающий, но грязный, с повторяющимися блоками, странными названиями переменных и комментариями вроде «// не трогать, работает». Он готовился к этому. У него даже был готов стандартный шаблон замечаний, который он слегка адаптировал под каждого новичка. Вместо этого он смотрел на решение, которое было… другим. Джисон переписал модуль кэширования. Не так, как сделал бы Минхо. Не так, как было в документации. Но так, что Минхо пришлось сесть ровнее и перечитать всё заново. Вместо стандартной реализации он использовал подход, о котором Минхо читал в какой-то узкоспециализированной статье полгода назад. Подход, который сам хотел попробовать, но не было времени. Теперь этот подход лежал перед ним, живой, работающий, и принадлежал стажёру. Минхо провёл пальцами по лицу, чувствуя, как под кожей разливается чужеродное тепло. Он не знал, как это назвать. Гордость? Раздражение? Ревность? Он нашёл первый баг на пятой строчке. Потом второй — в логике обработки ошибок. К третьему он уже почти успокоился. Код был не идеальным. Код был сырым. Но в нём чувствовался почерк — живой, наглый, уверенный в себе. Как у человека, который знает, что делает, но специально делает не так, как от него ждут. Комментарии добили его окончательно. В одном месте, рядом с функцией очистки кэша, было написано:«// здесь можно было бы сделать красиво, но заказчик всё равно не оценит, так что оставлю как есть»
В другом, там, где Джисон использовал нестандартную структуру данных:«// знаю, что можно через словарь. но этот вариант быстрее на 15%. проверял. не благодарите»
Минхо закрыл глаза. Сделал вдох. Открыл. Он начал писать комментарии к ревью. Первые три замечания были по делу — реальные ошибки, которые нужно исправить. Четвертое — про форматирование, которое он ненавидел, но которое технически не нарушало стандарт. Пятое — про название переменной, которое было понятным, но не соответствовало их код-стайлу. Шестое он придумал уже на ходу, чувствуя, как внутри нарастает глухое раздражение. К тому моменту, когда он закончил, список замечаний растянулся на полстраницы. Минхо посмотрел на него и понял, что перегнул. Два замечания были откровенно притянуты за уши. Одно — просто вкусовщина. Он удалил два. Потом добавил обратно. Потом снова удалил. В итоге оставил четыре. По делу. И одно — про форматирование, потому что оно действительно бесило.<-- ✦ -->
Джисон получил уведомление о код-ревью в три часа дня. Он сидел за своим столом, пил второй за день латте — сиропа пока не завезли, но он уже отправил запрос админу и ждал ответа — и смотрел, как в чате мелькают сообщения от Соён по поводу их общего проекта. Она была въедливой, дотошной и задавала вопросы, на которые у Джисона не было ответов. Это бесило. И одновременно вызывало уважение. Увидев имя Минхо в списке ревьюеров, он отставил кружку и открыл пул-реквест. Четыре замечания. Плюс одно про форматирование. Джисон прочитал их раз. Потом второй. Потом третий. Первые три были справедливы. Он действительно не учёл крайний случай с пустым кэшем, не обработал таймаут и забыл про потокобезопасность. Четвертое — про производительность — было спорным, но в целом имело право на существование. А пятое... пятое было просто смешным. «Название переменной "cache_cleaner_3000" не соответствует принятому в команде стилю. Используй snake_case без цифр и юмора» Джисон смотрел на это замечание и чувствовал, как уголок его губы ползёт вверх. Он назвал функцию так специально. Хотел посмотреть, заметит ли Минхо. Заметил. И, судя по тому, что добавил это в ревью, — его это задело. Он закрыл пул-реквест, открыл редактор и начал править. Первые три ошибки исправил быстро — они были очевидны. Четвёртый момент перепроверил, нашёл статью, которая подтверждала его правоту, и оставил как есть. А название переменной... название он менять не стал. Вместо этого, когда все правки были сделаны, он открыл личный чат с Минхо и написал:jisung_h: «Три из пяти замечаний справедливы. Два — вкусовщина. Но в целом спасибо, было полезно»
Отправил и замер, глядя на экран. Три точки появились сразу. Потом исчезли. Потом появились снова. minho_lee: «Какие два?»jisung_h: «Производительность. Я проверил. Мой вариант быстрее на 12% при пиковой нагрузке»
minho_lee: «На какой нагрузке?»jisung_h: «На той, что у нас в тестах. Я прогнал три раза, среднее значение — 12,3%»
Пауза. Джисон смотрел, как мелькают три точки, и чувствовал, как сердце начинает биться чаще. Он представил, как Минхо сейчас сидит в своей переговорной, хмурится, открывает его код, перепроверяет. Представил его пальцы на клавиатуре, сосредоточенное лицо, может быть, даже прикушенную губу — ту самую, которую он видел мельком на летучке, когда Минхо задумывался над ответом. minho_lee: «А форматирование?»jisung_h: «А что форматирование?»
minho_lee: «Ты не исправил»jisung_h: «Не вижу смысла. Код читается. А переменная называется так, потому что она делает именно то, что написано. Цифры и юмор не мешают работе»
Минхо не отвечал три минуты. Джисон уже начал думать, что перегнул, когда пришло новое сообщение. minho_lee: «В следующий раз будешь называть переменные по правилам. Я не шучу»jisung_h: «Договорились. Но этот раз я оставлю как есть. В честь первого ревью»
minho_lee: «...» Джисон смотрел на многоточие и улыбался. Он не знал, что значит этот ответ — раздражение, принятие или что-то среднее. Но Минхо не стал спорить. И не стал настаивать.<-- ✦ -->
Пятница, 18:47. Офис опустел за час до этого — кто-то ушел пораньше, кто-то задержался на полчаса и сдался. Только лампы над несколькими столами горели в темноте открытого пространства, создавая маленькие островки света среди серых перегородок и темных мониторов. Джисон сидел за своим столом, смотрел в одну точку и пытался понять, почему он всё ещё здесь. За спиной кто-то прошел — администратор, выключающий свет в коридоре. Чавкнула дверь лифта. Снова стало тихо. Джисон прокрутил в голове события первой недели, пытаясь разложить их по полочкам. Пять дней. Пять дней, за которые он успел: — переписать модуль кэширования, — поспорить с тимлидом о производительности, — проиграть спор о названиях переменных (название он оставил, но обещал больше так не делать), — и выяснить, что Минхо приходит в офис ровно в 8:20, пьет кофе из термокружки, которую приносит из дома, и первую половину дня не разговаривает ни с кем, кроме Чанбина. Это последнее наблюдение не было частью плана. План, если честно, был простым: пройти стажировку, получить доступ к серверам, сделать свой проект и уйти с хорошими рекомендациями. И, возможно, немного позлить начальника по пути. Потому что начальник, который с первого взгляда называет тебя «слишком простым» — даже если не вслух, а взглядом, которым наградил его в первый день, — такой начальник заслуживает, чтобы его немного позлили. Но на четвертый день что-то пошло не так. Джисон открыл чат с Минхо и снова перечитал их переписку. Коротко, по делу, без лишних слов. Минхо писал так же, как говорил — сухо, четко, каждое сообщение можно было бы отправить клиенту без правок. И только одно — то самое, с многоточием — выбивалось из ряда. minho_lee: «...» Джисон тогда долго смотрел на эти три точки и пытался понять, что они означают. Раздражение? Усталость? Что-то ещё? Он поймал себя на том, что уже пятый раз за вечер открывает этот диалог, и убрал телефон в карман. Надо работать. Проект с фронтендом ждать не будет, Соён прислала пул-реквест, который нужно проверить, а он сидит и пялится в одну точку. Но вместо того чтобы открыть редактор, Джисон посмотрел в сторону переговорной Минхо. Свет горел. Он не заметил, когда Минхо включил лампу. Всю неделю тимлид уходил ровно в шесть — Джисон проверял. Раньше всех, даже Чанбин задерживался чаще. Но сегодня он всё ещё был здесь. Джисон смотрел на свет в стеклянной коробке и чувствовал, как внутри нарастает странное, щекочущее любопытство. Минхо сидел за столом, уткнувшись в ноутбук, и не двигался уже минут десять. Может, уснул? Или завис над какой-то сложной задачей? Джисон представил, как сейчас подойдет, постучит в стекло, и Минхо вздрогнет, поднимет голову, и в его глазах будет не обычная ледяная вежливость, а что-то живое, уставшее, настоящее. Он представил — и не пошел. Потому что это уже было бы слишком. Слишком очевидно. Слишком похоже на то, чтобы искать встречи, которых не было в расписании. Вместо этого Джисон открыл общий чат команды и написал:jisung_h: «Кто-нибудь еще в офисе? У меня вопрос по прод-среде»
Ответ пришел через минуту. minho_lee: «Я. Что случилось?» Джисон посмотрел в сторону переговорной. Минхо даже не поднял головы, печатал в телефоне, который лежал рядом с ноутбуком.jisung_h: «Не могу понять, почему тесты падают на третьем сервере. Локально всё проходит»
minho_lee: «Покажи» Джисон собрал ноутбук, кружку, блокнот — хотя всё это можно было оставить на месте, Минхо и так мог зайти в его репозиторий. Но он хотел подойти. Хотел увидеть. Он шел по темному офису, и тишина вокруг казалась плотной, почти осязаемой. Чужие столы, чужие мониторы, чужие наушники, разбросанные по клавиатурам. В этой тишине каждый шаг отдавался громко, и Джисону казалось, что Минхо слышит, как колотится его сердце. Переговорная встретила его теплом — кондиционер, который дул целый день, наконец выключили. Минхо сидел за столом, откинувшись на спинку кресла, и смотрел на дверь, как будто ждал. — Садись, — сказал он, кивнув на стул напротив. Джисон сел, открыл ноутбук, развернул экран. Минхо наклонился ближе, и Джисон почувствовал запах его парфюма — цитрус и дерево, тот самый, который он ловил в коридоре каждое утро, проходя мимо. — Показывай. Джисон показал. Логи ошибок, конфигурацию тестового стенда, результаты локальных прогонов. Минхо смотрел молча, иногда задавая уточняющие вопросы. Его голос был ниже обычного — усталость давала о себе знать, но он не торопился, не раздражался, просто вникал. — Странно, — сказал Минхо через пару минут. — На третьем сервере падает только один тест? Из всего набора? — Да. Только тест на запись в кэш. Остальные проходят. — А на четвёртом? — Тоже всё хорошо. Минхо замолчал, постукивая пальцем по столу. Джисон смотрел на его руку — длинные пальцы, аккуратные ногти, никаких колец. Он поймал себя на этой мысли и одёрнул взгляд. — Покажи конфигурацию третьего сервера, — попросил Минхо. Джисон открыл нужный файл. Они вместе пробежались по строкам. Всё выглядело стандартно. — А переменные окружения? — Минхо нахмурился. — Сейчас, — Джисон открыл терминал, ввел команду. Список вывалился длинный, почти на полэкрана. Минхо подвинулся ближе. Теперь их плечи почти соприкасались. Джисон старался дышать ровно и не думать о том, как близко лицо Минхо. — Вот, — Минхо ткнул пальцем в экран. — Переменная "CACHE_TTL". На третьем сервере она выставлена в ноль. На остальных — в триста. Джисон моргнул. — Но в конфигурации этого нет. Это же значение по умолчанию. — Значит, кто-то переопределил его вручную. — Минхо откинулся на спинку кресла, и тепло его плеча исчезло. Джисон почти физически ощутил потерю. — Когда последний раз накатывали изменения на этот сервер? — В среду, — Джисон полез в историю деплоев. — Это был Чанбин. Он обновлял сетевые настройки. — Напиши ему. Пусть посмотрит, не задел ли он случайно переменные окружения. Джисон открыл чат с Чанбином, напечатал сообщение. Ответ пришел через минуту. — Говорит, что не трогал. Но проверит в понедельник. — В понедельник поздно, — Минхо взял телефон, сам написал Чанбину что-то короткое. Тот ответил сразу. — Он говорит, может посмотреть сейчас, если мы не ушли. Он ещё в офисе, на седьмом этаже. Джисон посмотрел на часы. Семь пятнадцать. Чанбин тоже задерживался. — Я могу сам подойти, — сказал он, делая движение встать. — Сиди, — Минхо остановил его жестом. — Я позвоню. Он набрал номер, и Джисон услышал гудки. Потом голос Чанбина — приглушённый, но в тишине переговорной разборчивый. — Слушай, — сказал Минхо без предисловий. — У тебя в скриптах деплоя не было случайно переопределения CACHE_TTL? У Джисона на третьем сервере ноль стоит. — Не было, — голос Чанбина звучал устало. — Я только сеть правил. Но дай-ка посмотрю логи. В трубке зашуршало, послышался стук клавиш. Джисон смотрел, как Минхо ждёт. Его лицо было спокойным, но пальцы сжимали телефон чуть сильнее, чем нужно. — Есть, — сказал Чанбин через минуту. — Я нашел. В моём скрипте была строчка, которая сбрасывала все переменные на дефолт. Косяк. Я её уже убрал. Перекатите деплой, должно заработать. — Спасибо, — Минхо сбросил вызов и посмотрел на Джисона. — Слышал? — Да. — Перекатывай. Джисон открыл консоль, запустил деплой. Процесс пошёл, заполняя экран строчками логов. Они ждали в тишине. Минхо смотрел на экран Джисона, но взгляд его был расфокусирован — как будто мысли были где-то далеко. — Готово, — сказал Джисон, когда деплой завершился. — Запускаю тесты. Зелёные строчки побежали по экрану. Третий сервер. Первый тест — прошёл. Второй — прошёл. Третий — тот самый, на запись в кэш — прошёл. — Работает, — Джисон выдохнул и откинулся на спинку стула. Минхо кивнул. В его глазах мелькнуло что-то, похожее на удовлетворение — или, может быть, просто на облегчение. — Документацию потом обновишь, — сказал он. — Чтобы в следующий раз никто не наступал на эти грабли. — Хорошо, — Джисон закрыл ноутбук. — Спасибо, что помогли. Минхо уже отвернулся к своему экрану, но на полпути остановился. — Ты молодец, — сказал он, не глядя. — Что заметил. Не все стажёры вообще смотрят на логи тестов. Джисон замер. Это была похвала. От Минхо. Сухая, короткая, почти невзначай, но — похвала. — Я... спасибо, — сказал он, чувствуя, как к щекам приливает тепло. — Сегодня пятница, — сказал Минхо. — Иди домой. — А вы? — Допишу отчёт. Скоро уйду. Джисон хотел сказать, что уже почти семь, что отчёт может подождать до понедельника, что Минхо выглядит уставшим и ему тоже пора. Но вместо этого он спросил: — Вы всегда задерживаетесь по пятницам? Минхо усмехнулся. Коротко, почти незаметно, но Джисон увидел. — Я всегда задерживаюсь, когда не успеваю сделать работу в рабочее время. — А вы не успеваете? — Сегодня — нет. Джисон помолчал. Потом закрыл ноутбук и отодвинул стул. — Я пойду тогда. Спасибо, что помогли. Минхо кивнул, не поднимая головы. — До понедельника. — До понедельника. Джисон вышел в коридор и остановился. Свет в переговорной горел, и он видел силуэт Минхо через стекло — тот снова уткнулся в экран, и его плечи были напряжены. Он постоял ещё минуту, собираясь с мыслями. Потом развернулся, прошел к кофемашине, которая стояла в конце коридора, и нажал кнопку. Чёрный кофе. Без сахара. Как любит Минхо. Со стаканом в руке он вернулся к переговорной, постучал в стекло. Минхо поднял голову, и на его лице отразилось удивление — такое явное, что Джисон на секунду пожалел, что не может сфотографировать. — Вы сказали, что работа не ждёт, — Джисон поставил стакан на стол. — Кофе тоже. Минхо смотрел на стакан, потом на него. Взгляд был тяжёлым, изучающим. — Я пью из термокружки, — сказал он наконец. — Знаю. Но она пустая, я видел. А этот — горячий. Минхо взял стакан. Поднёс к губам, сделал глоток. Поморщился — кофе был из автомата, нормального эспрессо там не сварить. — Ужасно, — сказал он. — Знаю, — Джисон улыбнулся. — Но кофеин есть кофеин. — Ты поэтому принёс? Чтобы я не заснул над отчётом? — Чтобы вы не забыли, что сегодня пятница, — Джисон сделал шаг назад, к выходу. — Спокойной ночи, Минхо-сси. Минхо смотрел на стакан, потом на дверь, за которой исчез Джисон. Кофе был ужасным. Он сделал ещё глоток. И почему-то не выкинул.<-- ✦ -->
В такси, по пути домой, Джисон смотрел в окно на огни ночного города и думал о том, что его стратегия «бесить начальника» работает не совсем так, как он планировал. Минхо действительно злился — на код, на комментарии, на названия переменных. Но он не злился на него лично. Не пытался унизить, не ставил в неудобное положение перед командой. Даже когда они спорили о производительности, это был спор равных. Почти равных. Джисон вспомнил, как Минхо смотрел на него, когда он принёс кофе. В этом взгляде не было раздражения. Было что-то другое. Что-то, чему Джисон боялся подобрать название. Телефон пиликнул. Сообщение от Минхо. minho_lee: «Спасибо за кофе. Но в следующий раз лучше купи нормальный, если хочешь, чтобы я не умер от передозировки суррогатом» Джисон улыбнулся и напечатал ответ.jisung_h: «А если я хочу, чтобы вы жили долго и счастливо?»
Ответ пришел через минуту. minho_lee: «Тогда приноси свой ореховый сироп. Я хотя бы не умру от скуки» Джисон смотрел на экран и чувствовал, как внутри разливается что-то тёплое, тягучее, опасное. Он не знал, что это было. И решил пока не знать.<-- ✦ -->
Минхо не спал третью ночь. Это началось ещё в субботу, когда он понял, что документация к релизу не готова, а заказчик прислал новые требования, которые ломали половину их архитектуры. В воскресенье он переписывал интеграционные тесты, в понедельник — договаривался с Чанбином о смещении сроков. Во вторник утром он выпил свой первый кофе в 5:47, сидя на кухне с ноутбуком, и понял, что глаза слипаются, а мысли текут вязко, как смола. Он приехал в офис раньше всех, как всегда. Сделал эспрессо, заварил вторую чашку в термокружку, сел за стол. В голове крутились цифры, дедлайны, риски. Релиз через две недели. Заказчик начинает пилотное тестирование в пятницу. Если что-то пойдёт не так — он даже не хотел думать, что тогда. В 10:15 пришёл Чанбин с кружкой кофе и свежими новостями: тесты на третьем сервере начали падать. Минхо попросил показать логи, пробежался глазами. Ничего критичного — возможно, проблема с сетью. Он попросил перезапустить сервер и забыл об этом. В 12:40 упал второй. В 14:32, когда Минхо разбирал почту после обеда, система мониторинга взвыла на его ноутбуке так, что он пролил кофе на стол. Чёрная лужица расползлась по распечатке технического задания, которую он правил утром, но он даже не обратил на это внимания. Всё его существо сузилось до одной точки: красный экран, мигающие цифры, строчки логов, которые текли в терминале сплошным потоком ошибок. Прод упал. Весь. Три сервера, балансировщик, кэш — всё. — Чанбин, — сказал Минхо в общий чат, и голос его прозвучал ровно, хотя внутри всё сжималось. — Смотри бэкенд. Соён, проверь фронтенд на тестовом стенде. Минджэ, начинай собирать логи со всех серверов за последние 24 часа. Он встал, чувствуя, как дрожат пальцы. Не от страха — от усталости, от напряжения, от того, что организм уже не понимал, чего от него хотят. Телефон зажужжал. Минхо взглянул на экран. Директор. Он сбросил вызов. Через три секунды — снова. Набрал в чате: «Я работаю над этим» и вышел в коридор. — Ли Минхо-сси, — голос директора в трубке был ледяным, без тени обычной утренней приветливости. — Что происходит? — Сбой на продакшене, — сказал Минхо, стараясь, чтобы голос звучал уверенно. — Команда уже работает над устранением. — У заказчика скоро встреча с инвесторами. Они используют нашу систему для демонстрации. — Пауза. — У вас два часа, Минхо-сси. Я не хочу объяснять совету директоров, почему мы потеряли контракт. Сброс. Минхо прислонился лбом к холодной стене коридора. Два часа. За два часа нужно понять, что сломалось, найти причину, исправить и развернуть обратно. Это было невозможно. Он знал, что это невозможно. Но выбора не было. Он вернулся в секцию разработки. Чанбин сидел за своим столом, вцепившись в клавиатуру, и лицо у него было белое, как лист бумаги. Соён и Минджэ стояли за его спиной, смотрели на монитор и молчали. Никто не печатал. Никто не говорил. Тишина была тяжёлой, давящей. — Что по бэкенду? — спросил Минхо, подходя. Чанбин поднял голову. В его глазах Минхо увидел то, что боялся увидеть: растерянность. — Бэкенд отвечает, — сказал Чанбин медленно, будто каждое слово давалось с трудом. — Но данные не отдаёт. Кэш пустой. База данных жива, но коннекты падают через секунду после установки. Я не понимаю, что происходит. Минхо сел за соседний стол, открыл ноутбук. Логи. Везде одно и то же: запросы приходят, сервер их обрабатывает, но вместо данных возвращает ошибку аутентификации. Хотя сама аутентификация работала — он проверил отдельно. Конфигурация не менялась. Версии библиотек — те же, что и вчера. Переменные окружения — стандартные. — Это не имеет смысла, — сказал он вслух, и слова прозвучали глухо, почти безнадёжно. — Всё должно работать. Никто не ответил. Соён переглянулась с Минджэ, и в этом взгляде Минхо прочитал то, что они не решались сказать вслух: «мы не справимся». Телефон снова зажужжал. Минхо не стал смотреть — сбросил вызов не глядя. Директор. Или заказчик. Или кто-то ещё, кому сейчас нужно объяснять, почему они сидят здесь, а не работают. — Предлагаю откатить последние изменения, — сказал Чанбин. — Вернуться к состоянию на вчера. — Это не поможет, — Минхо покачал головой. — Паттерн падения разный. Серверы упали не одновременно. Если бы проблема была в наших изменениях, они бы упали все сразу. — Может, DDoS? — Нет. Трафик в норме. — Тогда что? — голос Чанбина сорвался на полтона выше. — Что это может быть, если не наше обновление и не внешняя атака? Минхо молчал. Он не знал. Впервые за много лет он сидел перед системой, которую сам построил, и не понимал, почему она не работает. — Я не знаю, — сказал он. В комнате повисла тишина. Чанбин уставился на него. Минхо не сказал бы этого, если бы здесь был кто-то ещё. Если бы это была обычная рабочая ситуация. Но сейчас — когда на кону стоял релиз, контракт, доверие команды — он не мог врать. — Мы разберёмся, — сказал кто-то сзади. Минхо обернулся. В проёме стоял Джисон с ноутбуком под мышкой. Он, кажется, не бежал, не суетился — просто пришёл, как будто знал, что он здесь нужен. В его глазах не было паники. Только спокойная, почти раздражающая уверенность. — Я сказал тебе следить за общим чатом, — голос Минхо прозвучал резче, чем он хотел. — Я следил. И нашёл кое-что. Можно я покажу? Минхо хотел сказать «нет». Хотел сказать, что сейчас не время для экспериментов стажёра, что у него есть настоящая проблема, которую нужно решать, и он не собирается тратить время на чьи-то догадки. Но он посмотрел в глаза Джисона — спокойные, уверенные, без тени обиды на его резкость — и вместо этого кивнул. — Показывай. Джисон подошёл, поставил ноутбук на стол рядом с Минхо. На экране была таблица — сравнение поведения серверов за последние сутки. Минхо пробежался глазами по цифрам. Всё выглядело одинаково. — Смотрите сюда, — Джисон ткнул пальцем в строчку. — Третий сервер упал в 12:40. Второй — в 10:15. Первый — последним, в 14:32. Разное время. Но посмотрите на график памяти. Он переключил на другой файл. Синяя линия на всех трёх графиках уходила вверх почти вертикально перед падением. — Утечка памяти, — сказал Минхо. — Да. Только она не локальная. Я прогнал логи. Память начинает расти за несколько часов до падения, потом достигает предела, и сервер падает. Перезагружается, и всё начинается заново. — Но что её вызывает? — спросил Чанбин. Джисон замолчал. Посмотрел на Минхо. — Я не знаю, — сказал он. — Но я знаю, где искать. Он открыл редактор и начал печатать. Минхо смотрел на экран и не сразу понял, что именно делает Джисон. А когда понял — замер. Джисон писал скрипт. Не простой, а сложный — анализатор, который должен был сравнить все изменения на серверах за последние сутки и найти то, что отличает их друг от друга. Он писал быстро, уверенно, иногда останавливаясь, чтобы проверить какую-то строчку. — Это займёт время, — сказал Чанбин. — У нас его нет. — Десять минут, — не отрываясь от экрана, ответил Джисон. Минхо смотрел на его пальцы, летающие по клавиатуре, и чувствовал, как внутри закипает что-то странное, давно забытое. Не надежда — что-то другое. Что-то похожее на облегчение. Он достал телефон и написал директору: «Есть гипотеза. Работаем». Сбросил звонок, который тут же пришёл в ответ. Через восемь минут Джисон остановился. — Готово, — сказал он. — Запускаю. На экране побежали строчки. Анализатор перебирал логи, сравнивал, искал паттерны. Минхо смотрел на бегущие цифры и считал секунды. Первая гипотеза отпала. Вторая — тоже. На третьей анализатор замер. — Есть, — сказал Джисон. Он указал на строчку. Минхо наклонился ближе. — Третий сервер, — Джисон ткнул пальцем в экран. — Вчера, 23:47. Обновление библиотеки. Версия 2.7.3 на 2.7.4. Второй сервер обновлялся сегодня в 08:15. Первый — вчера в 15:20. — И что? — спросил Чанбин. — Мы обновляем библиотеки каждую неделю. — А теперь посмотрите на память после обновления, — Джисон пролистал отчёт. — На первом сервере память начала расти через три часа после обновления. На втором — через два. На третьем — через час. — Разное время, — сказал Минхо, и у него в голове начало складываться. — Потому что обновление ставили в разное время. — Да. А падение наступает, когда память достигает предела. Чем раньше обновили, тем раньше упало. — Это баг в библиотеке, — сказал Чанбин. — Утечка памяти в новой версии. — Проверь, — сказал Минхо. Чанбин открыл консоль, откатил библиотеку на третьем сервере. Перезапустил. Через три минуты сервер снова работал. Память не росла. — Откатывай на всех, — сказал Минхо. Он смотрел, как бегут строчки деплоя, и чувствовал, как напряжение понемногу отпускает. Плечи опустились, дыхание стало глубже. Телефон снова зажужжал. На этот раз Минхо взял трубку. — Всё под контролем, — сказал он. — Через час система будет работать. Я пришлю отчёт. Он сбросил вызов и посмотрел на Джисона. Тот сидел на стуле, смотрел на экран, и лицо у него было спокойное, только на лбу выступила испарина. Он устал. Он тоже был в панике, просто не показывал. — Откуда ты узнал? — спросил Минхо. — Я не узнал, — ответил Джисон, не глядя на него. — Я просто подумал: если всё сломалось одновременно, значит, причина одна. И если она не в нашем коде, значит, в окружении. А если в окружении — значит, нужно сравнить, что изменилось. — И ты написал скрипт за десять минут. — Восемь, — поправил Джисон. Минхо усмехнулся. Невесомо, почти незаметно, но Джисон заметил — и его глаза на секунду расширились. — Хорошая работа, — сказал Минхо. Джисон смотрел на него, и в его взгляде было что-то, чему Минхо не хотел подбирать название. Гордость? Удивление? Или то, что он сам чувствовал, глядя на этого стажёра, который за восемь минут сделал то, что он, Минхо, не смог бы сделать за час?<-- ✦ -->
В 17:20 прод снова работал. Команда разошлась через час после того, как последний сервер поднялся. Чанбин ушёл в шесть, Соён и Минджэ — в половине седьмого. В секции разработки остались только Минхо и Джисон. Они сидели за соседними столами, молчали и смотрели на зелёные строчки мониторинга, которые текли ровно, без единой ошибки. — Иди домой, — сказал Минхо, не глядя на Джисона. — А вы? — Я потом. — Вы не спали несколько дней. Минхо повернулся к нему. Джисон смотрел прямо, без обычной наглой улыбки. Серьёзно. Внимательно. — Откуда ты знаешь? — спросил Минхо. — Круги под глазами, — Джисон кивнул на его лицо. — И вы сегодня три раза перечитывали одно и то же письмо перед тем, как ответить. Я заметил. Минхо хотел сказать что-то резкое — что стажёры не должны следить за тем, сколько их начальник спит и что он читает. Но слова не шли. — Я тоже не спал, — добавил Джисон. — Не из-за релиза. Просто... не мог. Минхо смотрел на него. В пустом офисе, при свете мониторов, в тишине, которую нарушало только гудение системных блоков, граница между «начальник» и «стажёр» казалась какой-то тонкой, почти прозрачной. — Ты сегодня спас нас, — сказал Минхо. — Я не люблю признавать, когда кто-то делает что-то лучше меня. Но это факт. Джисон моргнул. Его лицо изменилось — ушла привычная бравада, осталось что-то живое, настоящее. — Я не лучше, — сказал он тихо. — Просто я не боюсь ошибиться. Я написал тот скрипт, потому что знал: если он не сработает, ничего страшного. А вы... вы боитесь ошибиться. Потому что от ваших ошибок зависит всё. Минхо молчал. Потому что это была правда. — Может, иногда стоит разрешить себе ошибаться? — спросил Джисон. — Я не могу себе этого позволить, — ответил Минхо. — Почему? — Потому что тогда никто не будет верить, что я знаю, что делаю. Джисон смотрел на него долго. Потом встал, собрал свой ноутбук, надел рюкзак. — Я верю, — сказал он, уже стоя в проходе. — Даже когда вы ошибаетесь. Он вышел в коридор, и Минхо смотрел ему вслед, пока дверь лифта не закрылась за стажёром. Он остался один. Смотрел на зелёные строчки мониторинга и думал о том, что сегодня произошло. Джисон спас их. Он, Минхо, не смог бы. Он ненавидел это признавать. Но это была правда. Он открыл чат. minho_lee: «Скрипт, который ты написал. Скинь в общий репозиторий. Завтра разберу, как он работает» Ответ пришёл через минуту.jisung_h: «Уже скинул. И добавил комментарии. Чтобы было понятно даже тем, кто не спал три дня»
Минхо посмотрел на экран. Уголок его губ дрогнул. minho_lee: «...»jisung_h: «Спокойной ночи, Минхо-сси. Выключите ноутбук и поспите. Прод никуда не денется»
Минхо не ответил. Но ноутбук выключил.<-- ✦ -->
Джисон ждал сиропы с самого утра. Он пришёл в офис в 8:20, надеясь застать Минхо — тот всегда был в это время, — но стол тимлида был пуст, а термокружка стояла на столе нетронутой. Джисон постоял у переговорной, посмотрел на пустое кресло и почувствовал странное, непривычное беспокойство. Минхо не опаздывал. Минхо вообще не опаздывал. Он написал сообщение в личный чат — короткое, без лишних вопросов. Просто чтобы тот знал: его прикрывают. Ответа не было, и Джисон понял, что Минхо либо ещё спит, либо уже в пути и не смотрит в телефон. В 9:15, когда он уже начал всерьёз волноваться, в коридоре показалась знакомая фигура — HR-менеджер с тренинга, женщина в безупречном жакете, которая тогда так растерялась от его вопроса про сиропы. Она несла коробку, и Джисон узнал логотип поставщика кофе. — Доброе утро, — сказал он, подходя. — Это сиропы? HR-менеджер — кажется, её звали Пэк Дахи, хотя он не был уверен — посмотрела на него и узнала. В её глазах мелькнуло что-то, похожее на улыбку. — Да. Привезли сегодня утром. Вы тот самый стажёр, который спрашивал про ореховый? — Тот самый, — Джисон улыбнулся своей самой безобидной улыбкой. — Можно посмотреть? — Конечно, — она открыла коробку. Внутри ровными рядами стояли бутылочки: ваниль, шоколад, карамель, лесной орех и — Джисон ахнул про себя — ореховый. — Ореховый есть, — сказал он, и в его голосе прозвучало такое искреннее удовольствие, что HR-менеджер рассмеялась. — Вы очень хотели, да? — Очень, — Джисон взял бутылочку, покрутил в руках. — Теперь моя жизнь обретёт смысл. — Только не пейте слишком много, — она покачала головой, но улыбалась. — А то потом не уснёте. — Я и так не сплю, — сказал Джисон, и это было правдой, хотя он не собирался это говорить. Она посмотрела на него с любопытством, но ничего не спросила. Поставила коробку у кофемашины и ушла по своим делам. Джисон остался один. Он достал бутылочку орехового сиропа, нажал на помпу — три дозы, не жадничая — налил кофе, добавил молока. Сделал глоток. Идеально. Он закрыл глаза на секунду, чувствуя, как тепло разливается внутри. В 9:30 в офис начали подтягиваться люди. Первым пришёл Минджэ — тот парень с аккуратной стрижкой, который сидел с ними на первой летучке. Он застал Джисона у кофемашины с видом человека, который нашёл сокровище. — О, сиропы привезли, — сказал Минджэ, заглядывая в коробку. — Ты просил, кажется? — Просил, — Джисон кивнул. — Теперь можно пить кофе, а не суррогат. — А ты принципиальный. — Я просто люблю, когда вкусно. Минджэ усмехнулся, взял карамельный, сделал себе кофе. Они вместе вернулись в секцию разработки, и по дороге к ним присоединилась Соён, которая тоже заметила новинку. — Это тот самый сироп? — спросила она, кивая на стакан Джисона. — Тот самый. — И как? — Жизнь удалась, — Джисон отсалютовал стаканом. Соён закатила глаза, но улыбнулась. Они уже начали привыкать к его манере — драматизировать, шутить, делать из ерунды событие. Сначала это раздражало, но к концу второй недели команда как-то незаметно для себя приняла этот стиль. В 9:45 в коридоре появился Чанбин. Он прошёл мимо их столов, бросил взгляд на стакан Джисона, потом на коробку у кофемашины. — Ты добился своего, — сказал он. — Я настойчивый, — ответил Джисон. — Это ты про сироп или про что-то другое? Вопрос прозвучал нейтрально, но Джисон почувствовал в нём подтекст. Чанбин смотрел на него внимательно, и в этом взгляде было что-то, от чего захотелось отвести глаза. — Про сироп, — сказал Джисон. — Про что же ещё. Чанбин хмыкнул, ничего не ответил и прошёл к своему столу. В 10:00 началась летучка. Без Минхо. Джисон зашёл в общий чат, написал, что тимлид в переговорной с важным звонком. Чанбин посмотрел на него из-за монитора, и Джисон не понял, верит он или нет. Но вопросов задавать не стал. Летучка прошла быстро. Чанбин вёл её так же чётко, как Минхо, но без его резкости. Обсудили статус задач, вчерашний инцидент, планы на неделю. Соён спросила про сроки, Минджэ уточнил про документацию. Всё как обычно. Когда летучка закончилась, Чанбин подошёл к столу Джисона. — Он в порядке? — спросил он тихо, чтобы не слышали остальные. — Не знаю, — честно ответил Джисон. — Не отвечал. Чанбин кивнул, посмотрел в сторону пустой переговорной. — Он никогда не опаздывает, — сказал он. — За три года — ни разу. — Может, заболел. — Может. — Чанбин помолчал. — Ты вчера хорошо поработал. Скрипт твой до сих пор в общем доступе, все смотрят. — Это было не сложно. — Для тебя — может быть. — Чанбин усмехнулся. — Минхо тебя хвалил? — Сказал, что хорошая работа. — Он редко кого хвалит. Я за три года слышал это раза три. — Чанбин посмотрел на него внимательно. — Ты ему нравишься. Джисон замер. — Как стажёр, — добавил Чанбин и, не дожидаясь ответа, вернулся к своему столу. Джисон сидел, сжимая стакан с остывшим кофе, и смотрел в одну точку. «Ты ему нравишься». Как стажёр. Как человек. Как... Он не успел додумать, потому что в этот момент в секцию вошёл Минхо. Он был в той же рубашке, что и вчера — Джисон узнал, потому что запомнил цвет, — и двигался быстрее обычного. Войдя в переговорную, он сразу сел за стол, открыл ноутбук и уткнулся в экран. Ни слова, ни взгляда в сторону команды. Джисон смотрел на него через стекло. Минхо выглядел... не так, как обычно. Волосы чуть влажные — видимо, только из душа. Под глазами круги, которые он не успел скрыть. И рубашка — Джисон заметил, как он поправил пуговицы, сев за стол. «Выглядите нормально, если не считать пуговиц», — написал он в чат, и когда Минхо ответил своим обычным многоточием, почувствовал облегчение. Значит, всё в порядке. Значит, он просто проспал. minho_lee: «...»jisung_h: «Я молчу. Кстати, сегодня привезли сиропы. Я уточнил у HR»
Он отправил сообщение и тут же пожалел. Зачем он это написал? Зачем вообще втягивает Минхо в эту историю с сиропами, которая была смешной только для него одного? Но ответ пришёл быстрее, чем он ожидал. minho_lee: «И как, привезли?» Джисон посмотрел на свой стакан. Кофе давно остыл, но ореховый вкус всё ещё чувствовался.jisung_h: «Привезли. Ореховый, карамельный, лесной орех. Я уже проверил»
minho_lee: «В восемь утра?»jisung_h: «В девять. Я дождался, пока администратор принесёт коробку»
Он отправил и засмеялся про себя. Картина и правда была смешная: стажёр, который караулит сиропы у кофемашины, как сокровище. Он представил, как это выглядело со стороны — Минджэ, который видел его в 9:30 с видом первооткрывателя. Соён, которая закатила глаза. Чанбин, который спросил: «Ты добился своего?» В чате не было ответа несколько минут. Джисон уже подумал, что Минхо занят или просто решил не отвечать на эту глупость, когда пришло сообщение. minho_lee: «И как, оправдал ожидания?» Джисон смотрел на экран и чувствовал, как внутри разливается что-то тёплое. Минхо спрашивал. Минхо было интересно.jisung_h: «Ореховый — идеально. Карамельный не пробовал. Лесной орех — на любителя»
minho_lee: «Ты пьёшь кофе, а не десерт»jisung_h: «А вы пьёте кофе, а не лекарство. Вкус имеет значение»
Три точки появились. Исчезли. Появились снова. Джисон ждал, сжимая телефон в руках. minho_lee: «Ладно. Может, попробую когда-нибудь» Джисон замер. Минхо. С ореховым сиропом. Он представил эту картину — и она оказалась настолько абсурдной, что он не сдержал улыбку.jisung_h: «Я запишу этот день в календарь»
minho_lee: «...»jisung_h: «Шучу. Но если решите — я налью. Чтобы вы не ошиблись с дозировкой»
Он отправил и тут же почувствовал, что сказал лишнее. «Я налью». Слишком интимно. Слишком похоже на приглашение, которого не было. Ответ пришёл через минуту. minho_lee: «Договорились» Джисон смотрел на экран и не мог поверить. Минхо согласился. На то, чтобы Джисон налил ему кофе. С сиропом. Как будто это было нормально — стоять рядом у кофемашины, выбирать вкус, смотреть, как тёмная жидкость смешивается с молоком, чувствовать чужое дыхание рядом. Он убрал телефон в карман и посмотрел в сторону переговорной. Минхо сидел за столом, смотрел в ноутбук, и лицо у него было сосредоточенное, как всегда. Только пальцы замерли на клавиатуре на секунду дольше, чем нужно. Джисон отвернулся. Открыл редактор, посмотрел на код, который не дописал вчера. Ничего не понимал. Строчки расплывались перед глазами, а в голове крутилось одно слово: «Договорились». В 18:30 офис снова опустел. Джисон задержался дописать код, который не шёл с утра, и теперь сидел, смотрел на экран и чувствовал, как усталость разливается по телу. В коридоре послышались шаги. Он поднял голову — мимо прошёл Минхо. Тот остановился у кофемашины, посмотрел на коробку с сиропами. Достал стакан. Нажал кнопку эспрессо. Чёрный кофе потек в стакан, и Минхо смотрел на него, не двигаясь. Джисон наблюдал из-за монитора. Минхо взял бутылочку орехового сиропа. Покрутил в руках. Поставил обратно. Взял карамельный. Тоже поставил. Оставил чёрный. Он уже хотел отвернуться, когда Минхо вдруг снова взял ореховый. Посмотрел на него. Нажал помпу. Раз. Второй. Третий. Джисон замер. Минхо добавил молока. Размешал. Поднёс стакан к губам. Сделал глоток. Лицо его на секунду исказилось — слишком сладко, слишком непривычно. Но он сделал ещё глоток. И ещё. Потом поставил стакан на стойку и пошёл обратно в переговорную, не заметив, что за ним наблюдают. Джисон сидел, не дыша. В голове пульсировала одна мысль: он попробовал. Минхо попробовал ореховый сироп. И не выплюнул. И допил. И теперь стакан стоял у кофемашины, и Джисон видел, что кофе убавилось наполовину. Он открыл чат. Написал.jisung_h: «Ну как?»
Ответ пришёл через тридцать секунд. minho_lee: «Слишком сладко»jisung_h: «Вы три дозы нажали. Надо было две»
Пауза. Джисон смотрел на экран и ждал. minho_lee: «Откуда ты знаешь, сколько я нажал?» Джисон поднял голову. Через стекло переговорной он видел, как Минхо смотрит в телефон, потом поднимает взгляд на него. Встречаются глазами. Джисон не отвернулся.jisung_h: «Я всё вижу»
minho_lee: «...»jisung_h: «В следующий раз нажму сам. Чтобы вы не переслащивали»
Минхо не ответил. Но и не отвернулся. Они смотрели друг на друга через стекло, через пустой офис, и в этой тишине было что-то такое, от чего у Джисона перехватывало дыхание. Потом Минхо убрал телефон и вернулся к ноутбуку. Джисон остался сидеть, чувствуя, как сердце колотится где-то в горле. Он посмотрел на свой стакан. Кофе давно остыл. Он допил его одним глотком, чувствуя сладкий ореховый вкус, и почему-то подумал: теперь у них одинаковый.<-- ✦ -->
Джисон зашёл в репозиторий в понедельник утром, чтобы забрать последние изменения, и увидел своё имя.«jisung_h/monitoring_tool — v1.0»
Он открыл файл. Внутри был его код. Тот самый, который он написал в тот вечер, когда упал прод. Только теперь он был отформатирован по всем правилам, дополнен обработкой ошибок и комментариями на двух языках. Внизу, в самом конце, была строчка, которую он не писал:«Автор: Хан Джисон. Рецензия: Ли Минхо.»
Джисон смотрел на эту строчку и чувствовал, как внутри поднимается что-то липкое, противное. Не радость. Что-то другое. Он закрыл файл и уставился в экран. — Ты чего завис? — Минджэ выглянул из-за монитора. — Ничего. — Твой скрипт в репозиторий добавили, да? Я видел. — Ага. — Поздравляю. Джисон кивнул, не оборачиваясь. Он сидел и смотрел на экран, но ничего не видел. В голове крутилось: «Автор: Хан Джисон». Это неправильно. Он не заслужил. Скрипт был сырым, наспех собранным, с кучей допущений. Любой нормальный разработчик написал бы его чище. Ему просто повезло, что гипотеза оказалась верной. Повезло, что Минхо поверил. Повезло. Он встал, взял стакан и пошёл к кофемашине. В коридоре было пусто. Он налил кофе — чёрный, без сиропа, хотя сироп стоял рядом. Сделал глоток. Горько. Вернувшись, он сел за стол и снова открыл репозиторий. Строчка с его именем никуда не делась. Он смотрел на неё и чувствовал, как внутри нарастает глухое раздражение. На себя. На Минхо. На то, что этот скрипт теперь висит здесь, и все его видят, и думают, что он... — Джисон. Он поднял голову. В дверях переговорной стоял Минхо. — Зайди. Джисон прошёл в переговорную, сел на стул напротив. Минхо смотрел на него спокойно, без обычной резкости. — Ты видел репозиторий? — спросил он. — Да. — И что думаешь? Джисон молчал. В голове смешалось всё: «спасибо», «зачем», «я не заслужил». — Я думаю, — начал он медленно, — что это не моя заслуга. — Почему? — Потому что этот скрипт — случайность. Мне просто повезло. Минхо откинулся на спинку кресла. Смотрел на него долго, будто изучал. — Ты когда-нибудь ошибался? — спросил он. Джисон моргнул. Не ожидал этого вопроса. — Да. — И что? Мир рухнул? — Нет. Но... — Но что? — Было страшно. — А сейчас? — Минхо наклонился вперёд. — Сейчас страшно? Джисон хотел сказать «нет». Но под взглядом Минхо слова застряли в горле. — Да, — сказал он тихо. — Страшно, что я поверю и окажусь неправ. Страшно, что это действительно было везение и в следующий раз не сработает. Минхо кивнул, как будто ожидал этого ответа. — Ты думаешь, я не боюсь? — спросил он. Джисон поднял голову. — Когда мы сидели здесь в тот вечер и не понимали, что случилось с продом, — Минхо говорил медленно, будто вытаскивал слова из глубины, — я не знал, что делать. Я не знал. И это... — он замолчал, подбирая слово, — это было тяжело. — Вы не выглядите как человек, который не знает, что делать, — сказал Джисон. — Навык, — Минхо усмехнулся. — Когда ты руководишь командой, ты не можешь показывать неуверенность. Иначе команда тоже начнёт сомневаться. — А сейчас? — спросил Джисон. — Вы показываете? Минхо посмотрел на него. Взгляд стал другим — мягче, что ли. — Сейчас показал, — сказал он. Джисон замер. В горле встал ком. — Зачем? — Потому что ты спросил. Потому что ты сейчас в том же состоянии, в котором был я. И я подумал... — Минхо замолчал, будто подбирал слова. — Я подумал, что тебе не обязательно проходить через это одному. Джисон смотрел на свои руки. Пальцы дрожали. — Минхо-сси, — сказал он. — Вы правда думаете, что мой код хороший? — Я не говорю того, чего не думаю. — Тогда... — Джисон поднял голову. — Тогда я постараюсь поверить. Минхо кивнул. Потом открыл рюкзак, который стоял у ножки стола, достал бутылочку орехового сиропа и поставил перед Джисоном. — Пей, — сказал он. — А то выглядишь как смерть. Джисон посмотрел на бутылочку, потом на него. Усмехнулся. — Вы носите сироп с собой? — Не твоё дело. Джисон взял бутылочку. Встал. У двери обернулся. — Минхо-сси. — Да? — Спасибо. Минхо уже смотрел в ноутбук, но уголок его губ дрогнул. — Иди работай, — сказал он.<-- ✦ -->
Вечером, когда офис опустел, Джисон сидел за своим столом и смотрел на экран. Репозиторий был открыт. Строчка «Автор: Хан Джисон» всё ещё горела на нём. Он смотрел на неё долго. Потом закрыл файл, открыл редактор и начал писать новый скрипт. Тот, который боялся показать две недели. С комментариями, которые никто, кроме него, не поймёт. С переменными, которые называл так, как ему удобно. Закончил он через час. Прошёлся по строчкам, проверил ошибки. В одном месте оставил комментарий:«// здесь можно было бы сделать красиво, но я устал. может, в следующей версии».
Он открыл пул-реквест, в графе «ревьюеры» написал minho_lee. Пальцы замерли над клавиатурой. Сердце колотилось. Но он нажал «отправить». Ответ пришёл через десять минут. minho_lee: «Нормально» Джисон усмехнулся.jisung_h: «Только нормально?»
minho_lee: «Комментарий про "я устал" убери. В остальном — можно» Джисон посмотрел в сторону переговорной. Минхо сидел за столом, смотрел в ноутбук.jisung_h: «Не уберу»
minho_lee: «...»jisung_h: «Я устал, когда это писал. Почему я должен это скрывать?»
Минхо не отвечал минуту. Потом две. Джисон уже начал думать, что перегнул, когда пришло сообщение. minho_lee: «Ладно. Оставляй» Джисон улыбнулся и убрал телефон.<-- ✦ -->
Он сидел в пустом офисе, смотрел на зелёные строчки мониторинга и думал о том, что произошло. О том, как Минхо сказал «я тоже боюсь». О том, как достал сироп. О том, как уступил в споре про комментарий. Он открыл репозиторий. Строчка «Автор: Хан Джисон» всё ещё горела на экране. И в этот раз он не захотел прятаться. Телефон пиликнул. minho_lee: «Ты ещё в офисе?» Джисон поднял голову. В переговорной горел свет. Минхо сидел за своим столом и смотрел на него через стекло.jisung_h: «Да. Дописываю тесты»
minho_lee: «Уже поздно»jisung_h: «Я знаю»
minho_lee: «Иди домой»jisung_h: «А вы?»
minho_lee: «Я потом» Джисон посмотрел на экран, потом на Минхо. Тот уже отвернулся к ноутбуку. Но Джисон знал — он чувствовал — что Минхо ждёт. Ждёт, пока он уйдёт, чтобы тоже выключить компьютер и пойти домой. Он начал собирать вещи. Когда проходил мимо переговорной, Минхо поднял голову. — До завтра, — сказал он. — До завтра, — ответил Джисон. Он сделал шаг к выходу, потом остановился. Развернулся. — Минхо-сси. — Да? — Вы сегодня сказали, что я не должен проходить через это один. — Джисон посмотрел на него. — Вы тоже. Если что — я здесь. Минхо смотрел на него долго. В его глазах было что-то, чему Джисон не мог подобрать название. Удивление? Благодарность? — Спасибо, — сказал Минхо наконец. Джисон кивнул и вышел в коридор. В лифте, когда двери закрылись, он прислонился к стене и закрыл глаза. Сердце колотилось где-то в горле, но это был не страх. Он улыбнулся.<-- ✦ -->
Изменения начались с мелочей. Во вторник утром Джисон пришёл в офис в 8:30 и застал Минхо у кофемашины. Тимлид стоял спиной, наливал кофе, и его плечи были напряжены — как всегда в первой половине дня, когда он ещё не успел выпить свою норму кофеина. Джисон хотел пройти мимо, сделать вид, что ему нужно срочно к столу. Но ноги сами остановились. — Доброе утро, — сказал он. Минхо обернулся. Кивнул. — Доброе. Джисон взял стакан, нажал кнопку. Кофе потёк, заполняя ёмкость тёмной, пахнущей горечью жидкостью. Рядом стояла коробка с сиропами. Он посмотрел на ореховый, потом на Минхо. — Будете? — спросил он, протягивая бутылочку. Минхо посмотрел на неё. Секунду. Другую. — Две дозы, — сказал он. Джисон нажал помпу. Раз. Второй. Добавил молока. Протянул стакан. Минхо взял, сделал глоток. Лицо его осталось непроницаемым, но он не поморщился, как в прошлый раз. — Нормально, — сказал он. — Вы так каждый раз будете говорить? — Джисон улыбнулся. — Пока не перестанешь спрашивать. Они стояли у кофемашины, пили кофе, и это было странно — быть рядом с Минхо в утренней тишине, когда в офисе ещё никого нет, и не чувствовать привычного напряжения. Только тепло от стакана в ладонях и запах кофе, смешанный с ореховым сиропом. — У тебя сегодня код-ревью, — сказал Минхо, не глядя на него. — Тот пул-реквест, который ты прислал. — Я помню. — Я буду строг. — Я знаю. Минхо посмотрел на него. В его глазах мелькнуло что-то, похожее на усмешку. — Иди работай, — сказал он. Джисон кивнул и пошёл к своему столу. Он чувствовал спиной взгляд Минхо, но не обернулся.<-- ✦ -->
Код-ревью началось в 11:00. Джисон сидел в переговорной напротив Минхо и смотрел, как тот открывает его пул-реквест. На экране ноутбука побежали строчки кода — те самые, которые он писал вчера вечером, с комментариями, с нестандартными переменными, с дурацкой подписью. Минхо читал молча. Джисон следил за его лицом, пытаясь уловить реакцию. Но Минхо оставался невозмутимым — только иногда хмурился или кивал сам себе. — Здесь, — сказал он наконец, указывая на экран. — Зачем ты использовал этот подход? — Он быстрее, — ответил Джисон. — Я прогнал тесты, на больших данных разница в 15%. — А на маленьких? — На маленьких не имеет значения. Минхо посмотрел на него. Взгляд был тяжёлым, оценивающим. Но Джисон не отвернулся. — Почему не оставил стандартное решение? — спросил Минхо. — Потому что я хотел попробовать этот вариант. И он работает. — Ты проверил все крайние случаи? — Да. — Уверен? — Да, — Джисон выдержал его взгляд. — Я проверил дважды. Минхо смотрел на него секунду. Потом кивнул. — Хорошо. Оставляем. Джисон выдохнул. Он не заметил, что задерживал дыхание. Дальше Минхо прошёлся по остальным замечаниям. Три ошибки, которые Джисон действительно пропустил — он их записал, не споря. Один спорный момент, который они обсудили. И комментарий. — Вот это, — Минхо ткнул пальцем в экран. — Убери всё-таки. — Не уберу. — Джисон. — Я устал, когда это писал, — сказал Джисон, и в голосе его не было вызова. Просто факт. — Это правда. Зачем мне её скрывать? Минхо смотрел на него долго. Потом закрыл ноутбук. — Ладно, — сказал он. — Оставляй. Джисон моргнул. Он не ожидал, что Минхо сдастся так быстро. — Всё? — спросил он. — Всё. Исправишь ошибки до обеда и заливаешь. Джисон кивнул и уже встал, когда Минхо добавил: — Тот скрипт, который ты прислал вчера. Я посмотрел его внимательнее. Джисон замер. — И? — спросил он, стараясь, чтобы голос звучал ровно. — Хорошо, — сказал Минхо. — Ты проделал большую работу. Джисон смотрел на него, не веря. Минхо. Хвалит. Не «нормально», не «можно», а «хорошо». И «большую работу». — Спасибо, — сказал он. Голос дрогнул, но только чуть-чуть. Минхо кивнул и открыл ноутбук, давая понять, что разговор окончен.<-- ✦ -->
— Ты сегодня какой-то другой, — сказал Минджэ, проходя мимо. — Какой? — Не знаю. Спокойнее, что ли. — Может, повзрослел. — За один день? — За один разговор. Минджэ хотел что-то спросить, но Джисон уже отвернулся к экрану. Он дописывал последнюю правку, когда в чате пришло сообщение. chanbin_so: «Твой новый скрипт посмотрел. Неплохо» Джисон улыбнулся.jisung_h: «Спасибо»
chanbin_so: «Минхо сказал, что ты спорил с ним про комментарий»jisung_h: «И оставил его в итоге»
chanbin_so: «Он редко уступает. Ты знаешь?» Джисон посмотрел в сторону переговорной. Минхо сидел за столом, разговаривал с кем-то по телефону, жестикулировал.jisung_h: «Догадываюсь»
Он убрал телефон и вернулся к работе.<-- ✦ -->
Вечером, когда офис опустел, Джисон задержался дописать тесты. Он сидел за своим столом, слушал тишину и думал о том, что изменилось за последние дни. В переговорной горел свет. Минхо всё ещё был здесь. Джисон открыл чат.jisung_h: «Вы ещё не ушли?»
Ответ пришёл через минуту. minho_lee: «Нет. Допиваю отчёт» Джисон замер, перечитал сообщение. Усмехнулся.jisung_h: «Допиваете?»
minho_lee: «Дописываю» minho_lee: «Телефон путает»jisung_h: «Конечно. Телефон»
Ответа не было. Но Джисон знал — он чувствовал — что Минхо сейчас сидит за столом и, возможно, улыбается. Или делает вид, что нет.jisung_h: «Кофе?»
minho_lee: «Закончился»jisung_h: «Я принесу»
Он встал, прошёл к кофемашине. Налил два стакана. В один добавил ореховый сироп — две дозы, молоко. Второй оставил чёрным. Подошёл к переговорной, открыл дверь. Минхо поднял голову. Джисон протянул стакан. — Ваш, — сказал он. Минхо взял. Сделал глоток. В переговорной было тихо, и в этой тишине Джисон чувствовал себя странно — спокойно, без привычного желания что-то доказывать. — Можно спросить? — сказал он. — Спрашивай. — Вы поэтому задержались вчера? Чтобы посмотреть мой скрипт? Минхо смотрел на него поверх стакана. Не ответил. — Чанбин сказал, — добавил Джисон. — Что вы редко задерживаетесь. — Чанбин слишком много говорит, — сказал Минхо. — Это правда? Минхо молчал долго. Потом поставил стакан на стол. — Я задержался, потому что хотел посмотреть его до ревью, — сказал он. — Чтобы утром не тратить время. Джисон ждал. Он чувствовал, что это не всё. — Твой код... — Минхо замолчал, будто подбирал слова. — Он нестандартный. К этому нужно привыкнуть. Я хотел понять логику заранее. — Чтобы не ошибиться? — спросил Джисон. — Чтобы не пропустить что-то важное. Джисон смотрел на него. Минхо, который всегда всё контролирует, потратил вечер, чтобы разобраться в его коде. Не чтобы найти ошибки. Чтобы понять. — Спасибо, — сказал он. Минхо кивнул. Они стояли в переговорной, пили кофе, и в тишине вечернего офиса это было почти нормально — быть рядом, не спорить, не доказывать. — Минхо-сси, — сказал Джисон. — Да. — Вы сегодня сказали, что я проделал большую работу. — Сказал. — Это... — Джисон замолчал, подбирая слова. — Это много для меня значит. Минхо смотрел на него. В глазах не было обычной резкости. — Знаю, — сказал он. Джисон улыбнулся. — Вы всегда так мало говорите? — Когда нечего сказать. — А когда есть? Минхо посмотрел на него долго. Потом поставил стакан на стол. — Иди домой, Джисон-сси. Завтра новый день. Джисон кивнул, допил свой кофе и направился к выходу. У двери он обернулся. — Минхо-сси. — Да. — Завтра я приду пораньше. Чтобы успеть сделать кофе до того, как вы выпьете свой. Минхо усмехнулся. Коротко, почти незаметно, но Джисон увидел. — Договорились, — сказал он.<-- ✦ -->
В лифте Джисон прислонился к стене и закрыл глаза. Сердце колотилось где-то в горле, но это был не страх. Это было что-то другое. Что-то, чему он пока не мог подобрать название. Завтра будет новый день. Завтра он придёт пораньше, сделает кофе, поспорит с Минхо о коде, оставит дурацкий комментарий. И это будет нормально. Это будет его жизнь. Он хотел, чтобы так было и дальше.<-- ✦ -->
Джисон не хотел себе признаваться. Он спас релиз. Его скрипт добавили в репозиторий. Минхо сказал, что он проделал большую работу. Всё шло хорошо. Но каждый раз, когда он ловил себя на мысли, что приходит в офис раньше, чтобы застать Минхо у кофемашины, внутри что-то сжималось. Каждый раз, когда он смотрел, как Минхо пьёт кофе — чёрный, без сиропа, всегда одинаково, — он чувствовал, что это становится привычкой. Опасной привычкой. Он не знал, когда это началось. Может, в тот вечер, когда Минхо впервые взял у него стакан и сделал глоток. Может, раньше. Может, в первый день, когда он увидел его в переговорной. Джисон закрыл ноутбук и откинулся на спинку стула. В секции было тихо, только гудели системные блоки да где-то в коридоре работала кофемашина. Он посмотрел на переговорную. Свет горел. Минхо всё ещё был здесь. Он встал, прошёл к кофемашине. Хотел налить себе, но рука замерла над кнопкой. Не хотелось. Он просто стоял, смотрел на коробку с сиропами, и думал о том, что сегодня в обед Чанбин сказал ему: «Он ради тебя задержался вчера. Я такого не видел». Что это значило? Что Минхо задержался, чтобы посмотреть его код? Чтобы разобраться? Чтобы не ошибиться? Он повернулся, чтобы идти обратно, и замер. Из коридора доносились голоса. Негромкие, но в тишине пустого офиса каждое слово было слышно. — ...я не слепой, Минхо. — Это был Чанбин. — Ты сам видишь, что происходит. — Ничего не происходит. — Ты пьёшь из его стакана. Ты улыбаешься, когда он говорит. Ты задерживаешься, чтобы разобрать его код. Я три года работаю с тобой. Я никогда не видел тебя таким. Джисон замер. Он знал, что не должен подслушивать. Знал, что нужно развернуться и уйти. Но ноги не слушались. — Чанбин. — Он твой стажёр, Минхо. Через три месяца он уйдёт в другую команду. Или останется, но не у тебя. Это политика компании. — Я знаю. — Тогда зачем? Пауза. Джисон слышал, как стучит его сердце. Или это было чужое? — Я хочу, чтобы он остался, — голос Минхо звучал глухо. — В компании. Не в моей команде — неважно. Просто чтобы был рядом. Джисон прислонился к стене. В голове пульсировало: «Просто чтобы был рядом». Минхо сказал это. Минхо. Который никогда никого не подпускал близко. Который пил кофе один, работал один, уходил из офиса последним. — Будь осторожен, — сказал Чанбин. — Если кто-то узнает, будут проблемы. Не у тебя. У него. Шаги Чанбина удалились. Джисон стоял, не дыша. В переговорной снова зажёгся свет — Минхо остался. Он развернулся и пошёл к своему столу, стараясь ступать тихо. Сел, уставился в тёмный экран ноутбука. Внутри всё дрожало. Минхо сказал: «Просто чтобы был рядом». Не «как разработчик». Не «как стажёр». Просто — рядом. Он сидел, смотрел на своё отражение в чёрном стекле монитора и не мог думать. Только чувствовал, как внутри всё переворачивается. Он открыл чат. Написал.jisung_h: «Вы ещё не ушли?»
Ответ пришёл через минуту. minho_lee: «Нет. Допиваю отчёт» Джисон усмехнулся. Допиваю. Снова.jisung_h: «Я принесу кофе?»
minho_lee: «Поздно. Иди домой»jisung_h: «Вы тоже идите»
Минхо не ответил. Джисон смотрел на экран и ждал. Минуту. Две. Пять. Минхо не писал. Но и не уходил. Джисон встал. Прошёл к кофемашине. Налил два стакана. В один добавил ореховый сироп — две дозы, молоко. Второй оставил чёрным. Подошёл к переговорной. Открыл дверь. Минхо поднял голову, и Джисон увидел в его глазах что-то, чего не видел раньше. Не спокойствие, не сосредоточенность. Что-то другое. Что-то, от чего у него перехватило дыхание. — Я же сказал идти домой, — голос Минхо звучал ровно, но в нём не было привычной жёсткости. — Вы тоже, — Джисон поставил стакан на стол. — Ваш. Чёрный. Минхо взял стакан. Сделал глоток. Не отрывая взгляда от Джисона. — Ты слышал? — спросил он. Джисон замер. Вопрос прозвучал ровно, но в нём не было сомнения. Минхо уже знал ответ. — Слышал, — сказал он. Минхо кивнул. В его глазах не было страха, не было сожаления. Только усталость. И что-то ещё, чему Джисон не мог подобрать название. Джисон сел напротив. Взял свой стакан. Сделал глоток. Кофе был горячим, сладким, как он любил. Но вкус не чувствовался. — Я не умею это делать, — сказал Минхо. — Говорить. Объяснять. Я думал, если молчать, это пройдёт. — Не прошло? — спросил Джисон. — Нет. Джисон смотрел на свои руки. Пальцы сжимали стакан. Он хотел спросить: «Что вы чувствуете?». Хотел сказать: «Я тоже». Хотел встать, подойти, сделать что-то. Но он сидел и молчал. — Через три месяца стажировка закончится, — сказал Минхо. — Ты уйдёшь в другую команду. Или останешься, но не у меня. Это политика. — Я знаю. — Тогда, может, проще сделать вид, что ничего не было. Джисон поднял голову. Минхо смотрел на него, и в его глазах была такая тоска, что у Джисона защемило в груди. — Вы правда хотите сделать вид? — спросил он. Минхо молчал долго. Потом покачал головой. — Не хочу. Джисон выдохнул. Он не заметил, что задерживал дыхание. — Я тоже, — сказал он. Минхо смотрел на него. В его глазах мелькнуло что-то, похожее на облегчение. Или надежду. Джисон не был уверен. Они сидели в тишине. Кофе остывал. За окном темнело. Джисон чувствовал, как между ними натягивается что-то невидимое, хрупкое, важное. — Что мы будем делать? — спросил он. — Не знаю, — Минхо смотрел на него. — Я никогда не был в такой ситуации. — Я тоже. Минхо усмехнулся. Коротко, почти беззвучно. — Ты всегда говоришь, что тоже, — сказал он. — Потому что мы в одной ситуации. Минхо кивнул. Помолчал. — Значит, будем разбираться вместе. Джисон смотрел на него. Минхо сказал «вместе». Не «ты сам», не «я решу». Вместе. — Минхо-сси, — сказал он, не глядя на него, глядя на свой стакан, на тёмную жидкость на дне. — Можно я буду приходить по утрам? Делать кофе. Просто стоять рядом. Не надо ничего объяснять. Тишина затянулась. Джисон чувствовал, как колотится сердце. Потом Минхо сказал: — Можно. Джисон поднял голову. Минхо смотрел на него, и в его глазах не было привычной маски. Только он. Только сейчас. Джисон улыбнулся. Впервые за этот вечер — по-настоящему. — Идёмте домой, — сказал он, вставая. — Завтра новый день. Минхо допил свой кофе. Встал. Они вышли в коридор, прошли мимо тёмных столов, мимо кофемашины, к лифту. В лифте Джисон стоял рядом с Минхо. Между ними было меньше метра. Он чувствовал тепло его тела, запах парфюма — цитрус и дерево. Их плечи почти касались. Джисон смотрел на тень Минхо, которая падала на стену лифта рядом с его тенью, и думал: они почти соприкасаются. Как и они сами. Хотелось сделать шаг. Просто шаг. Он не сделал. Лифт открылся на первом этаже. Они вышли в вечерний город. Фонари горели, машины ехали, люди шли по своим делам. Всё было как обычно. Но для Джисона всё изменилось. Они шли рядом. Не касаясь, но Джисон чувствовал присутствие Минхо всем телом. Каждый шаг отдавался в груди. — До понедельника, — сказал Минхо. — До понедельника, — ответил Джисон. Они разошлись в разные стороны. Джисон шёл к станции и чувствовал, как внутри разливается что-то тёплое, тягучее, опасное. Он знал, что это — надежда. И не хотел от неё избавляться.