{"id":14279,"url":"\/distributions\/14279\/click?bit=1&hash=4408d97a995353c62a7353088166cda4ded361bf29df096e086ea0bbb9c1b2fc","title":"\u0427\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435: \u0432\u044b\u0435\u0445\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0437\u0430\u0435\u0445\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435?","buttonText":"","imageUuid":""}

Как контролировать разработку приложения

Денис Гордиенко, руководитель Bright Mobile, о том, как организовать работу с разработчиком при создании мобильных приложений на примере мессенджера.

Недавно мне позвонил один из подписчиков моего YouTube-канала с просьбой доделать приложение. Он заказывал некоторое время назад в одной из студий разработку мессенджера под iOS. Пока делалось приложение компания развалилась, все свои обязательства, насколько могли, выполнили, но не реализовали push-уведомления. Собственно, просьба звучала так, что нужно по исходникам разобраться в проекте и доработать push.

Я отказался, потому что занимаемся кроссплатформой на Ionic, а приложение заказчика сделано на нативе. Вторая причина отказа - на рефакторинг порой уходит 90% бюджета, если сравнивать с разработкой с нуля. А в некоторых случаях это не возможно в принципе.

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

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

Разработчику виднее

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

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

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

Кто-то из разработчиков может так досконально не настаивать на проверке, а работать в формате "согласовал и ладно". Вообще, у многих разработчиков есть тенденция, все самое сложное оставлять на конец. В итоге, разработчик может сделать приложение процентов на 80, взять оплату только за сделанное и покинуть проект или расторгнуть договор. Например, как в случае выше, разработчик был уверен, что сделает push, но не смог. По закону всё чисто - деньги взяты пропорционально выполненной работе, но кому нужен мессенджер без моментальных уведомлений о новых сообщениях? Такой продукт не имеет потребительской ценности.

Версионный подход к разработке

Ситуация с тем, что проектирование и договор проверяются сквозь пальцы, усложняется тем, что заказчик хочет реализовать всё приложение сразу.

Его понять можно. Обычно, у заказчика есть некий фиксированный бюджет, за рамки которого выходить не планирует. И ему важно, всё предусмотреть, чтобы весь перечень необходимых работ входил в выделенную сумму. Некоторые хотят сознательно сделать как можно больше функций в первой версии, рассчитывая, что такое приложение будет иметь больший спрос, кто-то считает, что "стрёмно" публиковать не доведённое до ума, с его точки зрения приложение.

Но чем больше задача, тем меньше шансов дойти до финала. Потому что прочность цепи равна прочности самого слабого звена. Чем больше звеньев - тем больше шанс понизить прочность. Применяя к разработке это выглядит так. На каком-то из модулей (push-уведомления) программист что-то не учёл, при этом оставив его на потом. В итоге приложение посыпалось.

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

Рассмотрим на примере мессенджера. На какие версии можно разделить разработку?

Минимальный мессенджер состоит из следующих экранов:

  1. Регистрация/Авторизация
  2. Список контактов
  3. Переписка
  4. Создание общего чата
  5. Просмотр профиля
  6. Редактирование своего профиля
  7. Настройки
  8. Меню
  9. Пользовательское соглашение
  10. Уведомления

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

Но даже из 10 функций выше можно выделить несколько, которые нужно сделать в самом начале разработки, чтобы понять, что разработчик справится с задачей. Эта микроверсия будет содержать:

  1. Регистрация/Авторизация
  2. Список контактов
  3. Переписка
  4. Уведомления

Очевидно, что этот сырец нельзя публиковать в сторы, но он и делается не для широких масс, а чтобы вы с программистом могли проверить работает ли основа. То есть в этой нулевой версии вы должны иметь возможность авторизоваться, увидеть контакты, написать сообщение, а собеседник должен получить push. Всё.

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

Спокойствие в выпуске версий

Планировать следующую версию или блок доработок, когда у тебя перед глазами есть работающая предыдущая, гораздо легче. На малых суммах видишь, как развивается приложение и устраивает ли цена/качество разработчика. Если возникнет конфликт с разработчиком, то временные и денежные потери будут минимальны. При этом, если всё-таки расстаётесь, то шанс найти нового разработчика, когда архитектура работает и нужны косметические доработки проще, чем когда не хватает каких-то архитектурных решений.

По опыту могу привести принципиальные функциональные элементы ещё для нескольких видов проектов.

Маркетплейс услуг. Общая логика - заказчик размещает заказ, по какому-то принципу назначается или выбирается исполнитель, сервис зарабатывает комиссию.

  1. Регистрация/Авторизация
  2. Создание заявки
  3. Просмотр и отклик, либо функционал автоназначения исполнителя
  4. Контактные блоки заказчика с исполнителем (переписка, телефон или иное, что закладывается в проект)
  5. Уведомления
  6. Функционал монетизации

Товарный маркетплейс. Сторонние вендоры размещают свои товары, они агрегируются на площадке, кленты заказывают товары, продавцы уведомляются о заказах, площадка зарабатывает комиссию.

  1. Регистрация/Авторизация
  2. Загрузка номенклатуры поставщика
  3. Витрина с предложениями
  4. Возможность заказа (не обязательно покупка, можно просто оформление заказа или контакты продавца)
  5. Уведомления
  6. Функционал монетизации

Доска объявлений. Одни пользователи размещают объявления, другие связываются с авторами объявлений, площадка зарабатывает на доп. услугах.

  1. Регистрация/Авторизация
  2. Размещение объявления
  3. Лента объявлений
  4. Возможность контакта (переписка, телефон или иное, что закладывается в проект)
  5. Уведомления
  6. Функционал монетизации

По ходу статьи я использовал слова "программист" и "разработчик". Они подразумевают, как работу с программистом в штате или на фрилансе, так и со студиями.

0
67 комментариев
Написать комментарий...
Wonabeez Doratie

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

Ответить
Развернуть ветку
Денис Гордиенко
Автор

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

https://xsfera.ru/2019/11/изучил-react-native/

Ответить
Развернуть ветку
Wonabeez Doratie

А заказчик понимает, что заказывая приложеньку на Море, вероятность того, что ее допишу меньше. Разрабов таких не очень много. Насчёт аргументации и бэ, я согласен. Но есть причины по которым реакт имеет значительно больше разрабов

Ответить
Развернуть ветку
Денис Гордиенко
Автор

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

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

Ответить
Развернуть ветку
Paul_N

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

Ответить
Развернуть ветку
Денис Гордиенко
Автор

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

Ответить
Развернуть ветку
Виталий Подольский
 решение с худшими параметрами, чем готовые модули, которые обкатаны не на одной сотне приложений

Ок. Но библиотек для нейтива (обкатанных на тысячах приложений) в разы больше, чем решений для кроссплатформы. =) Хотя желательно делать руками и самому, дабы чужой гов...код в приложение не пристроить. Ну или не тянуть тонну лишнего функционала.

программист в любой момент может уйти и дорабатывать чистый самопис мало кто захочет

Какой еще самопис?! Или вы про нейтив говорите? Или про самопи..ец? =) 

Вот тут вы в корне не правы, нейтив проще отладить/доделать/рефакторить, чем кроссплатформу с тонной сторонних библиотек.

Что то мне подсказывает, что ваши 9 лет руководства программерами сильно ограничены удаленностью региона. Вы не развиваетесь, а поймали одну волну и гоните ее дальше, как единственно правильную. Может пора расширить кругозор? Я понимаю, что для местечкового бизнеса лучше и дешевле заказывать подобные приложения, чем каждому нейтиву более 200к в месяц платить.

Ответить
Развернуть ветку
64 комментария
Раскрывать всегда