День запуска воспринимается как финишная черта, и не без причины — это видимая веха, то, что празднуют и о чём отчитываются. Для приложения это скорее стартовая черта другого, постоянного обязательства, потому что в отличие от сайта, который в основном остаётся неподвижным, пока кто-то намеренно его не изменит, приложение живёт внутри двух операционных систем и двух магазинов приложений, которые продолжают меняться независимо от желания бизнеса.
Обновления операционной системы нельзя игнорировать
Обе основные мобильные платформы выпускают ежегодные обновления, и каждое может изменить поведение существующего кода — разрешение, раньше выдававшееся автоматически, теперь требует явного запроса, API, от которого зависит приложение, объявляется устаревшим с обратным отсчётом до удаления, размер экрана или паттерн взаимодействия, который предполагал интерфейс, больше не верен на новых устройствах. Приложение, которое активно не поддерживается, необязательно ломается в день выхода новой версии ОС, но с каждым релизом накапливает мелкие трещины, и к моменту, когда что-то заметно ломается, это обычно результат нескольких циклов обновлений с накопившимися, но не устранёнными мелкими изменениями.
Изменения политики стора приходят без предупреждения и с дедлайном
Правила проверки магазинов приложений меняются по собственному графику, а не по графику бизнеса, и обновление политики может потребовать изменить способ запроса разрешения, представления подписки или обработки определённого типа данных приложением — с прикреплённым дедлайном соответствия, после которого приложение может быть полностью удалено из стора до исправления. Это не гипотетическая категория риска; это рутинная часть работы в магазине приложений, и приложение, за которым никто не следит на предмет таких изменений, узнаёт о них только когда его уже сняли или пометили, а это гораздо более разрушительный способ узнать об обновлении политики, чем заранее прочитать список изменений.
Нагрузка поддержки не прекращается после запуска
Каждое реальное обновление базовой платформы, каждый новый размер устройства, каждый крайний случай, найденный реальным пользователем и не покрытый тестированием, порождает вопрос в поддержку или отчёт об ошибке, и объём не снижается после запуска, как подразумевает график проекта, — он смещается от «сделать первую версию правильно» к «поддерживать живой продукт работающим для людей, которые теперь от него зависят», а это другой, постоянный вид работы, а не уменьшенная версия того же конечного проекта.
Что должен реально покрывать план обслуживания
Реалистичный план предусматривает периодическое тестирование против новых релизов ОС до того, как они станут обязательными, а не после того, как что-то сломается; постоянный процесс отслеживания изменений политики стора вместо их обнаружения через уведомление об отклонении; и канал поддержки, реально укомплектованный персоналом, а не форму, тихо накапливающую непрочитанные сообщения. Ничего из этого не должно быть масштабным — обычно достаточно небольшого, регулярного выделения времени, — но это должно существовать как определённое, постоянное обязательство, а не как предположение, что законченное приложение таким и остаётся.
Почему это важно до запуска, а не после
Реалистичную стоимость поддержания приложения живым стоит понять до выпуска первой версии, а не после того, как первый накопившийся backlog поддержки или первое отклонение стором сделают это неизбежным — приложение, заложенное в бюджет как разовый проект, без предусмотренного постоянного резерва, — это приложение, которое либо тихо деградирует, либо требует незапланированного и более крупного исправления позже, а и то и другое обходится дороже, чем стоило бы планирование обслуживания.
Это стоит в одном ряду с другими вопросами «строить или купить», рассмотренными в выборе того, как строить программное обеспечение, подходящее бизнесу — приложение не разовая поставка, как и нанятый сотрудник — не разовый найм. Наша мобильная команда планирует обязательство по обслуживанию вместе со сборкой, а не как запоздалую мысль, когда приложение уже запущено.




