Это история о том, как мы обнаружили баг в приложении для Android и упорно пытались доказать, что это баг Google, а потом ещё упорнее пытались заставить компанию его устранить.
Прежде чем вдаваться в подробности, приведу немного контекста.
- Issue track: https://issuetracker.google.com/issues/261816912
- Баг обнаружен 7 декабря 2022 года.
- Полное устранение подтверждено 12 апреля 2023 года.
▍ Да, это заняло больше четырёх месяцев!
Почему так долго? Позвольте мне объяснить природу бага и хронологические этапы его устранения.
1. Выявляем проблему
При выполнении регрессионного теста в своём приложении мы обнаружили проблему.
В нашем приложении есть режим карты, в котором при нажатии на человечка он предоставляет точную ссылку на приложение GoogleMap и показывает изображение улиц.
Однако вместо загрузки экрана улиц приложение Google Map как будто продолжало загрузку!
▍ Доказательство бага
В случае возникновения таких проблем сложно доказать наличие бага и его местонахождение. Это может быть:
- Проблема сети
- Или просто проблема устройства
- Или конкретная проблема Android SDK.
Разумеется, это очень легко доказать, выполнив тестирование на разных устройствах, с разными Android SDK и так далее.
▍ Где находится баг
Теперь, когда мы доказали, что проблема стабильно возникает вне зависимости от Android SDK, устройства и сети, то как найти причину бага?
В 99% случаев баг оказывается на стороне нашего приложения.
2. Локализуем проблему
Убедившись, что это проблема, необходимо сузить её для выявления первопричины.
Сложность в том, что есть Webview (внутри нашего приложения) и приложение Google Maps. И то и другое — продукты Google. У нас нет доступа к коду.
Получив всю эту информацию, мы всё равно не доказали, что это баг Google. Возможно, он возникает из-за того, как мы используем Map View.
▍ Спускаемся на уровень кода
Несмотря на то, что у нас нет кода, чтобы подтвердить проблему, мы знаем, что это проблема с точной ссылкой (deep link). Поэтому мы занялись поиском и нашли пример кода Google для того, как создавать точные ссылки напрямую в Google Map Street View.
Благодаря этому, мы можем собрать простой пример приложения, демонстрирующий проблему, и для этого нужно минимальное количество кода, показанное ниже!
3. Доказали, что это проблема Google
При помощи этого кода мы можем продолжить исследовать проблему.
Позже мы выяснили, что проблема проявляется не постоянно. И оказалось, что она возникает только в отдельных версиях Google Maps.
- в версии 11.29.7 ✅
- в версии 11.44.0905 ✅
- в версии 11.57.4801 ❌
После этого нам стало понятно, что в приложении Google Maps что-то поменялось между версиями 11.44.0905 и 11.57.4801, и это стало причиной проблемы.
Подробнее прочитать об этой проблеме и её отладке можно здесь: https://medium.com/mobile-app-development-publication/debugging-google-maps-app-issue-on-android-8a4fa62e2c28.
4. Сообщаем об ошибке
Итак, теперь у нас есть:
- возможность воссоздавать проблему
- простой пример кода для выявления проблемы
- версии Google Maps вызывающие (или не вызывающие) проблемы
Очевидно, что баг на стороне Google. Это их проблема.
Поэтому мы сообщили о ней в отчёте https://issuetracker.google.com/issues/261816912.
Но этого недостаточно. По моему опыту отправки отчётов об ошибках в Google, с ними чаще всего ничего не делают.
В данном случае мне казалось, что на стороне Google она не получит высокого приоритета, потому что:
- Она не приводит к вылету приложения и не отображает некорректных результатов
- Она не проявляется непосредственно в Google Maps, то есть когда кто-то пользуется Google Maps, проблема не возникнет.
- Кроме того, пользователи подумают, что это проблема приложения, создающего точную ссылку, а не проблема Google Maps.
Мы часто получаем отзывы по нашему приложению (с одной звездой), в которых пользователи пишут, что Street View не работает, не понимая, что возникшая у них проблема связана с Google Maps, а не с нашим приложением.
Из-за наличия этого бага Google ничего не теряет.
▍ Используем официальный канал
Чтобы получить больше внимания Google, нужно не просто опубликовать стандартную Google Issue, а отправить issue через Google Developer Console.
https://console.cloud.google.com/google/maps-apis/support
Я отправил через неё issue и написал соответствующий отчёт. Писать отчёты сюда более эффективно, потому что они отслеживаются при помощи Google Console Issue.
Я подумал, что сделал всё, ведь я чётко описал проблему и надеялся, что Google займётся ею.
Уже почти настало Рождество и я взял долгий отпуск. Я думал, что когда вернусь из отпуска, ситуация сдвинется.
5. Дальнейшие действия
Вернувшись из отпуска в конце февраля, я заметил, что:
- Статус Issue, которую я зарегистрировал в https://issuetracker.google.com/issues/261816912, был изменён на «Won’t Fix» («устранения не будет»)!
- Мою консольную issue закрыли и никаких обновлений по ней нет.
Я сразу проверил последнюю версию приложения Google Maps на наличие проблемы. К моему разочарованию, последняя на то время версия Google Maps (11.66.0602) по-прежнему проявляла признаки той же проблемы.
- в версии 11.29.7 ✅
- в версии 11.44.0905 ✅
- в версии 11.57.4801 ❌
- в версии 11.66.0602 ❌
Я решил написать электронное письмо представителю Google, чтобы он помог нам отправить отчёт через Developer Console. К счастью, на наш запрос кто-то быстро отреагировал.
6. Ответ Google
Я написал письмо, сообщив, что разочарован закрытием issue без малейших обновлений по ней; при этом нас не уведомили о причинах закрытия, а проблема в приложении сохраняется.
Я искренне благодарен представителю Google, терпеливо мне отвечавшему.
У меня возникли следующие вопросы:
▍ Почему Issue закрыли без обновлений и комментариев?
Очевидно, Google отвечает на консольные issue не на странице самой issue. Компания отправляет электронные письма от cloudsupport@google.com.
К сожалению, это письмо было отфильтровано механизмом защиты от спама. Поэтому я не получил письмо, отправленное мне ещё в декабре.
В ответе говорилось, что это не проблема Google Maps API, поэтому для решения его перенаправили в другую команду.
И поскольку я не отвечал им на issue в течение трёх дней, её закрыли.
Полученный урок: проверять электронную почту от cloudsupport@google.com после отправки консольной issue.
▍ Нужна ли им моя помощь в воспроизведении проблемы?
Я получил ответ от Google, в котором говорится:
- способ встраивания просмотра улиц больше не работает. Все ссылки на google.com/maps больше не работают SDK при встраивании Street View, и SDK требуют ключа API, привязанного к нашему аккаунту Google Maps.
- нам порекомендовали добавлять Street View в Android в соответствии с показанным здесь примером: https://developers.google.com/maps/documentation/android-sdk/streetview
Хотя эта рекомендация кажется хорошей (то есть вместо того, чтобы использовать Street View в приложении Google Maps, мы можем реализовать Street View внутри своего приложения), проблема на самом деле не в этом.
7. Предоставляем дальнейшие объяснения
Прочитав рекомендацию, я поразмыслил, можно ли её реализовать. Но это было непрактично.
- Нам придётся изменить архитектуру нашего приложения, добавив новую фичу StreetView, чтобы StreetView отображался в нашем приложении (а не использовал StreetView из Google Maps).
- Применение Google StreetView в приложении потребует от нас дополнительной оплаты.
- Возможность создания точной ссылки на StreetView из Google Maps чётко показана в примере кода Google. Это рекомендованный Google способ кодинга. То, что это не работает, показывает, что сама точная ссылка на Google Maps Street View поломана. А эту проблему нужно устранить.
- За issue https://issuetracker.google.com/issues/261816912 проголосовало много пользователей, а это значит, что на них она тоже повлияла. Она мешает сообществу разработчиков.
Учитывая всё это, я ответил представителю Google, что мы не хотим добавлять StreetView в своё приложение.
Нам просто нужна была точная ссылка на Google Maps для отображения StreetView, как это показано в примере кода Google.
К счастью, представитель Google понял проблему и сообщил о ней команде Google Maps.
Полученный урок: не принимайте рекомендацию как данное. Прочитайте её и поймите, что требуется вам. И профессионально ответьте разумной рекомендацией Google.
8. Воспроизводим проблему
Учитывая, что со времени закрытия предыдущей консольной issue прошло несколько месяцев, мне пришлось открыть новую консольную issue. Разумеется, я присвоил issue максимальный приоритет, учитывая постоянный низкий рейтинг, который давали пользователи в отзывах к нашему приложению. Но в Google приоритет понизили до «P3 · Medium Impact — Service Partially Impaired». Это произошло в конце февраля. Поэтому я стал ждать от Google исправления.
9. Эскалация Issue
В течение следующего месяца, то есть примерно до конца марта, ещё больше пользователей начало жаловаться на недоступность точной ссылки на StreetView в нашем приложении. Я начал размышлять, как можно действовать дальше, подумывая снова написать электронное письмо представителю Google.
Но прежде чем это сделать, я зашёл проверить консольную issue и обнаружил, что там есть кнопка «Escalate».
Я нажал на кнопку эскалации и описал ситуацию.
Позже я получил ответ от cloudsupport@google.com (теперь я знал, что стоит отслеживать присылаемые с этого адреса письма). В нём говорилось, что была выполнена эскалация issue.
В течение 24 часов я получил ответ, в котором сообщалось, что проблема устранена! И что её устранение запланировано на следующий релиз (дата которого пока не утверждена).
Неудивительно, ведь эта проблема выглядит так, как будто её можно решить за день. Достаточно привлечь к ней внимание, отдав больший приоритет, чем бесконечному количеству других issue.
В публичной issue https://issuetracker.google.com/issues/26181692 тоже это отражено:
Чтобы убедиться, я протестировал последнюю версию Google Maps (11.72.0302, проблема по-прежнему присутствует):
- в версии 11.29.7 ✅
- в версии 11.44.0905 ✅
- в версии 11.57.4801 ❌
- в версии 11.66.0602 ❌
- в версии 11.72.0302 ❌
10. Фикс готов к релизу
5 апреля, с новым запланированным релизом, Google снова заявила о том, что https://issuetracker.google.com/issues/26181692 запланирована на следующий релиз.
Обратите внимание, что релиз 11 апреля указан по времени США. Насколько мы понимали ситуацию с релизами приложений, это должно было занять день или два.
Поэтому я подождал до 12 апреля, чтобы снова протестировать его.
Чтобы убедиться, что я тестирую приложение с последним исправлением, мы скачали последнюю версию приложения Google Maps (из Google PlayStore), где можно было его обновить.
Я скачал последнюю версию Google Maps (11.73.0301), и тесты показали, что всё хорошо!
- в версии 11.29.7 ✅
- в версии 11.44.0905 ✅
- в версии 11.57.4801 ❌
- в версии 11.66.0602 ❌
- в версии 11.72.0302 ❌
- в версии 11.73.0301 ✅
Полученные уроки
Мы благодарны за то, что проблема была устранена. Чтобы это было сделано, мы совершили правильные действия, приведённые ниже:
- Мы смогли максимально сузить проблему, чтобы чётко и стабильно воспроизводить её.
- Мы подтвердили свой способ воспроизведения проблемы со ссылками на пример кода Google, доказав, что ответственность её устранения лежит на Google.
- Кроме отправки внешней issue, мы отправили внутреннюю консольную issue, чтобы привлечь к ней внимание.
- Мы время от времени отслеживали ситуацию, чтобы знать о прогрессе (повезло, что нам в этом помогал представитель Google).
- Мы решили не пользоваться рекомендацией Google, и вместо этого чётко объяснили проблему и максимально понятно проиллюстрировали её.
Тем не менее, для устранения этой проблемы потребовалось четыре месяца. Наверно, это заняло бы гораздо меньше времени, если бы я знал, как себя вести. Вот некоторые из полученных мной уроков:
- Следует отслеживать ответы Google на внутренние консольные issue в электронной почте с адреса cloudsupport@google.com. Это знание позволило бы нам сэкономить несколько месяцев.
- Возможно, нам не следовало ждать месяц до эскалации проблемы, а сделать это раньше. Учитывая, что устранение проблемы — это, скорее всего, дело одного дня, мы бы могли раньше обратить внимание команды разработчиков на неё. Вероятно, это сэкономило бы нам ещё несколько недель.
Как бы то ни было, мы очень благодарны, что Google внимательно изучила наш запрос, длинное описание проблемы (так мы пытались сделать её понятнее) и даже отслеживала проблему в нескольких отделах (например, команда Google Maps API и команда приложения Google Maps — это два разных отдела).
Мы осознаём, что у приложения, используемого миллионами пользователей, в бэклоге могут быть тысячи issue, поэтому команде разработчиков нужно в первую очередь обращать внимание на те, которые нужно устранять очень быстро. Поэтому я благодарен команде Google за устранение проблемы и за завершение наших мучений.
Пол-лимона подарков от RUVDS. Отвечай на вопросы и получай призы ?