Привет, Хабр! В августе Top Story исполняется полгода — самое время поделиться опытом разработки приложения, рассказать истории из жизни и вспомнить основные ошибки. За эти шесть месяцев наш агрегатор новостей вырос, окреп и имеет вполне завершённый бэкенд и фронтенд, поэтому нам есть о чем рассказать любителям мобильной разработки и тем, кто делает в ней первые шаги.



Мобильная разработка обрела огромную популярность — её ведут мировые гиганты, агентства, небольшие компании и программисты, появилось огромное количество инструментов, которые делают работу над приложением ещё проще. Число приложений растёт с неимоверной скоростью. Cогласно статистике Appfigures, количество приложений в App Store составило на конец года 1,21 млн, а Play Store — 1,43 млн… Мы решились войти в это число и завоевать своих пользователей. С самого начала у нас было несколько отличительных черт, на которые мы могли опираться в процессе разработки. Как вы помните из предыдущих постов, главная особенность Top Story — персонализированный подход к пользователю. Реализуя эту задачу мы набивали шишки, ставили удачные и не очень эксперименты, работали неделями над исправлением порой совершенно смешных ошибок.

Девять советов для всех...


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

Любите ошибки. Не бойтесь их, они всё равно будут, серьёзные, мелкие и даже глупые. Наша команда не раз ошибалась, вот некоторые истории.

  • Сперва новостные статьи в ленте приложения Top Story загружались быстро. Через некоторое время мы заметили, что производительность резко упала и загрузка web-страниц стала занимать слишком много времени. Решение нашлось: теперь мы кэшируем общий ресурс web-страницы в нашей apk, это не требует постоянной загрузки данных — когда пользователь открывает статью с ресурса, приложению всего лишь нужно загрузить новый контент или изображение. После этого среднее время открытия страницы составило около 1 секунды.

  • Изначально TopStory было спроектировано как список новостей, однако в нативном списке просмотра Android возникают проблемы с производительностью, когда элементы списка очень сложны. Для решения проблемы мы изменили код, следуя официальным рекомендациям Android по повышению производительности и использовали отличный open source проект для управления встраивания картинок в элементы новостной ленты. Наконец, во избежание дальнейших проблем, мы стали мониторить производительность и скорость работы приложения, чтобы оперативно находить возникающие проблемы и незамедлительно на них реагировать.

  • Были в истории Top Story и глупые ошибки… Однажды к нам обратился пользователь из Турции и пожаловался, что не может делиться интересными статьями на Facebook. У наших конкурентов всё «шарилось» на ура. Мы задумались. Поиски ошибки заняли очень много времени. В итоге мы обнаружили, что это проблема Facebook: их официальное SDK для шеринга не позволяло делиться контентом, если язык устройства — турецкий. А в продукте конкурентов был встроен не официальный SDK Facebook, а нативный Android. Хоть они и выглядят одинаково, официальный фейсбучный SDK не работает, а с родным Android — всё ок.

Обязательно тестируйте приложение — в том числе на самих устройствах и на эмуляторах устройств. Мы уже писали, что Top Story часто обновляется, поэтому приходится уделять огромное внимание тестированию и при этом работать очень быстро. Мы смотрим приложение в течение трёх дней до релиза с помощью ручных и автотестов. Для тестирования UI мы используем Robotium, для стабилити-тестов — Android Monkey. Особенно тщательно мы проверяем новые фичи, затем «прогоняем» взаимодействия и совместимость с устройствами. Также у нас есть большой чеклист для некоторых критичных моментов — по нему мы проводим тесты, чтобы избежать самых неприятных и глупых багов.

Используйте лучшие алгоритмы и структуры данных. Всегда можно остановиться и нагромоздить костылей, но если вы собираетесь долго жить на рынке — избавляйтесь от тяжёлых решений, ищите лучшие образцы проектирования. При разработке обязательно рассматривайте архитектуру приложения как единое целое (бэкенд+фронтенд), иначе не избежать досадных ошибок.

Заботьтесь о графическом интерфейсе пользователя (GUI) и дизайне приложения. Проектируйте формы, списки, продумывайте логику работы приложения, управление жестами, взаимосвязи между различными разделами приложения. Будьте внимательны к мелочам, работайте с цветом, ярлыками приложения, заголовками и названиями элементов меню, создавайте свой уникальный стиль. При проектировании раз за разом проходите путь пользователя — так вы увидите очевидные нестыковки и нелогичное поведение приложения. TopStory всегда тщательно работает над интерфейсом — как мы это делаем и что ещё предстоит доделать, можно прочитать в предыдущем посте.

Выпускайте приложение для небольшого количества пользователей уже на этапе альфа-версии — потому что очень важно собирать фидбек «в поле» с первого дня, и постепенно, по мере приближения к билду 1.0.0, увеличивать количество установок, заодно экспериментируя с каналами привлечения пользователей. Важно не быть идеалистом — идеальный продукт сделать просто невозможно, а потому нужно много экспериментировать и двигаться шаг за шагом, проверяя гипотезы и отбирая лучшие решения.

Используйте качественные первоисточники информации, например, девелоперские разделы по платформам (есть и у Google, и у Apple), читайте гайдлайны, пользуйтесь многочисленными коммьюнити разработчиков — там можно найти ответы на многие вопросы. Изучайте лучший опыт open source проектов — вы сможете увидеть хорошие решения и использовать их в своих разработках. Мы поняли, что не нужно изобретать колесо — есть очень много крутых проектов, которые помогут быстро продвинуться.

Постоянно обновляйтесь и развивайтесь. Основой для развития могут стать мнения и отзывы пользователей — собирайте их в комментариях Store, по электронной почте, через социальные сети. Так сложилось, что мнение пользователей — основной источник вдохновения разработчиков Top Story. Если вы зайдёте, например, к нам на Google Play, то увидите более 10 200 отзывов, каждый из которых мы прочитываем и принимаем к сведению. Например, под нашим первым постом на Хабре читатель отметил, что название раздела «Исследовать» не очень вписывается в общую структуру.



Команда Top Story провела мозговой штурм и был найден выход — этот раздел мы назвали «Калейдоскоп».

Помните о проблемах платформ. Например, мы столкнулись с тем, что проблема при работе под Android — это «дробление» Android, когда производители смартфонов выпускают новые устройства для множества конкурирующих версий Android OS. Вот здесь и встаёт вопрос, как сбалансировать качество кода и требования продукта в условиях, когда нужно развиваться очень быстро. И здесь важно владеть всеми инструментами: возможностями языков (в нашем случае, это языки Java для Android, Objective-C для iOS), фреймворков, инструментов для бэкенда.

… и десятый для самых рисковых


Не бойтесь работать и развиваться в составе интернациональных команд. Сегодня работе в самой сложноорганизованной команде не препятствуют ни расстояния, ни временные пояса. Взаимодействие отличных разработчиков, коммерсантов, дизайнеров, системных архитекторов со всего мира позволяет работать эффективно. Разработкой Top Story занимаются профессиональные программисты из Китая, и работа с ними — это не только обмен опытом, но и прекрасный культурный обмен. И касается это, в частности, культуры разработки. Мы рассказали нашим китайским ребятам о Хабре и о публикации, а они взамен немного рассказали специально для поста о…

… о GitHub. Мы используем официальное SDK Vkontakte для того, чтобы пользователи приложения могли делиться понравившимся контентом. Однажды мы стали наблюдать странные падения приложения и выяснили, что ошибка происходит, если после нажатия Send, но до завершения загрузки новости в ленту поступает звонок или случайно нажимается кнопка Home на девайсе. Мы пофиксили такое поведение SDK и закоммитили проект на GitHub.

… о языках программирования и фреймворках. Популярные технологии Китая и других стран мира не сильно отличаются, но китайские команды (например, Testin) создали несколько полезных инструментов для разработчиков, которыми нам удобнее пользоваться. Такие национальные разработки помогают командам стартапов (таким, как наша) очень быстро развивать продукт.

… о том, как китайцу научить машину понимать русский язык. Без знания русского языка мы учим машину понимать обычный текст и разрабатываем алгоритм автоматической обработки естественного языка (NLP — natural language processing) тремя путями.

  1. Статистический алгоритм обучения. В Top Story собирается большой объём данных включая новостной контент и поведенческие данные пользователей (запросы, поиск, закладки…). Обрабатывая их, мы выделяем полезные языковые знания, которые используются для дальнейшего развития алгоритмов. Для обработки мы используем, например, word2vec — open source технология для статистической обработки массивов текстовых данных, определяющий отношения слов в существующих текстах методами нейронных сетей.

  2. Обучение на основе баз знаний и open source библиотек. Например, извлечение именованных сущностей (NER — named entity recognition), основанное на данных Википедии. Также мы используем стеммнинговый алгоритм (проект «Snowball»), который базируется на поиске основы слова путём последовательного отсекания некоторых морфем (суффиксов, окончаний) по установленным правилам. Этот алгоритм мы выбрали из-за скорости работы — для нас в Top Story это крайне важный фактор.

  3. Наконец, мы используем человеческую экспертизу, и тогда в паре с девелопером работает переводчик.

… о языковых барьерах и проблемах коммуникации. Мы общаемся на английском языке — без него развитие в современной IT-отрасли невозможно, ведь именно на нём написаны лучшие мануалы для разработчиков, девелоперская документация Android и много другое.

Если вы решились заняться мобильной разработкой — смело начинайте! Это перспективное и интересное направление — оно охватывает огромное количество пользователей по всему земному шару, предполагает самые новые и интересные инструменты разработки, даёт возможность реализовать самую фантастическую идею и объединить вокруг неё энтузиастов из разных частей света. Большой путь начинается с первого шага. Удачи!

А пока вы можете установить Top Story из AppStore и GooglePlay.

Комментарии (4)


  1. Subrisk
    17.08.2015 16:17
    +1

    Спасибо за текст! Мне бы его три года назад, когда была возможность войти в мобильную разработку, но был огромный страх. И одна из причин была связана как раз с ошибками, с временем разработки, с проблемами старта. Здесь я нашёл ответы на пару интересных вопросов.
    А что за проект Snowball? Впервые слышу, если не сложно, поделитесь ссылкой на спецификацию или ещё что.

    P.S.: с маленькой датой вас, Top Story и успехов в развитии.


    1. qshnar
      17.08.2015 16:50
      +2

      Спасибо за поздравление!

      Snowball — это хорошо известный проект создания стемминговых алгоритмов. Ветка для русского языка тут. Также стемминг хорош для преобразования словоформ к единому «корневому» слову. Например, «книгой», «книги» -> «Книга»


  1. Itimora
    17.08.2015 18:00
    +1

    Можно добавить, по опыту, ещё совет. Если вы один начинаете, то начинайте в одиночку: создайте концепт, макет, прикиньте логику и интерфейс, а затем собирайте команду и пусть каждый делает то, что делает в совершенстве. Но идея обязательно должна иметь каркас — это важно. Тогда и за полгода можно подняться!


    1. Subrisk
      17.08.2015 19:49
      +1

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