суббота, 25 мая 2019 г.

От разрабочиков YouTube - Как мы сговорились "убить" IE6


Это перевод очень познавательной статьи Криса Зачариса (Chris Zacharias), одого из бывших разрабочиков YouTube, A Conspiracy To Kill IE6


Одним из последствий невероятного роста YouTube стало то, что многие интересные истории окажутся скрытыми под слоями новой краски. Вот почему я хотел рассказать о том, как десять лет назад небольшая команда веб-разработчиков YouTube договорилась «убить» IE6 и как ей сошло это с рук.
Я не помню точной причины, которая навела на мысль нашу команду придумать план «убить» IE6 во время обеда в кафе YouTube. Возможно, это было то время, когда я выпустил какой-то CSS стиль который содержал селектор атрибута HTML элемента, который поддерживался не всеми браузерами. Любой нормальный веб-разработчик ожидал бы, что что он будет проигнорирован браузерами. Но только не на старых версиях IE. При определенных условиях селектор атрибута на неподдерживаемом HTML элементе IE мог войти в рекурсию, которая в лучшем случае приводила к закрытию браузера, а в худшем к синему «экрану смерти» Windows. А возможно, это был сотый раз, когда кто-то из наших разработчиков без задней мысли добавил тег img с пустым атрибутом src. Никто, из тех, кто пополнял нашу команду, не мог знать, что ранние версии IE могли начать загружать заглавную страницу сайта по пути «/» для пустого атрибута src. В общем тег img начинал себя вести как iframe, загружая нашу домашнюю страницу и все её зависимости, что в свою очередь приводило к рекурсивному циклу, который рос экспоненциально. Всякий раз как пустой тег img попадал на домашнюю страницу, все бросались его искать и исправлять код, прежде чем упадут наши сервера.

В общем-то не важно, что было причиной в этот раз, но это было что-то суровое и как-то связано с IE6. Этот браузер стал угрозой для существования нашей команды разработчиков. Как минимум, одну-две недели каждого главного спринта мы тратили на то, чтобы исправлять дефекты в интерфейсе пользователя, который ломался на IE6. Несмотря на все эти усилия нам говорили, что мы должны поддерживать IE6, потому что наши пользователи возможно не могут обновиться или возможно они работают в компаниях, где обновления браузера заблокированы. На тот момент пользователи IE6 составляли 18% нашей пользовательской базы. Мы понимали, что не можем вот так взять и отказаться от его поддержки. Однако, сидя в кафе и имея возможность поспать лишь по несколько часов за последние дни, наше сострадание к таким пользователям испарилось. Мы начали фантазировать о том, как мы бы могли бы отомстить IE6. Одна идея быстро привлекла всеобщее внимание. Что если вместо отказа от поддержки IE6 мы только лишь припугнем? Как отреагируют наши пользователи? Восстанут ли они против YouTube? Будут ли они присылать нам письма с угрозами убить нас, как это случалось в прошлом? Или может быть они вдруг станут ярыми сторонниками современных браузеров? Мы фантазировали об офисных работниках по всему миру, сочинявших обоснования, по которым им нужно будет обновить браузеры. Дедушки и бабушки бы взяли в заложники их технически подкованных внуков, требуя их «починить» их YouTube. То, что началось как сеанс групповой терапии для команды начало вдруг материализовываться в реальный план. План, который, как мы быстро осознали, у нас была уникальная возможность реализовать.
А он был очень простой. Мы бы повесили маленький баннер над видеоплейером, который бы только показывался пользователям IE6. Он бы гласил «Мы скоро прекратим поддержку вашего браузера. Пожалуйста, обновитесь на один из этих более современных браузеров». Далее, были бы ссылки на последние версии основных браузеров, включая Chrome, Firefox, IE8, и Opera. Текст был специально туманный и ограничения по времени не указывались. Мы наделись что это сообщение само по себе было достаточно пугающим, чтобы мотивировать наших пользователей обновиться без того, чтобы нам пришлось подписываться под какой-то конкретный план отказа от IE6. У пользователей была бы возможность закрыть сообщение если они хотели проигнорировать его или подумать о нем позже. Код был разработан таким образом, чтобы быть незаметным на сколько это возможно, чтобы не привлекать внимания, на случай если кто-то отслеживал наши комиты. Никто кроме команды разработчиков не использовал IE6 регулярно, поэтому мы знали, что это было маловероятным, чтобы кто-то заметил наш баннер во время тестирования. Мы даже отложили перевод текста на другие языки, чтобы переводчик попросив дополнительный контекст, не мог невзначай раскрыть наш сговор. Далее нам нужен был способ просунуть наш код в продакшен без привлечения чьего-либо внимания.

Так случилось, что некоторые из нас пришли в YouTube в интересное время – через несколько месяцев после того, как YouTube был приобретен Google, но до того как компания начала основательную интеграцию YouTube в свою организационную систему. Те инженеры кто давно пришел в YouTube сперва неохотно переходили на инфраструктуру и принимали правила Google. С их склонностью к полулегальным хакам, быстрым автомобилям и крепкому виски, и бесчисленному количеству пирсинга, тату и арестов за мелкие правонарушения, многие из них до того, как попасть в YouTube не прошли собеседование в Google. И вместо этого они попали в YouTube и теперь им приходилось изрядно попотеть, чтобы оставаться впереди трафика, который рос экспоненциально и при этом постоянно отбиваться от критиков которые кричали что Google  Video скоро неминуемо убьёт их. К тому времени, как Google приобрела YouTube многие их этих инженеров  пришли к видению, что их отверженная натура – это критически компонент их итогового успеха.
Чтобы закрепить их право над кодовой базой YouTube во время интеграции в Google они создали специальный набор разрешений названный OldTuber. Этот набор давал владельцу право беспрепятственно нарушать все политики Google относительно кода, разрешая любому, кто им владел публиковать код непосредственно в кодовую базу YouTube лишь после одного поверхностным ревью кода от кого-либо. Не нужно было беспокоиться о читаемости кода. Не нужно было беспокоиться о покрытии кода тестами. Но если бы вы сломали сайт неправомерно пользуясь статусом OldTuber, вы моментально теряли этот статус и, скорее всего, работу. В общем, вам нужно было вести себя по правилам и никогда не ломать сайт. Наш босс, один из первых YouTube инженеров нашел способ как сделать так, чтобы наша команда стала «своей» для группы первых разработчиков YouTube. Благодаря его усилиям, парочка из нас смогла получить статус OldTuber хотя и никогда не принадлежала к первоначальной команде. Это было как если бы Вы шли по улице и вдруг кто-то перепутал бы вас с сотрудником гостиницы и отдал ключи от своей Феррари. Хорошо это или плохо, но были не из тех парней, кто отдал бы ключи назад и пошел проч. Мы увидели пред собой возможность отомстить IE6 которой у нас больше могло никогда не появиться. Если бы что-то пошло не так, многие из нас наверняка были бы уволены. Наш тихий хорватский парень, настоял, чтобы код попал в базу от его имени, как знак персональной доблести и остальные из нас воспользовались своим статусом OldTuber чтобы «дать добро» при ревью кода. Код попал в продкашен и наш баннер появился несколько дней спустя.

Первым кто пришел к нашим столам был начальник отдела по связям с общественностью. Это был умный, щеголеватый мужчина, который бурлил энергией и энтузиазмом. Но не в этот раз. В этот день он был несвойственно ему резким. Он вошел, спрашивая почему второй по популярности веб-сайт на планете угрожает в доступе почти пятой части своей пользовательской базе? К счастью для нас, в публикациях говорилось, что это будет большим благом для всего Интернета. По их мнению, YouTube возглавлял движение чтобы сделать Веб более быстрым и безопасным для всех его пользователей. Весь отдел по связям с общественностью пользовался Маками с Chrome и даже не мог видеть, что мы сделали, не говоря уже о том, чтобы прокомментировать для прессы. Они были захвачены врасплох. Мы удовольствием рассказали им про баннер и помогли им составить тезисы, чтобы они могли продолжить тему, уже поднятую в прессе. Удовлетворенный тем, что он может опять «засветиться» начальник PR отдела успокоился и предупредил нас, чтобы мы ничего не делали такого впредь, не поставив его в известность. Он не хотел, чтобы такие прекрасные информационные поводы впредь прошли мимо него.

Следующими пришли юристы. Два ведущих юриста в панике подбежали к нашим столам. Они сразу же потребовали, чтобы мы немедленно удалили баннер. Мы объяснили, что для этого бы потребуется специальное разрешение сделать экстренное исправление и что это займет в любом случае как минимум несколько часов. Расстроенный, один из юристов спросил «ну зачем же вы перечислили Chrome первым?». В замешательстве я объяснил, что мы не давали приоритета Chrome. Наш босс, будучи в сговоре с нами, благоразумно посоветовал, чтобы мы перечисляли браузеры в случайном порядке и сохраняли для посетителя этот порядок в cookie браузера. В таком случае вид баннера бы не менялся для пользователя, когда он ходил по страницам сайта, что мы и сделали. Должно же было так случиться, что эти юристы все еще использовали IE6 для доступа к каким-то древним справочникам и по воле случая Chrome у них оказался первым в списке браузеров, на которые мы рекомендовали перейти. Они испугались что, продемонстрировав свое особое отношение к Chrome мы могли привлечь внимание Европейского регулятора, тщательно отслеживавшего любые попытки нечестной конкуренции. Признав, что отображая браузеры в случайном порядке мы скорее всего ничего не нарушили, они все же сомневались в наших словах, т.к. у них Chrome отображался первым. Мне пришлось несколько раз почистить cookie на моей версии IE6 и продемонстрировать что порядок браузеров меняется каждый раз. Удовлетворенные моей демонстрацией юристы быстро вернулись за свои места полностью успокоенные.
Я ожидал следующими кто придет будут технические менеджеры и что они будут в бешенстве от того, как мы очевидным образом превысили свои полномочия с OldTuber статусом. Было очень странно, но больше никто к нам в тот день не пришел. На следующий день, группка инженеров собралась чтобы поздравить нас с запуском баннера поле того, как прочитала статьи в Интернете. И все. Я спросил босса приходил ли кто-то к нему по из-за баннера, но он лишь пожал плечами, показывая, что никто еще не жаловался. все выглядело так, как будто мы вышли сухими из воды. Удивленный и не способный понять это, я решил поинтересоваться у одного из знакомых менеджеров, что он думает на счет запущенного баннера. Он ответил «О, я считал, что вы лишь скопировали баннер, который выпустила команда Google Docs». Я был удивлен. Как это Google Docs могли опередить нас? Я открыл Google Docs в IE6 и конечно же, баннер очень похожий на наш показался сверху. Он призывал их пользователей обновиться, чтобы избежать вероятной неработоспособности сайт в таких же расплывчатых тонах, как и наш.

Мне случалось пересекаться с несколькими инженерами из Google Doc, когда работал с ними над общими библиотеками на JavaScript. Я подошел к одному из них и спросил его как они пришли к решению запустить свой баннер? Он объяснил мне, что они мечтали отказаться от IE6 уже очень давно, но их менеджеры не позволяли им по той же самой причине, что и мы слышали постоянно. Один из их инженеров тестируя в IE6 обнаружил баннер на YouTube почти сразу после того как мы его выпустили и сразу же показал его своим менеджерам как доказательство, что они должны сделать тоже самое. Вскоре инженеры Google Docs разработали свой собственный баннер и стали показать его пользователям, ошибочно полагая, что мы сделали все как полагается и получили все нужные разрешения. Первое время до многих сотрудников компании доходили слухи о электронных письмах, где другие команды просят разрешения отказаться от поддержки IE6, как это сделала команда Google Docs. По счастливой случайности такие же слухи доходили и до наших менеджеров. Удивительно, но нас как-то не вычислили как родоначальника баннера IE6 в Google.

В конце концов, менеджеры YouTube стали задаваться вопросом как же решение отказаться от поддержки IE6 в конце концов было принято, учитывая, как быстро оно было принято и заметно преждевременно для медиа сайта такого размера и с такой огромной пользовательской базой. Как только они осознали, что произошло, они вызвали нашего боса на ковер чтобы разузнать детали. Оказавшись втянутыми в затею из-за наших действий, они вынужденно пришли выводу, что цель оправдывала средства. Помимо YouTube, Google Docs and нескольких других сервисов Google вывесившим баннер IE6, Google дала разрешение всем своим сайтам вывесить свой собственный. Вскоре баннеры IE6 стали появляться повсеместно. За один месяц наша база пользователей IE6 уменьшилась на половину и более чем на 10% уменьшилась по всему миру, в то время как доля остальных браузеров увеличилась пропорционально. Результаты оказались лучше, чем мы могли ожидать.

Historical IE6 browser share
Доли различных версий Internet Explorer согласно https://www.w3counter.com/trends

Каким-то чудом нам сошло с рук эта затея с IE6. Лишь несколько человек знали, что мы были вовлечены во все это и те, что знали не хотели привлекать внимания к этой ситуации и поощрять подобное поведение. За кружкой пива в баре Сан-Франциско, наш босс заставил нас поклясться не делать ничего подобного впредь. Мы согласились и выпили за то, чтобы доля IE6 упала значения с одной цифрой и более ничего подобного не вытворяли.