
Полная версия
Золотая лихорадка ИИ-агентов. Делегирование неопределённости

Золотая лихорадка ИИ-агентов
Делегирование неопределённости
Сергей Кирницкий
Иллюстрация на обложке С использованием ChatGPT
© Сергей Кирницкий, 2026
ISBN 978-5-0071-4142-0
Создано в интеллектуальной издательской системе Ridero
Часть I. Сутки
Глава 1. Утро после ночной смены
1.1. Одна фраза вечером
Фраза пишется за несколько секунд: «переведи биллинг на подписки, сделай нормально». Человек, который её набирает, сидит за кухонным столом в двенадцатом часу. День кончился: письма клиентов разобраны, последний звонок был два часа назад, за окном давно темно, в квартире тихо, только гудит холодильник, и до сна остаётся ровно столько, сколько нужно на ещё одно дело. Ради него одного и открыт ноутбук. Написанное он не перечитывает. Отправляет — и с этой секунды задача уходит из его рук. Ещё минуту он смотрит, как на экране бегут первые строки ответа, потом опускает крышку, та закрывается с мягким щелчком, и он встаёт из-за стола с приятным чувством, что работа пошла.
Эти первые строки — уже работа. Они короткие и деловые: какой файл открыт, какая команда запущена, что она ответила, — и сменяют друг друга быстрее, чем их можно прочесть. По ту сторону фразы — ИИ-агент для программирования, и начал он с того же, с чего начал бы опытный программист, пришедший в чужой проект: нашёл в репозитории каталог с платёжным кодом, открыл файл, где создаются счета, прочитал его и запустил тесты, чтобы понять, что сейчас работает, а что нет. Его не надо вводить в курс дела и объяснять, как устроен код. Всё необходимое он найдёт и прочитает сам, а в его распоряжении весь репозиторий, не один платёжный каталог. Закрытая крышка ему не помеха: у него своя копия кода где-то в облаке, и ноутбук на столе больше не нужен. Дальше он будет делать то же самое, только без перерыва: читать файлы и править их, запускать команды и тесты, фиксировать сделанное коммитами и снова читать — шаг за шагом, столько шагов, сколько понадобится, никого ни о чём не спрашивая. Задачу ему дали словами, и других слов не будет. Человек, который их написал, уже гасит свет.
Этого человека не существует. История вымышлена и составлена из многих вечеров — тех, о которых нам рассказывали, и тех, которые мы провели сами, — поэтому у героя нет ни имени, ни названия продукта. Каждую его черту мы видели у живых людей, но все вместе они не принадлежат никому. Известно о нём немного: он основатель небольшого SaaS, сервиса, в котором клиенты работают прямо в браузере и за который платят, и он переводит биллинг на подписки. Узнать в нём можно кого угодно: бывшего коллегу, соседа по офису, себя. Мы себя узнавали. Мы тоже оставляли ИИ-агентов на ночь с одной короткой фразой, тоже закрывали ноутбук, не дождавшись первого коммита, и тоже вставали из-за стола с этим приятным чувством.
Задержимся на самой фразе — на той минуте, когда крышка ещё открыта и курсор стоит после последнего слова. Шесть слов и одна запятая — про ту часть продукта, через которую проходят все его деньги. Их не пришлось подбирать: между словами не было пауз, рука ни разу не потянулась стереть одно и поставить другое. И это не небрежность. Основатель знает свой продукт как никто: первые платежи в нём он когда-то написал сам, крупных клиентов помнит по именам и без запинки объяснит, за что они ему платят. Так ставят задачу почти все — не расписывая, одним словом давая понять, что халтура не нужна. Мы сами десятки раз писали это слово ИИ-агентам и людям, писали и слова той же породы — «по-человечески» и «как положено», — и ни разу не заметили, что за ними осталось недосказанное.
Слово «нормально» поставлено в конец фразы не для красоты. Оно значит: без временных заплаток, так, чтобы потом не переделывать и чтобы код не стыдно было показать коллеге. Между инженерами оно звучит строго, почти как проверка на профессионализм, и тот, кто его пишет, чувствует, что поднимает планку. Задачу это слово не уточняет. Им её заканчивают, как подписью заканчивают письмо, и оно создаёт ощущение, что задача описана целиком: переведи и сделай хорошо — что тут ещё скажешь. Покажи эту фразу любому инженеру, и он, скорее всего, кивнёт: что сделать — понятно, планка названа. Мы бы кивнули сами.
Но в слове «нормально» спрятан целый несделанный мир. Если его развернуть, внутри окажется по меньшей мере три вопроса, и ни один из них не уточняется мимоходом: за каждым — деньги живых клиентов и то, как эти люди будут относиться к продукту завтра.
Первый — какие вообще бывают состояния подписки. Со стороны кажется, что их два: клиент платит или не платит. Но достаточно проследить за одним клиентом хотя бы год, и состояния начинают множиться. Вот он пробует продукт бесплатно две недели — это уже подписка или ещё нет? Вот пробные две недели прошли, а карту он так и не привязал. Вот заплатил. Вот решил уйти, но оплаченный месяц ещё идёт, и он продолжает работать: он клиент или уже бывший? Вот перешёл на тариф подороже посреди месяца. Вот попросил приостановить всё на лето. Вот вернулся через полгода, и непонятно, продолжается прежняя подписка или начинается новая. Каждое такое «вот» либо становится отдельным состоянием, либо нет, и для каждой пары состояний нужно понять, можно ли перейти из одного в другое и что при этом происходит с деньгами. Состояние, о котором никто не подумал, никуда не девается: однажды оно просто наступает, и продукт ведёт себя в нём как придётся. Это похоже на мелкую бухгалтерию. На деле от этого зависит, какую сумму человек увидит в выписке и не почувствует ли он себя обманутым.
Второй — что происходит, когда списание не проходит. Первого числа банк отклоняет карту клиента, который платит уже третий год. Причина может быть любой: карта истекла, на счёте не хватило денег, банк заподозрил неладное, — а продукту нужно действовать сразу. Закрыть доступ немедленно значит, что завтра у человека, с которым три года всё было хорошо, посреди рабочего дня не откроется привычный инструмент. Не закрывать — но тогда на сколько: на день, на неделю, до конца месяца? Как сказать клиенту, что случилось: письмом, строкой в самом продукте или никак? И какими словами? А если через два дня он привяжет новую карту, за какие дни с него брать деньги? И заслуживает ли тот, кто платит три года, больше терпения, чем тот, кто пришёл вчера? Технически в этих вопросах нет ничего трудного. Трудно другое: каждый ответ — обещание, которое продукт даёт человеку в самый неприятный для того момент.
Третий вопрос тише остальных: где кончается биллинг и начинается авторизация. О первых двух рано или поздно напомнят сами клиенты — письмом или отказом платить. О третьем они не напишут никогда: снаружи видно только, пустили их или нет, но не видно, чей код это решил. Биллинг знает, кто сколько заплатил. Авторизация решает, кого и куда пускать. Пока подписок не было, эти две части продукта почти не встречались; теперь им придётся договориться, потому что подписка обещает клиенту то, что входит в его тариф, и кто-то должен проверять, положено ли ему то, что он сейчас пытается сделать. Тариф рассчитан на троих сотрудников, а клиент приглашает четвёртого. Кто ему откажет и в какой момент: когда он нажимает кнопку или когда приходит счёт? Непонятно, чья это работа: кода, который считает деньги, или кода, который проверяет права. Непонятно, кто закрывает дверь, когда подписка кончилась: биллинг сам или он лишь сообщает об этом, а закрывает авторизация. И совсем непонятно, можно ли ради подписок трогать модуль, через который каждый клиент каждый день входит в продукт. Такую границу не найти ни в одном файле. Её можно только провести.
Эти три вопроса к тому же не лежат порознь. Клиент, у которого не прошла карта, — это новое состояние подписки или прежнее, в котором что-то пошло не так? Если закрывать ему доступ, то закрывать будет неизвестно чей код. А сколько терпения ему положено, зависит от того, в каком состоянии он окажется. Стоит потянуть за один вопрос, и за ним потянутся два других.
Ни на один из этих вопросов у него нет ответа, и именно поэтому фраза так легко пишется.
Он не откладывает их на потом — он их не видит. Изнутри слова «нормально» их не разглядеть: оно звучит так, будто ответы на все три уже есть и проговаривать их незачем. Спроси его кто-нибудь в эту минуту, что будет с клиентом, у которого не прошла карта, он ответил бы — подумав, толково, может быть, даже хорошо. Спроси его назавтра — ответил бы, возможно, иначе и тоже толково. Но такой ответ родился бы только в момент вопроса. До вопроса его нет, а спрашивать сейчас некому.
Когда мы знаем, что чего-то не знаем, это мешает: вопрос возвращается, цепляет, не даёт додумать соседнюю мысль. Незнание, которое не видно, не ощущается как пробел. Оно ощущается как лёгкость. Все мы помним, какие тексты пишутся трудно: письмо клиенту с отказом, объяснение, почему сорвался срок. Трудно их писать потому, что каждое слово в них что-то утверждает и его приходится взвешивать. Будь у основателя ответ хотя бы на один из трёх вопросов, вечерняя фраза стала бы таким текстом: в ней появились бы числа и оговорки, и каждую пришлось бы сначала сформулировать для себя. Ответы весят. Шести словам нести нечего.
Поэтому и чувство, с которым он встаёт из-за стола, неподдельное. Задача, ещё днём лежавшая на нём, теперь переложена на другого, и от этого ему легко почти физически, как бывает, когда с плеч сняли тяжёлую сумку. Держать в голове больше нечего: всё трудное уместилось в одно слово, а слово отправлено. Вопросы ушли вместе с этим словом — невидимые, похожие на ответ. В квартире всё так же тихо, и на кухне от них не осталось ничего, кроме приятного чувства, с которым опустилась крышка ноутбука. Эта лёгкость и есть их след.
1.2. Ночь
Лёжа в темноте, основатель первым делом убавляет яркость телефона: экран светит так, что больно смотреть. Потом открывает панель прогона. Это та же работа, что вечером бежала строками по экрану ноутбука, только собранная в несколько чисел и один длинный список. Сверху — номер итерации, и, пока он смотрит, номер меняется: ИИ-агент закончил очередной шаг — открыл файл, поправил в нём несколько строк, запустил тесты — и взялся за следующий. Рядом — счётчик токенов. Первые цифры в нём стоят спокойно, последние мелькают так быстро, что их не прочесть, а если на пару секунд отвести глаза, всё число уже другое. Ниже идут коммиты, у каждого — короткая строка о том, что сделано, и зелёная галочка справа: тесты прошли. Новые коммиты появляются сверху и сдвигают прежние вниз. Их пока немного, и один прибавляется прямо при нём. В квартире не движется ничего, кроме цифр на экране.
Он листает список, хотя лёжа, одной рукой, это неудобно, и нажимает на один из коммитов. Тот раскрывается в цепочку шагов: какие файлы были прочитаны, прежде чем в коде поменялась хоть одна строка, какая команда запущена и что она ответила, какие тесты прошли. Перед тем как поправить одну-единственную функцию, ИИ-агент прочитал всё, что её вызывает, — так работает внимательный инженер, которому не лень. Основатель и сам работал бы так же, будь у него на это время. В строках коммитов — слова его продукта: подписка, тариф, счёт, продление. Этими словами он годами говорил с клиентами, сам когда-то расставлял их по кнопкам и письмам, а теперь их пишет не он: пока он лежит под одеялом, в его коде с ними работает ИИ-агент. Удовольствие смотреть на работу, которую делаешь не ты, ни на что не похоже. С отдыхом его не спутаешь: отдыхая, о работе не думают, а он не может думать ни о чём другом. С бездельем тоже: работа его, задача его, продукт, в котором сейчас меняется код, тоже его. Не его здесь только руки. Его дело движется без него — и так быстро, как не двигалось никогда, пока он делал его сам.
Вечернее чувство, что работа пошла, здесь, в темноте, вырастает в другое, крупнее. Обычно его день кончается там, где кончаются силы: что не успел, то ждёт до завтра, и ночью продукт замирает, как замирает по ночам всякая работа, которую делают люди. Сегодня день не кончился. Он лежит, а дело идёт дальше, и ночь за окном ничего в нём не меняет. Как будто в его сутках стало больше часов, чем у всех остальных людей, и лишние часы работают на него. Он пробует прикинуть, сколько времени ушло бы у него самого на то, что уже лежит в списке, и бросает считать: выходит слишком много. ИИ-агент, который трудится всю ночь, — доказательство силы. Проверить это доказательство можно в любую минуту, достаточно взять телефон. Сила эта его. Она не устаёт, не отвлекается и не ложится спать, и он владеет ею так же просто, как телефоном у себя в руке.
Телефон он откладывает на тумбочку, уже засыпая. В четвёртом часу он просыпается без всякой причины, как просыпаются перед ранним поездом, и, не успев толком открыть глаза, тянется к тумбочке. Панель живая. Номер итерации ушёл далеко вперёд, в счётчике токенов прибавился разряд, сверху в списке стоят коммиты, которых он ещё не видел, и у каждого та же зелёная галочка. Он смотрит на панель недолго, кладёт телефон экраном вниз и засыпает снова, быстро и спокойно, как в детстве засыпал под негромкие голоса взрослых на кухне.
Эта ночь продлится тридцать один час — ночь, день и ещё одну ночь. Она началась за кухонным столом в двенадцатом часу и не кончается с рассветом, хотя за окном уже сереет. В неё уместятся восход и закат, целый рабочий день с письмами и звонками и ещё одна ночь с телефоном на тумбочке, а на панели всё это время будет идти работа, без перерыва на сон и на обед, без пауз длиннее нескольких секунд. Тридцать один час — больше суток. Если разложить его на обычные рабочие дни по восемь часов, выйдет почти четыре, поставленных вплотную один к другому. Ни один человек не просидит над кодом столько, не вставая из-за стола, и он сам даже в самые горячие недели перед первым запуском своего продукта не выдерживал и половины. Такое число не округляют. Его произносят целиком.
Днём у него своя работа, и её не меньше, чем всегда: письма клиентов, звонки, встреча на другом конце города. Панель прогона живёт в кармане. Он открывает её между двумя звонками, в лифте, в такси, посреди разговора, когда собеседник отвлекается на свой телефон. Движение каждый раз одно и то же — достать, разблокировать, взглянуть, — и каждый раз на панели что-то новое. Телефон в кармане весит как обычно, но ощущается иначе: в нём идёт работа. Номер итерации он уже не запоминает: к следующему взгляду тот всё равно уйдёт вперёд. Число в счётчике токенов он давно не пытается прочесть целиком, ему хватает того, что оно всякий раз больше прежнего. По верхней строке видно, в каком файле сейчас ИИ-агент и что он там делает — читает, правит или ждёт, пока пройдут тесты, — и основатель, узнавая знакомые названия, мысленно идёт за ним по своему коду, как по дому, где знает каждую комнату. Иногда он застаёт ИИ-агента посреди шага: тесты запущены, и зелёные отметки встают одна под другой, пока не зазеленеет весь столбец. Иногда новый коммит ложится наверх списка у него на глазах, и это отдельная маленькая радость, как будто успел к самому интересному. Панель он открывает чаще, чем почту, и понятно почему: почта приносит просьбы и жалобы, панель — только сделанную работу.
Около полудня звонит клиент из тех, кто давно ждёт подписок, и спрашивает, когда они появятся. Раньше на такой вопрос приходилось отвечать осторожно, прикидывая, когда дойдут руки. Сегодня основатель просто говорит: «Уже делается». Пока они разговаривают, он открывает панель, и сверху в списке появляется новый коммит, так что это буквально правда: работа идёт в ту самую минуту, когда он о ней говорит. За обедом он показывает телефон знакомому, тоже основателю небольшого продукта, и тот, пролистав список, присвистывает.
Когда за окном темнеет, он снова садится за кухонный стол и открывает панель уже на ноутбуке, чтобы увидеть всё сразу. Позади без малого сутки. За день у него сел голос от звонков и гудят ноги, телефон дважды пришлось ставить на зарядку, а на панели всё идёт с той же ровной скоростью, что и в первый час. Даже на большом экране список коммитов не помещается и уходит за нижний край, так что до первого, вчерашнего, приходится долго листать. Он проходит его снизу вверх, от первого коммита к последнему, и сутки разворачиваются перед ним ещё раз. Вот это сделано, пока он спал, это — пока ехал на встречу, это — пока обедал и показывал телефон знакомому. Он находит коммит, появившийся, пока он говорил с клиентом, и задерживается на нём с улыбкой. Каждому его часу соответствует работа, которой он не делал. Зелёный столбец не прерывается ни разу.
Мы знаем это чувство изнутри. Мы сами просыпались среди ночи и тянулись к телефону проверить, идёт ли работа, открывали панель в очереди к врачу и под столом на чужом совещании, делали снимки экрана с особенно длинным списком коммитов и отправляли их друзьям, ожидая, что те присвистнут. И сами говорили, небрежно и с плохо скрытой гордостью: «Он у меня работает вторые сутки». Первую такую ночь мы помним до сих пор: до неё сутки непрерывной работы были чем-то из чужих рассказов, после неё стали нашими. Счётчик токенов растёт, коммиты идут, тесты зеленеют, и всё это без нас, днём и ночью, без усталости. Кто хоть раз оставлял ИИ-агента на ночь, помнит это ощущение телом: тепло телефона в ладони, голубоватый свет в тёмной комнате, короткий толчок радости, когда сверху в списке появляется новая строка. Это одно из самых сильных чувств, какие даёт наше ремесло: видеть, как большая работа идёт сама, и знать, что она твоя.
Во вторую ночь основатель ложится позже обычного: всякий раз хочется дождаться ещё одного коммита. Телефон снова в руке, и панель всё так же жива: номер итерации меняется, последние цифры счётчика мелькают, сверху появляются новые строки. Напротив новых коммитов — те же зелёные галочки, а ниже ещё и ещё, до самой первой строки. Одна сплошная зелёная полоса. Он смотрит на неё дольше, чем нужно, просто потому, что на неё приятно смотреть. В истории репозитория эти сутки с небольшим уже занимают больше места, чем несколько последних месяцев. Там, в облаке, в его коде вторую ночь подряд идёт работа, какой в его продукте не было никогда: большая, непрерывная, начатая им и сделанная не им. Каждая проверка панели — в темноте спальни, между двумя звонками, за кухонным столом — подтверждала одно и то же. Подтверждает и теперь, когда глаза у него уже закрываются, а палец ещё лежит на экране: что-то большое происходит.
1.3. Diff
Цифры на панели больше не бегут. Основатель замечает это раньше, чем успевает толком проснуться: номер итерации не меняется, последние знаки счётчика токенов стоят на месте, и сверху в списке коммитов не появляется ничего нового, сколько на него ни смотри. В комнате уже светло, за стеной соседи собираются на работу, голова тяжёлая после двух коротких ночей подряд. Верхняя строка, которая всё это время показывала, где сейчас идёт работа, теперь говорит одно: прогон завершён. Кончился он на рассвете, пока основатель спал. Под этой строкой — последнее сообщение ИИ-агента, несколько спокойных абзацев, похожих на записку аккуратного коллеги перед отпуском: что сделано, где что лежит, как проверить. Заканчивается записка тем, что все тесты проходят. А ниже — ссылка, которую за всё это время не открывали ни разу: diff, все изменения, внесённые прогоном в код, собранные в одном месте, файл за файлом и строка за строкой, — что было и что стало. Рядом со ссылкой стоит число: двести четырнадцать изменённых файлов.
Он открывает diff, не вставая с постели. На телефоне это узкая лента имён файлов, и у каждого два числа: сколько строк добавлено, сколько удалено. Он гонит ленту большим пальцем вверх, потом ещё раз и ещё, а она не кончается, и палец устаёт раньше, чем глаза успевают что-нибудь понять. Так двести четырнадцать файлов не прочесть. Он встаёт, забирает с кухни ноутбук и садится с ним в комнате, за стол у окна. Солнце уже добралось сюда: широкая полоса лежит поперёк столешницы, угол экрана слепит, и ноутбук приходится развернуть. Ползунок прокрутки справа сжимается в короткую чёрточку, какой он бывает только в очень длинных документах, и просто пролистать список от первого файла до последнего, ничего не открывая, — дело нескольких минут. Добавленные строки отмечены зелёным, удалённые — красным. Это первый красный цвет за тридцать один час, и означает он не ошибку, а строки, которых в коде больше нет. Красного много.
Он листает. Файлы идут вперемешку, знакомые и незнакомые. Вот файл, где создаются счета: когда-то основатель написал его сам, позавчера с него начал ИИ-агент, и от прежних строк в нём осталось немного. Вот шаблоны писем клиентам — об оплате, о продлении и о том, что списание не прошло; последнего раньше не было вовсе. Вот страница, где клиент видит свою подписку, — её тоже не было. Вот файл, который должен разом перевести на подписки всех нынешних клиентов. Вот новый каталог, которого до прогона в репозитории не существовало, а в нём — собственный конечный автомат подписки, написанный с нуля, со своими состояниями и переходами. Вот модуль авторизации, и в нём тоже правки. Вот тесты, целые экраны тестов, новых и переписанных, и все они теперь проходят. Каждый файл сам по себе невелик. Вместе они как коробка, которую подхватил, не прикинув, что в ней: тяжесть доходит до рук раньше, чем до головы.
Конечный автомат он открывает первым. Сверху — состояния: «пробный период», «активна», «платёж не прошёл», «отменена, но оплачена до конца срока», «закрыта». Ниже — переходы: из какого состояния в какое можно попасть, что при этом происходит с доступом и что с деньгами, и у каждого перехода пара строк о том, почему так. Код чистый, его приятно читать. Вопросы, которых позавчера основатель не видел, встречают его здесь уже с ответами. Кто так и не привязал карту, незадолго до конца пробных двух недель получает напоминание, а когда они выходят, оказывается в состоянии «закрыта». Клиент, решивший уйти посреди месяца, работает до последнего оплаченного дня, а потом подписка закрывается сама. Паузы на лето нет: такого состояния в списке просто не существует. Кто вернулся через полгода, начинает новую подписку, а старая так и остаётся закрытой. У кого не прошла карта, тот ещё семь дней работает как ни в чём не бывало, видит вверху экрана надпись с просьбой обновить карту, получает письмо, а на восьмой день подписка закрывается. Семь дней — для всех поровну: и для того, кто платит третий год, и для того, кто пришёл вчера.
Правки в модуле авторизации занимают совсем немного места. Но этот модуль основатель знает наизусть: через него каждое утро проходят все его клиенты. Теперь при каждом входе модуль спрашивает у конечного автомата, в каком состоянии подписка: прежде чем открыть человеку его же данные, продукт узнаёт, заплатил ли тот. Если подписка закрыта, клиент может войти и посмотреть всё, что успел сделать, но не может ничего создать или изменить; рядом в пояснении сказано, что так человек не остаётся отрезанным от собственной работы, и спорить с этим трудно. Если на тарифе для троих сотрудников приглашают четвёртого, отказ приходит в ту же секунду, когда нажата кнопка: вежливая строка о том, что тариф рассчитан на троих, и предложение перейти на тариф побольше. У каждой правки есть свой тест и своя строчка о том, зачем она. Граница, которой не было ни в одном файле, проведена — и сразу в нескольких.
Тесты он оставляет напоследок. Многие ему знакомы: часть он писал сам, ещё когда платежи были разовыми. Прежними они не остались. В одних поменялись ожидаемые значения, другие переписаны заново, нескольких нет совсем, и на их месте стоят новые. Был среди старых тест, в названии которого он когда-то сделал опечатку и так и не собрался её исправить; теперь внутри этого теста всё другое, а опечатки в названии больше нет. Все проходят. Он смотрит на эти файлы дольше, чем на остальные, и в какую-то минуту вспоминает зелёную полосу, на которую засматривался две ночи подряд. От этой мысли тянет холодком, и он её не додумывает. Листает дальше.
Следующие часы он ищет ошибку. Читает так, как читают работу чужого инженера, прежде чем пустить её в свой продукт: медленно, с замечанием наготове, выискивая место, где можно написать «здесь не так», — пропущенный случай, неверную сумму, тест, который проходит случайно. Первым делом проверяет то, чего опасается больше всего: что станет в первое же утро с теми, кто платил по-старому, не окажутся ли они перед закрытой дверью. Не окажутся. Файл переводит их всех в состояние «активна» до конца уже оплаченного срока и каждому отправляет письмо о том, что меняется. Потом основатель запускает продукт у себя, в тестовом окружении, и за полчаса проживает целый год из жизни одной подписки: заводит клиента, даёт пробному периоду истечь, привязывает карту, которую тестовый банк отклоняет, пробует пригласить четвёртого сотрудника. Продукт ведёт себя ровно так, как написано в коде: надпись вверху экрана, семь дней, вежливый отказ. Письмо о неудачном списании приходит сразу, короткое и спокойное, написанное почти его словами. Нигде ничего не падает. Он ловит себя на том, что был бы рад хоть одному красному тесту. Ни одно место не выглядит небрежным. Так мог бы сделать толковый инженер. Может быть, так сделал бы и сам основатель. Этого он не знает. Ухватиться не за что. Каждая деталь по отдельности разумна, и это пугает сильнее, чем явная ошибка.









