Эволюция HeadHunter на iOS

    image

    На днях наша команда выпустила обновленное приложение HeadHunter для iOS. С этим релизом, помимо обновленного интерфейса и переработанного кода, появились долгожданные возможности редактирования резюме, обновления даты его публикации и изменения видимости. А еще мы добавили экспериментальную возможность создавать резюме с нуля.

    С самого рождения в феврале 2012 года приложение переживало трудное детство.
    Первую версию приложения разрабатывали внешние подрядчики. Однако, отношения с ними у нас не сложились, и какое-то время приложение жило своей самостоятельной жизнью. А в феврале 2013 года за него взялась наша команда мобильной разработки, которая к этому времени уже активно занималась разработкой приложения HeadHunter для Android.

    Первая версия приложения имела:
    • около 16 тысяч пользователей (судя по загрузкам);
    • невероятное число падений;
    • неизвестное количество реальных пользователей и их проблем.

    Как вы понимаете, пользоваться таким приложением могли очень лояльные к сервису hh.ru люди, поэтому было принято решение выходить на новый качественный уровень.


    “Всем выйти из сумрака!”(с)


    Первым делом хотелось сделать так, чтобы пользователи могли без частых падений пользоваться уже имеющимся на тот момент приложением. Для этого нужно было перестать работать вслепую. Поэтому мы взяли в руки отладчик, отловив и исправив самые очевидные ошибки, которые смогли воспроизвести.
    С инструментальной точки зрения мы использовали поставляемые с xcode инструменты для обнаружения утечек. Про это есть несколько дельных статей на Хабре.

    Далее мы организовали распространение приложения через hockeyapp.net. Кроме дистрибуции этот сервис дает понятные crash-уведомления. А еще он поддерживает уведомления о крешах прямо в багтрекер: в нашем случае подошел вариант интеграции с jira.

    Чтобы иметь детальную техническую статистику, в том числе и по количеству ошибок, мы добавили в приложение статистику от flurry.com.

    После этого приложение вышло в паблик в марте 2013 под версией 1.2
    Всего же нам потребовалось 3 публичных релиза, чтобы вылечить большую часть крешей, отрефакторить код, и, тем самым, сделать поведение приложения заметно стабильнее.
    Тем не менее, при обновлении приложения с новым функционалом в январе 2014 мы получили еще более невероятное число крэшей. Но в этот раз мы были во всеоружии: наличие мониторинга и системы информирования об ошибках помогло нам очень оперативно отловить и исправить большее количество крэшей. Следующее обновление, вышедшее через 7 рабочих дней, влючая ревью в сторе, после первого релиза уже было стабильным.



    Как видно на графике, мы начинали с ~900 крешей в неделю (верхний график), крэш был в каждой 50-й сессии запущенного приложения. (нижний график)(графики получены по данным flurry.com).

    Если посмотреть на график, то выглядит пугающим только абсолютное число крэшей. Относительно многократно выросшей аудитории приложение было более стабильным, чем его предшественник.
    Следующим шагом в настройке работы команды будет не реактивное реагирование на ошибки, а превентивное.

    На заметку про организацию тестирования: у нас с переменным успехом получилось использовать hockeyapp для демонстрации промежуточных результатов внутри компании. У него достаточно непростая схема подключения новых пользователей. В итоге у нас устоялась схема с двумя iOS приложениями в hockeyapp: одно для ежедневных обновлений и демонстрации результатов внутри команды разработки, другое — для демонстрации более широкой аудитории тестеров, обновляемое раз в 2-4 недели.
    Но вот тестирования на некоторой стабильной и обширной группе альфа-тестировщиков собственными силами организовать не получилось. Буду рад услышать опыт читателей, как они организуют такого рода тестирование.

    “Чтобы начать с нуля до него нужно еще долго ползти вверх” (с)


    После стабилизации того, что у нас уже было, мы приступили к полноценной переработке приложения, так как для его преобразования к новому дизайну пришлось переработать весь код.

    Инкрементального обновления не получалось. Выпускать наполовину перелицованное приложение просто нельзя — будет слишком много интерфейсных различий. Вести изменения сразу в двух кодовых базах — дорогое решение, чреватое рассогласованиями кода. К тому моменту подоспели два новых условия, которые нужно было учесть:
    • вышла версия API hh.ru (еще не публичная, но уже нужно было обкатывать ее в боевых условиях);
    • на сайте была реализована возможность авторизации через социальные сети.

    Готового приложения с новым дизайном у нас еще тогда не было и до релиза было еще далеко, значительная часть отзывов касалась ошибок авторизации. Это сподвигло нас на эксперимент: выпустить быстрый релиз на старой кодовой базе, в котором реализовать работу на новом API и авторизацию через социальные сети.
    К середине сентября 2013 года мы достаточно оперативно подготовили и выпустили такое обновление. После этого в октябре мы запустили совместное промо для мобильных приложений в виде smartapp баннера, что дало заметный рост как установок обоих приложений, так и числа активных пользователей.



    Этот релиз дал противоречивый, но ценный опыт. На стыке нового API и авторизации мы получили приличное количество ошибок. Реакцией на такое обновление стала волна низких оценки в App Store от пользователей.

    Что мы из этого для себя вынесли (на самом деле, все выводы — подтвержденное на личном опыте капитанство):
    • не стоит делать скоропалительных релизов :)
    • положительные отзывы пишут редко, а вот отрицательные легко.

    Если смотреть на картину по ключевым метрикам целиком, наблюдалась положительная тенденция:
    • наблюдался рост числа активной аудитории, релевантный росту числу установок;
    • количество целевых действий пользователей в приложении так же росло.

    Это давало понимание, что позитивный тренд присутствует, а значит, мы на правильном пути.

    Кстати, для наблюдения за поведением пользователей в приложениях мы используем проверенные временем инструменты: flurry.com и Google Analytics. А также используем Distimo.com для общего мониторинга за приложениями для разных платформ. Т.к. все эти инструменты предоставляют API доступа к своим данным — мы воспользовались этой возможностью и построили небольшую кастомную статистику, в которой можем сравнивать поведение пользователей на нескольких платформах одновременно.

    А вот и он, долгожданный


    Опыт предыдущего релиза дал нам излишнюю осторожность. Мы решили не делать его просто ради редизайна. и добавили дополнительной ценности:
    • редактирование резюме;
    • обновление даты его публикации;
    • и в качестве эксперимента проработали создание резюме.

    Про редизайн, вообще, можно написать отдельную статью — было все: и тестовые группы, и перерисовка каждого из макетов по много раз на несколько вариантов, и ожесточенные ежедневные обсуждения каждой версии макета, и живые прототипы.

    Для оценки макетов интерфейса из всех сервисов нам очень помог flinto.com, позволивший очень быстро прототипировать интерактивный интерфейс. Кстати, этот же сервис мы активно использовали для прототипирования android-приложения и новой версии мобильного сайта.

    В итоге мы получили вот такой новый дизайн:


    Тем временем на арене появилась beta iOS 7, а мы еще не перевели все приложение на новые рельсы. Поэтому позволили себе в очередной раз все поменять:


    Отдельного внимания заслуживает возможность управления своим резюме прямо с телефона. Внутри команды мы прошли много этапов от “это серьезный процесс, с телефона написать нормальное резюме невозможно”, до “это очень полезная штука”.

    На мой взгляд, достаточно успешная модель редактирования профессионального профиля представлена у приложения LinkedIn. Коллеги реализовали работу с профилем в двух режимах: просмотра и редактирования, между которыми пользователь может переключаться.

    В приложении hh.ru мы решили объединить режим просмотра и редактирования, предположив, что основным сценарием использования будет короткий просмотр своего резюме и внесение небольших корректировок и дополнений (например обновление опыта работы).

    В итоге интерфейс редактирования резюме получился таким: первый экран позволяет быстро просмотреть все резюме, а экран для каждого блока свойств позволяет сразу внести корректировки и дополнения.



    Для экспериментальной возможности создания резюме мы выбрали режим пошагового мастера, с помощью которого можно пройти то немалое количество шагов, которое требуется для создания качественного резюме. В целом же, над интерфейсом создания резюме придется еще поработать, поэтому мы с удовольствием выслушаем рекомендации и пожелания по его улучшению.

    Задачу по управлению резюме в приложении hh.ru нам, на мой взгляд, удалось решить на хорошем уровне. Статистика по событиям в приложении покажет реальную картину.

    Поговорите со мной.


    Взаимодействие с пользователями в AppStore — это такая специальная история.
    В сравнении с функционалом GooglePlay, возможности App Store по взаимодействию с пользователями, мягко говоря, ограничены. Релизный цикл может получиться долгим из-за ревью. Вступить в контакт с пользователями средствами платформы невозможно.

    Из-за отсутствия возможности просто ответить человеку, его негатив выливается в низкую публичную оценку.Диалог с пользователем помогает решить его конкретную проблему на типичных случаях выявить недоработки и устранить их.

    Мы начали экспериментировать с сервисами helpdesk, интегрированным прямо в приложение. У hh.ru уже есть несколько способов взаимодействия с пользователями, в том числе решения от российских сервис-провайдеров. К сожалению, никто из них не предоставляет средств для работы в мобильной платформе. Пришлось поискать такие инструменты на глобальном рынке.

    На текущий момент мы используем сервис helpshift.com, потому что он поддерживает русский язык и просто интегрируется в приложение, хотя есть еще несколько интересных инструментов. Есть, конечно, и технические недочеты, но мы их успешно и оперативно решаем совместно с командой разработчиков сервиса.

    Должен отметить, что возможность общения с пользователем в приложении дает несколько плюсов:
    • негативный опыт пользователя трансформируется в нейтральный или позитивный, вместо выплескивания в публичную оценку без решения проблемы;
    • легко собирается актуальный фидбек по наиболее важным фичам;
    • появляется дополнительный источник информации о недочетах приложения.

    Я пока не берусь оценивать степень влияния подобного функционала на публичную оценку, но уже могу однозначно сказать, что оно позитивное.

    Где мы сейчас


    “Куда нас привели все наши приключения?” — спросите вы.
    На текущий момент мы имеем:
    • более 200 000 загрузок приложения из AppStore
    • MAU в районе 100 000 — 130 000 пользователей, и показатель растет
    • оценка в AppStore за последние версии приложения колеблется между 4 и 5 звездами
    • приложение достаточно стабильно живет в верхних позициях топа бесплатных приложений в категории Бизнес в России
    • аудитория приложения пока наиболее активная среди всех мобильных платформ, на которых представлен HeadHunter, хотя и не самая многочисленная

    Как вы могли видеть по графикам в начале статьи, у нас еще есть пул ошибок. И это значит нам есть над чем работать. Мы конечно же планируем дальше заниматься не только повышением стабильности, но и вводить новые возможности и не очень заметные сразу, но очень полезные улучшения.

    Надеюсь, новое приложение и опыт его развития будет вам полезен! Принимаем благодарность звездами :)


    Думаю, что аудитории Хабра не надо желать удачи в поисках работы — профессионалов она сама находит. Просто держите свое резюме в актуальном состоянии!

    HeadHunter

    108,83

    HR Digital

    Поделиться публикацией

    Похожие публикации

    Комментарии 19
      +1
      Будет уроком для компаний, которые берут на аутсорс проекты :)
        +2
        Аутсорс подход не является причиной успеха или не успеха. В некоторых условиях это единственная возможная опция в какой-то момент времени.
        Просто в данном случае не сложилось по разным причинам. И там вина не только подрядчика :)
          –1
          Аутсорс понятно не причина, причина компания, которая выполняла этот заказ. Просто надо осторожно выбирать среди аутсорсеров. Есть и положительные опыты использования аутсорс.
            +1
            Если бы было все так просто: выбрал правильную компанию — и все хорошо ;)
              –1
              Ну вот обычно нет времени на выбор правильной компании, а иногда их просто нет )
        –3
        Скажите, а реализация приложения на html + js не рассматривалась и если рассматривалась — почему отказались?
          +7
          Когда есть ресурсы, лучше делать нативные приложения.
            –3
            Безусловно, но с другой стороны, насколько я понимаю, приложение не требует ни каких хитрых вещей которых нет в html, js — соотв. зачем дублировать код между ios и android, если можно было бы использовать одну и ту же версию.

            Или оно настолько тормознутым получается что лучьше не связываться?
            +5
            Два основных критерия:
            — неудовлетворительная скорость работы приложения
            — «ненативность» интерфейса
            Год назад это было серьезным препятствием для развития приложения.
            Тем не менее, при разработке приложений в некоторых условиях, будет оправданным иметь ненативное приложение. Стоимость поддержки и скорость выхода на несколько платформ сразу с меньшими затратами могут быть преимуществом в некоторых случаях, даже при условии этих критериев со скоростью и внешним видом.

            У нас в приложении есть элемент ненативного приложения — форма авторизации регистрации пользователя работает через webview. Какое-то время она была одним из узких мест приложения по производительности. Сейчас ее удалось приготовить до удовлетворительного состояния.
              +5
              Кстати о нативности: у нас на районе нынче нативно так ↓ :-)

               

              А еще я не дизайнер, но краем уха слышал про оптический центр. Могу быть не прав (чай дизайнеры у вас не дураки), но буковки мечтают быть подвинутыми вправо (все-таки справа дырка больше визуально из-за отсутствия вертикальной палки). Как-то так, не?

                0
                И чуть выше.
                  +2
                  Ну что ж вы все рассказали: так бы у них оставалось место для творчества, а не простое действие по указке :-).

                  Надеюсь, что про тень не в серьез шутку воспримут (это камень огород в сторону T M ). Всё, что я думаю о «лонг шэдоу» прекрасно проиллюстрировал Марк Эдвардс (по ссылке анимация, подождать).

                  Ну и раз уж пошло дело, продолжим: интерфейс приятный у H H, но сверьте макеты: очень много мелких отличий и косяков (лень в пятом часу утра делать скриншоты и подчеркивать каждую мелочь).

                  1. Тыканье в слогане «Работа мечты в твоем кармане» несколько контрастирует с остальным выканьем (второй же экран уже говорит про «по нужным вам параметрам»). Дело не в обращении на ты, а в неоднородности.
                  2. Странно, что авторизация через браузер: в чем проблема была сделать через обращение к сервису, но используя стандартные контролы (да и авторизацию фейсбучную можно прикрутить встроенную в iOS)?
                  3. Имя-фамилия в меню для коротких имен в две строчки выглядит странно (куча места, чтобы вместить в одну строку Иван Иванов). Плюс сравните межстрочный интервал между фамилией и именем в макете статьи и в реальном приложении.
                  4. Аналогично иконки пунктов в макете вровень, а в реальности оказались уехавшими вниз.
                  5. Имя-фамилия никак не отличаются от других нажимаемых пунктов меню, хотя на имя нажать нельзя (точнее, нажать-то можно, только ничего не случится). А еще спрашиваете, почему нельзя ссылки прекратить подчеркивать, да вот почему.
                  6. Для капслока нужна разрядка. Эппл так старается с Text Kit и прочими прелестями для типографики, а вы тупо капсом «фигачите».
                  7. Отступ справа иконки фильтра в поиске меньше, чем левый отступ у «гамбургера».
                  8. К слову о фильтре: что в нем делает кнопка «Подписаться»? Нелогичное место для кнопки (т. к. можно сохранить поиск и без всякого доп. фильтра просто на основе данных в поисковой строке).
                  9. Линия под заголовком «Показывать за период» ниже чем синяя линия на основном экране (а, по идее, они должны продолжать друг друга).
                  10. Числа во всем приложении не разбиты по разрядам — фу-фу-фу.
                  11. В поиске вакансий элементы списка имеют отступ сверху чуть меньше, чем снизу.
                  12. Информация о вакансии сверстана через одно место (сравните скриншот ниже с макетом в вашей статье): заголовки списков ближе к предыдущим спискам, чем к своим собственным элементам, неправильный интерлиньяж в разделе информации об опыте и графике (проще говоря, строки налипли друг на друга). Ненумерованные списки по правилам оканчиваются на точку с запятой (кроме последнего элемента, который оканчивается на точку).

                  13. В скриншоте выше трудно не заметить, что на «Гродно» нельзя нажать (хотя, казалось бы, в чем проблема поискать в картах). Однако, для вакансий с указанной улицей (а не только городом) это возможно.
                  14. Из-за того, что фон сероватый, логотипы компаний без альфы выглядят очень стремно (да и вообще логотип размером с 7 мм, вставленный с кривым отступом — бяка).
                  15. В резюме интересна фраза в интерфейсе «Дата обновлена Сегодня» (если никого не смущает фраза в стиле «масса взвешена», то, хотя бы, писать «сегодня» с маленькой буквы).


                  Отдельно радует раздел «Обратной связи» (который, скорее, является FAQ’ом — странный выбор названия, ибо обратная связь про другое). Похоже, никто никогда не читал и не открывал там. Первый же вопрос в хелпе про приложение для компаний (несколько странный выбор, хотя, может, это действительно самый часто задаваемый вопрос среди 200 000 загрузивших приложение).



                  Тут все хорошо: начиная от «Напишите Нам» (именно так, «нам» с большой буквы — такого я еще не видел), кончая разными размерами и паддингом кнопок «Да» и «Нет» (и капслоком в них).

                  Начиная со второго же вопроса-ответа всем стало наплевать на раздел:



                  Внимательный читатель заметил перлы в стиле «Возможно ли это?» и «Прямо сейчас», невопросительный заголовок (хотя предыдущий пункт про доступность приложения рекрутерам был с вопросом на конце), неправильные кавычки, пунктуация и несогласованность членов («содержится слова»).

                  Начиная с третьего вопроса стали пропадать уже и точки.

                  Ну и нельзя не отметить прекрасно К. О. при ответе на вопрос о полезности (а также поехавшую верстку):



                  Но это все мелочи, большинство из которых поправят очень быстро. Главное функционал и надежность, которые явно потрепали им нервы, за что им большой пирожок (но про детали не забывайте). Я как-то хотел сделать обзор в своем обычном стиле приложения 2Gis, так быстро положил на это дело (там прямо «Сбербанк»).
                    0
                    Ух, какой вы подробный анализ вы провели. Спасибо.
                    Это очень полезный фидбек, несмотря на то, что часть недочетов нам известна.
                    Будем улучшать.
                      0
                      По багам: встретил только два:
                      1. Раза 3 подряд зашел в раздел со списком всех вакансий, на 3-й раз загрузчик вакансий завис (крутился лоадер, но ничего не загружалось).
                      2. У меня два резюме: обновил сначала одно, потом второе. Потом ушел в другой раздел и вренулся назад в раздел резюме. Первое из обновленных резюме вместо даты обновления писало, что оно не опубликовано (вроде, что-то про видимость). Заново перезашел в раздел: все ок.
                        0
                        С двумя резюме постоянный баг оказался про обновление: всегда, обновив одно, оно показывается как неопубликованное.

                        Счетчик новых просмотров резюме не сбрасывается в ноль при открытии на телефоне раздела со списком просматривающих компаний.

                        При открытии вакансий из автопоиска открываются все, а не только новые (непросмотренные с прошлого раза).
                          +1
                          Спасибо за обратную связь.
                          Ошибка с публикацией должна быть исправлена следующим обновлением, которе сейчас в сторе на ревью.

                          А автопоиски и счетчик просмотров резюме — это пока наша головная боль с legacy кодом, лечением которой мы занимаемся. Надо некоторое время чтобы реализовать это в новом api.hh.ru и перевести приложение на новый api для автопоисков и истории просмотра.
              +1
              Молодцы, жду еще статей по тех.части
                +2
                Добавлю свои пять копеек. Свайп от левого края, который в iOS 7 возвращает на страницу назад, у вас не работает, приходится постоянно тянуться в верхний край для возврата назад. Это тупо. Тем более, для открытия левого и правого меню можно сдвигать главный экран с любого места, так что свайп от самого края не должен мешать (многие приложения это реализуют у себя). При этом в разделе «Справка» свайп назад работает.

                На странице «Вход в личный кабинет» изображение HH размытое, судя по всему не ретина, да и выглядит страница откровенно плохо.

                При уточнении профессиональной области отчего-то пропали специализации, хотя реализовать их можно было бы там же, очень аккуратным выпадающим вниз по стрелочке списком. В «Требуемый опыт» почему-то пропали чек-боксы, которые присутствуют во всех других меню, что также выглядит нелогичным, тем более, что выбор можно отменить по второму нажатию на вариант.

                Приложение постоянно падает, если пытаться удалить из меню «Отобранное» вакансии, которых, судя по всему, уже нет (пишет, что з/п не указана). Плюс ко всему, в этом же меню не сохраняются описания вакансий, что делает эту функцию практически бесполезной.

                Также очень часто глючит скролл, вместо листания вверх/вниз, он либо ничего не делает, либо пытается открыть боковое меню.

                В общем и целом, возникает такое впечатление, что тестированием приложения не занимался вообще никто! Странно видеть такое от столь крупной и известной компании…
                  +1
                  Спасибо за обратную связь. Все по делу, не смотря на достаточно категоричную форму в финале :)

                  Мы выходим на периодические обновления приложения, думаю что все крэши отловим еще за 1-2 релиза.
                  Ну и доработки интерфейса тоже будем проводить, в том числе и те, которые вы упомянули.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое