У невероятного роста Youtube есть одно последствие, радостное и грустное одновременно - множество историй потеряются под слоями новой краски. Именно поэтому я хочу рассказать одну из них - историю того, как 10 лет назад маленькая команда веб-разработчиков задумала убить IE6 с помощью Youtube и даже не получила за это по шапке. Я не могу вспомнить то конкретное событие, из-за которого наша команда разработки начала строить планы убийства браузера за обедом в столовой Youtube. Возможно, в тот раз я случайно отправил в релиз CSS-стиль, где был указан селектор атрибута на нестандартном HTML-элементе. Любой здравомыслящий веб-разработчик предположил бы, что если браузер не может распознать элемент - он молча пропустит данное описание. Но со старыми версиями IE дело обстояло не так. В определенных условиях это приводило либо к внутренней рекурсии и падению браузера (если повезет), или даже к синему экрану смерти (если не повезет). А может быть, в сотый раз кто-то из наших разработчиков использовал тег <img> без указания атрибута src. От новичков никто не требовал быть в курсе, что в старых версиях IE вместо пустого аттрибута src подставляется корневой путь ("/"). Это внезапно превращает тег <img> в <iframe>, загружая главную страницу и все связанные с ней ресурсы, что может привести к бесконечной рекурсии. Когда пустой тег <img> случайно просачивался на главную страницу - вся команда в экстренном режиме искала его, пока сервера не расплавились под нагрузкой. В общем, не вдаваясь в подробности - это была настоящая жесть, и она была связана с IE6. Этот браузер сильно отравлял жизнь всей нашей команде разработки. По меньшей мере 1-2 недели из каждого мажорного релиза отводились на то, чтобы заставить новый UI работать под IE6. Несмотря на всю эту боль, нас заставляли поддерживать его ради пользователей, которые не могут обновиться или работают в компаниях, где обновление запрещено политиками безопасности. Пользователи IE6 на тот момент составляли примерно 18% от общего числа. Все понимали, что просто так прекратить его поддержку нельзя, но когда мы сидели в той столовой после нескольких бессонных ночей, на сопереживание тем несчастным пользователям просто не оставалось сил. Мы начали коллективно фантазировать о том, как отомстить IE6. Одна идея сразу привлекла всеобщее внимание: а что, если мы просто пригрозим прекратить поддержку? Как отреагируют пользователи? Они поднимут бунт против Youtube, начнут присылать нам письма с угрозами расправы (как это уже случалось раньше)? Или вдруг станут апологетами новых браузеров? Мы мечтали о том, как офисные работники по всему миру внезапно начнут придумывать причины, по которым обновление браузеров жизненно необходимо для бизнеса, а бабушки и дедушки возьмут своих технически прошаренных внуков в заложники, чтобы те "починили им ютубы". То, что началось как сеанс групповой психотерапии, стало превращаться в конкретный план действий, для реализации которого у нас были уникальные условия. План был очень прост. Над видео появится маленький баннер, который будет показываться только пользователям IE6. На нем будет написано: "Мы скоро прекращаем поддержку вашего браузера. Пожалуйста, воспользуйтесь одним из более современных браузеров". Рядом будут ссылки на скачивание актуальных версий основных браузеров - Chrome, Firefox, IE8 и даже Opera. Текст был специально сформулирован расплывчато, без указания конкретных сроков. Мы надеялись, что он будет выглядеть достаточно пугающе, чтобы пользователи зашевелились, но при этом не будет обязывать нас к конкретным действиям по прекращению поддержки. Пользователи могли закрыть баннер или оставить его висеть до лучших времен. Код был замаскирован под безобидное изменение, чтобы при проверке наших коммитов никто ничего не заподозрил. Кроме самой команды веб-разработки никто не пользовался IE6 в живых условиях, поэтому мы были уверены, что в предрелизной среде баннер не появится. Мы даже отложили перевод текста на другие языки, чтобы переводчики случайно не привлекли внимание к тому, что мы делаем. Оставался последний шаг - по-тихому протащить эти изменения в production. Оказалось, что некоторые участники пришли в нашу команду в особо интересное время - спустя несколько месяцев после того, как Google купила Youtube, но до того, как наши инфраструктуры начали глубоко интегрироваться. Инженеры-старожилы отстаивали свои границы и не спешили привыкать к корпоративным политикам Google. Их объединяла страсть к условно-легальному хакерству, быстрым машинам, крепкому алкоголю, а также обилие пирсинга, татуировок и арестов за мелкое хулиганство. Многих из них когда-то завернули на собеседовании в Google, и вместо этого они оказались в Youtube, где одной рукой приходилось справляться с экспоненциально растущим трафиком, а другой отмахиваться от критиков, пророчащих сервису скорую смерть в лице Google Video. К тому моменту, когда компания была поглощена Google, многие из этих инженеров считали свою маргинальность ключевым фактором своего успеха. Чтобы сохранить власть над кодовой базой Youtube во время интеграции с Google, старожилы создали специальный набор разрешений под названием OldTuber. Это разрешение позволяло полностью обойти новые Google'овские политики качества кода и вносить исправления в кодовую базу напрямую, так что просматривали их лишь самые дотошные рецензенты. Читаемость кода, обилие тестов, процент покрытия - ничего не требовалось. Если внесенные таким образом правки ломали сайт - это было на твой собственный страх и риск: человек тут же лишался привилегий, а возможно и самой работы. Поэтому нужно было быть умницей и ничего не сломать. Наш босс, будучи сам из касты старожилов, приложил большие усилия к тому, чтобы команда веб-разработки была у других старожилов на хорошем счету. Благодаря его усилиям у некоторых из нас появился статус OldTuber'а, даже несмотря на то, что они не были частью изначальной команды. Представьте, что вас случайно приняли за парковщика и дали ключи от новенькой Ferrari. К счастью или нет, но мы были не из тех людей, кто сразу же отдал бы ключи и молча ушел. Мы увидели шанс нанести IE6 сокрушительный удар, который выпадает раз в жизни. Если все пойдет не по плану, многих из нас наверняка уволят. Наш самый отчаянный разработчик - парень из Хорватии с удивительно мягким в обычной жизни голосом - потребовал сделать коммит от его имени, как знак чести, а кто-то другой использовал статус OldTuber для проведения код-ревью. Изменения попали в релиз и через несколько дней баннер заработал. Первым, кто пришел к нам в кабинет, был глава отдела PR. Этот умный парень всегда был одет с иголочки и буквально источал энтузиазм и позитивную энергию - но только не в этот раз. Впрочем, его зашкаливающую раздражительность можно было понять: он пришел на работу в совершенно обычный день и вдруг обнаружил в почтовом ящике письма от всех крупных новостных изданий с одним и тем же вопросом: почему второй самый крупный сайт в мире угрожает отрезать доступ для практически пятой части своей аудитории. К счастью для нас, обсуждение на тот момент уже пришло к единогласному мнению, что для Интернета это будет великое благо. Новостные сайты преподносили ситуацию так, будто бы Youtube сражается на передовой за быстрый и безопасный веб для всех. Весь PR-отдел сидел на Mac'ах, поэтому не мог даже увидеть то, что мы сделали - что уж говорить о комментариях для прессы. Их застали врасплох. Мы с удовольствием описали наше изобретение в деталях и помогли им сформулировать ключевые моменты, развивающие распространенный новостными сайтами нарратив. Глава отдела обрадовался, что сможет оседлать волну резонанса, но предупредил, чтобы мы больше ничего подобного не делали без согласования с ним. Пропустить подобную возможность для формирования имиджа компании было для него неприемлемым. Следом явились юристы. Их было двое, и они прибежали к нашим рабочим местам в состоянии хорошо скрываемой паники. Прямо с порога они потребовали убрать баннер. Мы стали объяснять, что для этого девопсам потребуется сделать экстренный push, и вообще вся процедура займет как минимум несколько часов. Один из них раздраженно спросил: "Ну почему вы поставили Chrome первым?!" Я в растерянности ответил, что никакого особого предпочтения Chrome мы не отдавали. Наш босс, которого мы посвятили в свои планы, дальновидно предложил рандомизировать порядок ссылок на браузеры и сохранять его в cookie, чтобы интерфейс не "скакал" между загрузками страницы. Так вышло, что оба этих юриста использовали IE6 для доступа к каким-то легаси-системам, и у обоих из них Chrome случайным образом попал на первое место. Они очень боялись, что, дав преимущество Chrome, мы привлечем внимание европейских антимонопольных регуляторов. Юристы признали, что ничего настолько криминального мы не сделали, но эта ситуация произошла во время их дежурства, и они были совсем не в восторге. Я несколько раз очищал cookies на своей копии IE6 и показывал, что ссылки на браузеры каждый раз перемешиваются. Успокоенные демонстрацией, юристы вернулись на свои рабочие места и больше не возвращались. Я ждал, что следом придут технические руководители, и они будут ругаться громче всех, поскольку мы злоупотребили статусом OldTuber. Как ни странно, никто не пришел. На следующий день пара проходивших мимо технарей остановилась поздравить нас с запуском баннера, о котором они прочитали в новостях - вот и все. Мы спросили у босса, не получил ли он какой-либо отдачи, но он только отмахнулся. Казалось - пронесло. Пытаясь осмыслить произошедшее, я обратился к одному из менеджеров с вопросом о том, что он думает о баннере. Он ответил - "Я сразу смекнул, что вы просто скопировали баннер у Google Docs". Я был в полной растерянности. Как ребята из Google Docs могли нас опередить? Я открыл Google Docs в своем IE6 - и действительно, в верхней части страницы красовался очень похожий на наш баннер. Он мотивировал пользователей обновить браузер ради стабильности работы в таких же расплывчатых формулировках. С парой разработчиков из команды Google Docs я уже пересекался во время работы над общими JS-библиотеками. Я написал одному из них и спросил, как они пришли к мысли запустить свой баннер. Он объяснил, что они уже давно хотели отказаться от поддержки IE6, но руководство не давало им этого сделать по тем же самым причинам, что и нам. Один из их разработчиков проверял что-то в IE6 и заметил баннер практически сразу после его появления на релизной версии Youtube. Он тут же пошел к этим к начальству, как с доказательством того, что мы можем сделать так же. Довольно скоро они соорудили собственный баннер и выложили его на релиз, по всей видимости с ложной уверенностью в том, что мы прошли все необходимые согласования. Многие сотрудники Google впервые услышали о баннере в контексте внутренних писем, где кто-то спрашивал "можно мы тоже прекратим поддержку IE6, как Google Docs?". К счастью, большинство наших менеджеров тоже были в этом списке. Каким-то удивительным образом слава изобретателей баннера обошла нас стороной. Cо временем техническое руководство Youtube начало задаваться вопросом, как идея отказаться от поддержки IE6 вообще появилась на свет, с учетом широты нашей аудитории и поспешности внедрения в релиз. Когда они поняли, что на самом деле случилось, они накинулись на нашего босса с расспросами, грозили ответственностью за наши действия, но в итоге нехотя признали, что цель оправдала средства. Выставление баннеров на Youtube, Google Docs и несколько других сервисах Google дало всем остальным сайтам право поступить так же. Баннеры IE6 внезапно начали появляться повсюду. Спустя всего месяц число пользователей IE6 среди посетителей Youtube упало вдвое, а общее число пользователей IE6 в мире сократилось на 10%, уступив другим браузерам. Результаты превзошли наши самые смелые ожидания. Каким-то образом мы провернули наш план по уничтожению IE6 и не попали под исправительные меры. Практически никто не знал, что мы были в этом замешаны, а те, кто знал, не хотели привлекать к этому внимание и поощрять подобное поведение. Сидя в одном пивном ресторане на открытом воздухе в Сан-Франциско, наш начальник, яростно подмигивая, потребовал нас поклясться больше никогда так не делать. Мы согласились, выпили за падение доли IE ниже 10%, и больше никогда не протаскивали тайные фичи в релиз. Программист