Баг-репорт

    Меня зовут Антон. Я старший тестировщик.
    Восемь лет. 4 387 багов. Я считал.
    Цифры не врут.
    Утром телефон пиликнул в 7:28. Кофемашина. Умная. Я сам настроил — Bluetooth, приложение, эспрессо ровно в 7:30. Две минуты запас — чтобы успеть встать, дойти до кухни, подставить чашку. Кофемашина знает. Кофемашина — единственное устройство в доме, которое меня слушается.
    Открываю приложение. Экран горит синим. Кнопка «эспрессо» на месте. Нажимаю. Ничего. Нажимаю еще раз. Второе нажатие срабатывает. Машина загудела, закапало. Черный. Душистый.
    Но баг. Кнопка реагирует на второе нажатие. Не на первое.
    Проверяю. Еще раз. Заливаю новую порцию воды. Нажимаю один раз — лед. Нажимаю второй — бодрость.
    То же самое.
    Открываю службу поддержки. Пишу. Подробно. Модель кофемашины: ECAM 350. Версия прошивки: 2.14. Шаги воспроизведения:
    1. Запустить приложение.
    2. Нажать кнопку «эспрессо» один раз.
    3. Наблюдать отсутствие реакции.
    4. Нажать второй раз.
    5. Наблюдать корректную работу.
    Ожидаемое поведение: реакция на первое нажатие. Фактическое поведение: реакция на второе.
    Прикладываю скриншот. Круг зеленой стрелкой обвел — там, где кнопка. Комментарий: «Баг воспроизводится стабильно, 100%». Ставлю статус «критический». Потому что кофе без первого глотка — не кофе. Это ожидание. А ожидание — это баг.
    Кофе тем временем налился. Я поднес чашку ко рту, сделал глоток — холодный. Пока писал, пока прикладывал, пока рассуждал о критичности — кофе остыл. До комнатной температуры.
    Вылил. Заварил новый.
    Опять холодным.
    В метро людей было много, но я сидел — потому что еду от конечной. Вошел в вагон, сел, достал телефон. Чат коллег горел красным уведомлением — сорок семь непрочитанных. Я читаю редко, но когда читаю — читаю все. От первого до последнего. Потому что баг может быть где угодно. Даже в чате.
    Коллеги обсуждали ресторан. Новый, рядом с офисом — «Рыба и хлеб». Повар из Питера, интерьер в стиле лофт, в меню северная кухня. Кто-то скинул ссылку. Кто-то сказал: «Надо сходить в обед». Кто-то добавил: «Антон, ты с нами?»
    Я открыл меню. Сайт грузился долго — семь секунд. Баг, но некритичный. Потом открылась первая страница.
    Три орфографические ошибки.
    «Семга» через «е». У них «семга». Я понимаю, упрощение, разговорный вариант. Но в меню ресторана, где позиция стоит 890 рублей — должна быть грамотность.
    «Бизнес-ланчь» с мягким знаком. Твердый знак. Ланч — не ланчь. Ланч — это обед. Ланчь — это не слово.
    И «гренки» — одно «н». В слове «гренки» два «н». Гренки от слова «гренок». Гренок — одна «н». Почему я помню? Потому что проверял.
    Логическая ошибка — «суп дня» в разделе «Десерты». Я перепроверил пять раз. Раздел «Десерты». Там чизкейк, брауни, тарталетка — и «суп дня». Суп дня не может быть десертом. Даже если это суп из клубники.
    Фактическое несоответствие — «свежевыловленная семга» в Москве. Февраль. Свежевыловленная была бы только если ресторан держит аквариум с проточной водой в подсобке. Или если повар лично летал на Мурманск утренним рейсом и вернулся с уловом в ручной клади.
    Пишу в чат: «Меню сырое. Я в другой раз».
    Коллеги написали «ок». Потом «будь проще». Потом «ладно, без тебя сходим». Я не ответил. Смайлики не мое.
    Вышел на «Курской». Эскалатор длинный, люди бегут вверх. Я стоял справа. Читал новости. Какая-то компания обновила дизайн сайта — пишут, стало удобнее. Я зашел проверить. Не стало удобнее. Через два клика потерялся. Баг. Не мой — не пишу.
    В офисе пахло кофе и офисными духами — смесью озона, бумаги и чужой еды. Я прошел к своему столу. Угловое место, у окна. Слева стопка документов, справа чашка с остатками утреннего кофе — я забыл помыть. Два монитора, на одном — дашборд с багами, на другом — пустой рабочий стол. Иконок нет. Я терпеть не могу иконки. Иконки — это баги восприятия.
    Стендап в десять. Комната переговоров «Атом». Белые стены, маркерная доска, запах маркеров — спиртовой, резкий. Дима уже стоял у доски. Менеджер. Тридцать пять, лысеющий, в свитере оверсайз. Он всегда так одевается после того, как кто-то в прошлом году сказал «надо носить что-то посвободнее — для здоровья». Дима посвободнее понял буквально. Теперь в его свитере можно прятать три ноутбука и кота.
    — Ребята, — сказал Дима, — на этот раз все чисто. Я проверил.
    Семь секунд я молчал. Восемь. Девять. Коллеги переглядывались. Кто-то откашлялся. Я открыл ноутбук.
    — Баг номер один, — сказал я. — Форма авторизации. При переключении раскладки клавиатуры теряются данные в поле «пароль». Проверял на трех браузерах, на двух операционных системах. Воспроизводится везде.
    Дима смотрел на доску. Я переключил проектор, показал. Сначала русская раскладка — буквы вводятся нормально. Переключаю на английскую — половина символов пропадает.
    — Баг номер два, — сказал я. — Счетчик уведомлений. После прочтения сообщения цифра не обнуляется. Клик — ноль. Клик — все еще «3». Клик — «2». Клик — «3». Хаотичное поведение.
    Дима повернулся ко мне.
    — Баг номер три, — сказал я. — Выход из системы. Кнопка дублируется. Левая работает, правая — нет. Пользователь нажимает правую — думает, что что-то сломалось. Пишет в поддержку. Поддержка завалена ложными обращениями.
    Дима смотрел. Я смотрел на него.
    — Четыре, — сказал я. — Скролл на мобильной версии. Зависает на третьем экране.
    — Антон, — сказал Дима. — Хватит.
    — Есть еще пятый.
    — Я сказал — хватит.
    Я закрыл ноутбук. В комнате стало тихо. Слышно было, как за стеной кто-то пил кофе. Как тикало что-то — часы на стене, которых раньше не было.
    — Ты дома тоже так? — спросил Дима.
    — Я живу один, — сказал я.
    Пауза.
    Коллега Яна за столом напротив опустила глаза. Дима потер лоб.
    — Логично, — сказал он.
    Стендап закончился. Релиз перенесли на завтра. Дима вышел курить. Я остался в комнате. Смотрел на доску. Там был написан план и стрелочки. Стрелочки вели из «тестирование» в «релиз». Но между ними — красным маркером — кто-то написал «Антон».
    Обед прошел в одиночестве.
    Бутерброд из дома. Хлеб цельнозерновой, курица, лист салата, помидор. Катя когда-то говорила, что надо есть полезное. Катя была женой. Три года назад ушла. Собрала чемодан, вызвала такси, на пороге сказала: «Антон, ты находишь ошибки везде кроме себя».
    Я подумал: «Неточная формулировка. Я нахожу ошибки и в себе — просто не исправляю». Промолчал.
    Это тоже был баг. Промолчал.
    Катя уехала. Такси было желтое, с шашечками. Номер я запомнил — 437. Он потом всплывал в отчетах, в каких-то документах, в почте. 437. Я не искал. Само всплывало.
    Ем бутерброд. На столе — инструкция к новому чайнику. Купил вчера в «М.Видео», на распродаже. Чайник — пластик, нержавейка, подсветка синяя. Инструкция на восьми языках. Не тощая книжка — плотная, глянцевая, с картинками. На каждой картинке человечек с улыбкой. Показывает, как наливать воду.
    Русский текст открываю первым. Читаю. Три ошибки на первой странице. Две — на второй. Пятая ошибка — не орфография, логика. «Не погружайте основание в воду». Через абзац: «Допускается влажная очистка основания влажной тканью». Влажная ткань — это вода. Противоречие.
    Фотографирую страницу. Отправляю производителю через форму обратной связи на сайте. Пишу: «Инструкция содержит логическую ошибку. Противоречие между пунктами 4 и 8. Прилагаю снимок. Благодарю за внимание. Антон Соболев, старший тестировщик».
    Производитель не ответит. Я знаю. Я отправлял уже четыре раза. Четыре чайника, четыре инструкции, четыре раза молчание. Один раз ответил робот: «Ваше обращение принято, мы свяжемся с вами в ближайшее время». Ближайшее время длится полтора года.
    Я все равно отправляю. Потому что, если не отправлять, баг не будет зафиксирован. А незафиксированный баг — это не баг. Это просто неправильно работающая вещь, о которой никто не знает.
    Как я, например.
   
    Вечером — свидание.
    Первое за полгода. Коллега Яна уговорила. Она единственная в офисе, кто со мной разговаривает не только по работе.
    — Антон, — сказала она вчера, стоя у моего стола. — Ты хороший. Просто тяжелый.
    — Спасибо.
    — Это не комплимент.
    — Я знаю.
    — Просто познакомься. Она нормальная.
    — Что значит «нормальная»?
    — Не ищет баги в людях.
    — Я не ищу баги в людях.
    Яна посмотрела на меня. Я на нее.
    — Я ищу баги в процессах, — сказал я. — Люди — это не процессы.
    — Люди — это тоже процессы. Биологические, социальные, эмоциональные. — Яна покачала головой. — Ты такой же процесс. Но ты не находишь баги в себе.
    — Нахожу.
    — Не исправляешь.
    Я промолчал. Яна ушла. Через час скинула контакт. Имя — Марина. Фото — улыбается, на фоне здания. Симпатичная.
    Я написал. Она ответила. Мы договорились встретиться в кафе — не в том, где баги в меню, в другом. Я проверил — в том меню ошибок не было. По крайней мере, на сайте.
    Пришел раньше на двенадцать минут. Двенадцать — это число, которое я выбрал. Не пятнадцать — не слишком рано. Не десять — не слишком поздно. Двенадцать. Оптимум.
    Сесть за столик у окна. Вид на улицу — чтобы видеть, как подходит. Взял меню. Пролистал. Ошибок нет. Расхождений с ценами на доске нет. Все корректно.
    Заказал чай — листовой, улун. Марина не пришла еще.
    Ждал. Смотрел на улицу. Прохожие, пальто, шапки. Февраль. Холодно. Женщина с собакой остановилась у витрины, собака хотела в другую сторону, они спорили. Потом женщина сдалась. Собака повела ее налево.
    У входа появилась фигура. Пальто, волосы распущены, щеки красные. Марина. В кармане телефон — я проверил фото, она.
    Она подошла к столику. Скинула пальто. Села.
    — Привет, — сказала.
    — Привет, — сказал я.
    — Ты рано.
    — Всегда прихожу раньше. Чтобы проверить стол, меню, освещение, эвакуационные выходы.
    Она посмотрела на меня. Внимательно.
    — Шучу, — сказал я.
    — Ты странный, — сказала она. Улыбнулась. Нормально.
    Разговор пошел. Она архитектор, рассказывала про проекты. Жилой квартал в Подмосковье, школа в Некрасовке. Говорила быстро, умно, с цифрами. Я слушал. Кивал. Смотрел на ее руки — не накрашены, короткие ногти. Практичная.
    Заказали. Она капучино. Я чай.
    Подошел официант. Бейдж — «Стажер». Молодой парень, лет девятнадцати, в рубашке на размер больше.
    — Прошу прощения, — сказал я. — У вас расхождение.
    Официант замер.
    — На доске, у входа, капучино стоит двести девяносто. В меню — триста двадцать.
    Он посмотрел на доску — в ту сторону, где стекло и улица. Потом на меню.
    — Триста двадцать, — сказал он. — Доска старая, не обновили.
    — Тогда доску надо обновить. — Я говорю спокойно. — Это вводит посетителей в заблуждение. По закону о защите прав потребителей вы обязаны продавать по меньшей цене.
    Он ушел. Молча. Марина смотрела в окно.
    — Зачем? — спросила.
    — Что?
    — Это.
    — Я поправил ошибку.
    — Это не твоя ошибка. Ты не владелец кафе.
    — Но я ее нашел.
    Она подняла глаза от окна. Я держал чашку с улуном. Чай был горячий. Не кипяток, как я люблю, — но горячий.
    — Ты всегда такой? — спросила.
    — Какой?
    — Который ищет, к чему придраться.
    Повисла пауза — четыре секунды. До того момента, когда обычно я начинаю перечислять.
    — Я не придираюсь, — сказал я. — Я нахожу баги.
    — В чем разница?
    — Баг — это факт. Придирка — это оценка.
    — А как люди реагируют на твои баги?
    — По-разному. Некоторые благодарят. Некоторые — нет.
    — А я как реагирую?
    — Ты спросила. Это уже лучше, чем молчание.
    Она не улыбнулась. Взяла капучино. Сделала глоток. Я рассматривал ее лицо — брови чуть нахмурены, но не зло. Скорее — растерянно. Как человек, который читает инструкцию на восьми языках и находит противоречие.
    Потом разговор пошел снова. Она рассказывала про жилой квартал. Я слушал. Иногда кивал. Иногда смотрел на часы — не потому, что скучно, потому что привык контролировать время.
    — ...и там три корпуса, восемьсот квартир, подземный паркинг на двести машин...
    — Двести на восемьсот? — перебил я.
    — Да.
    — Это 0.25 на квартиру. Норматив — 0.7.
    Она поставила чашку.
    — Я знаю.
    — Как решаете?
    — Дополнительная парковка на поверхности.
    — Но в концепции, которую ты показывала, там зеленая зона. Где вы разместите парковку?
    Марина смотрела на меня. Взгляд — градусов на пять холоднее, чем чай в моей кружке.
    — Антон, это первое свидание.
    — Я понимаю.
    — Ты разговариваешь как на совещании. С багами, приоритетами, шагами воспроизведения.
    — Это профессиональное.
    — Это не профессиональное. Это — отсутствие фильтра.
    Она права.
    Я молчу. Смотрю на скатерть — клетчатая, синяя с белым.
    На тарелке крошки от принесенного к чаю печенья. Дома такое же покупаю. «Юбилейное».
    — Твоя школа, — говорю. — В Некрасовке. Там въездные ворота.
    — Что с ними?
    — Ширина три метра. По нормам для школ — четыре двадцать. Скорая не проедет.
    Марина встала.
    — Я поеду, — сказала. Надела пальто. Руки у нее дрожали.
    — Марина.
    — Ты хороший. — Она застегнула первую. — Правда. Умный, внимательный. Но тяжелый.
    — Я не тяжелый. Я точный.
    — Это одно и то же.
    Она ушла. Пальто скрылось за дверью. Я остался. Допив чай, взял счет. 640 рублей — капучино, улун, два печенья. Положил на стол 700 — сдачи не надо.
    Официант посмотрел. Я посмотрел на него.
    — Доску все равно поменяйте, — сказал я. — Моя девушка ушла. Расхождение цен осталось.
    Он не понял. Я вышел.
   
    На улице было холодно. Москва, февраль, минус восемь. Я шел к метро пешком — не торопился. Прошел мимо той доски. Цена 290. Яркая, прямо у входа. Наверное, ее повесили в прошлом году. Краска не выцвела. Дерево не треснуло.
    Можно было оторвать. Но кому это нужно?
    Яна позвонила через час. Я сидел в трамвае — ехал домой не на маршрутке, просто сел в трамвай и поехал. За окнами — огни, витрины, люди.
    — Ну как? — спросила Яна.
    — Нормально.
    — Почему тогда Марина написала «без комментариев»?
    — Похоже, я снова что-то не учел.
    — Ты сказал про парковку?
    — Да.
    — Антон.
    — И про ворота в школе.
    — Господи.
    — И про цены на капучино.
    Яна выдохнула. Я представил, как она сидит на кухне, трет лоб.
    — Послушай, у тебя тоже есть баги. Но самый главный баг — это ты сам.
    — Я знаю.
    — Знаешь — но не чинишь.
    — Не знаю как.
    Яна молчала. Потом сказала: «Езжай домой. Погладь кота. Завтра на работу».
    Я вышел из трамвая. Прошел два квартала. Ключи нашел в кармане куртки. Ключей было пять — от квартиры, от почтового ящика, от работы, от велосипеда, который стоит на балконе с прошлого лета, и ключ от маминой квартиры — она в Серпухове, я не был год.
    Дома — тихо. Нулл. Кот рыжий, трех лет, полосатого окраса. Когда брал, думал — будет ловить мышей. Мышей нет. Нулл ловит тени. И иногда мои носки.
    Имя — из программирования. Null. Пустое значение.
    Катя предлагала назвать «Васькой» или «Борисом». Я сказал — давай нормальное имя. Катя обрадовалась. Я назвал Нулл.
    — Вот именно, — сказала Катя.
    Собрала чемодан через месяц.
    Нулл сидел на диване. Я сел рядом.
    — Ну что, — сказал. — Опять.
    Нулл моргнул. У него моргание медленное, как у валидольной лампы.
    — Ты хоть не находишь во мне баги?
    Нулл посмотрел. Встал. Ушел в спальню. Я слышал, как он полежал, потом спрыгнул с кровати на пол. Потом залез обратно.
    — Понял, — сказал я.
    Разделся. Почистил зубы — не мятной, обычной пастой. Посмотрел в зеркало. Щетина, мешки под глазами, нос красный — на улице холодно. Морщины — новые, те, которых не было в прошлом году.
    4 388 — это я насчитал. Еще один, новый.
    Открыл ноутбук. Свет синий, от экрана. Нулл пришел, лег на колени. Теплый.
    Создаю документ. Называю: «Баг-репорт. Личная жизнь. Версия 3.0».
    Версия 1.0 была с Катей. Мы прожили четыре года. Багов было много. Критических — хватило, чтобы разойтись.
    Версия 2.0 — год без Кати. Пустота. Нулл на коленях, холодный кофе по утрам.
    Версия 3.0 — после долгого перерыва. После Марины.
    Пишу:
    Окружение: реальная жизнь, Москва, февраль, минус восемь. Подтвержденное оборудование: я. Прошивка: Антон Соболев, версия 37 лет.
    Предусловия: быть одному. Долго. Привыкнуть. Забыть, что люди не тестируют друг друга.
    Шаги воспроизведения:
    1. Познакомиться с женщиной.
    2. Не искать баги.                      
    3. Найти.
    4. Сообщить.
    5. Потерять.
    Ожидаемый результат: нормальные отношения.
    Фактический результат: кот на коленях, курсор мигает.
    Приоритет: критический.
    Статус: в работе. Open.
    Назначить: мне.
    Смотрю на экран. Нулл поднял голову, принюхался к клавиатуре.
    — Добавлю, — говорю.
    Примечание: возможно, это не баг. Возможно, это фича. Не документировано. Уточнить у разработчика.
    Нулл чихнул прямо на пробел. Клавиша залипла. Курсор бешено помчался вправо, разгоняя слова и оставляя после себя бесконечную, пугающую пустоту.
    — Спасибо, — сказал я. — Все с багами.
    Нулл хотел уйти. Я не пустил. Держал.
    За окном — Москва. Огни. Движение. Светофор на углу мигнул красным. Потом зеленым. Потом опять красным. Все по инструкции.
    Закрыл ноутбук.
    Баг-репорт не отправил. Ни в службу поддержки кофемашин, ни производителю чайников, ни в ресторан «Рыба и хлеб», ни в кафе, где доска с расхождением цен.
    Оставил.
    На диске.
    В папке «Личное».
    Под паролем.
    Пароль — 437.