Первый коммерческий проект

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

Обучение

Сначала расскажу немного о себе. В 2018 году я вообще понятия не имел о том, что такое настоящий коммерческий проект с реальным заказчиком.Поэтому для меня все началось с Binary Studio Academy. Об интенсиве я узнал от друга, который успешно его закончил и настоятельно рекомендовал мне. В тот момент я уже занимался самостоятельно изучением JavaScript, параллельно работая на Запорожской АЭС.

История друга вдохновила меня на поступление, после усердной подготовки (штудирования рекомендуемых материалов от Binary) тест был пройден, и началось самое веселое лето в моей жизни, оно состояло из кучи заданий, которых я никогда прежде не делал, огромных объемов информации и бесконечных дедлайнов. Я продолжал работать на атомной станции, лекции смотрел в течение рабочего дня в любую свободную минуту, домашки делал по вечерам. Спустя месяц начался практический этап — разработка проекта с коучами и командой. За прототип приложения был взят Confluence — сервис для командного ведения документации, что-то похожее на Википедию. Пользователи в приложении могли создавать и редактировать документы различного типа, вся их история изменений сохранялась — всегда можно было вернуться на прежнюю версию документа. Сервис позволяет настраивать права для юзера, создавать группы юзеров, получать реал тайм уведомления. Архитектура приложения включала в себя React, Redux, SocketIO, MongoDB, RabbitMQ, ElasticSearch и много других умных слов, некоторые из которых я и не слышал до Академии.

В начале работы над проектом нас было 7, в конце по разным причинам нас осталось 5, и тут началось самое веселье. За неделю до конца обучения меня попросили написать мобильное приложение для нашего проекта, чего я ни разу в жизни не делал. Вы можете себе такое представить: мол, иди быстренько создай нам мобильное приложение за недельку. Сначала я приуныл, но, как оказалось, написать базовое приложение на React Native не составляет большого труда, если ты уже разобрался в React. В сентябре наша команда продемонстрировала свой проект всем участникам Академии во Львове. После окончания мне предложили работу в Binary Studio.

Все, что было в Академии, — это бесспорно шикарный опыт. “Но есть одна проблемка, — скажете вы. — Это ведь не коммерческий опыт.” И будете абсолютно правы (хотя условия в ней очень близкие к реальным). Оставался только один вопрос: каково это — взаимодействовать с настоящим заказчиком?

Знакомство с проектом

Когда в Binary Studio меня определили на проект, я уже два месяца совершенствовал свои навыки в мобильной разработке на внутреннем проекте компании. Первая информация о предстоящей работе для меня: заказчик из Норвегии, и он хочет мобильное приложение на React Native. Перед созвоном с заказчиком со мной пообщался наш Engagement Manager, Эдвард, рассказал, как нужно разговаривать с заказчиком, как — не стоит, обратил внимание на различные нюансы, которые вы можете прочитать в его статье. Я подготовил вопросы по технологиям, которые использовались на проекте. Первый созвон — познакомился с заказчиками, они объяснили суть проекта, я старался вникнуть, понять все детали, задавал очень много технических вопросов. Думаю, это очень важно: заказчик должен понимать, что ты заинтересован помочь ему достигнуть желаемой цели.

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

Что касается обязанностей, моя задача заключалась в написании только фронтенда, на стороне заказчика еще один разработчик писал бэкенд, который по сути уже был готов. Также заказчик хотел от меня предложений в области UI/UX — не требовал создавать полностью дизайн с нуля, но хотел, чтобы я ему подсказывал, какие решения лучше, и вносил свои предложения.

Через неделю после звонка клиент сообщил, что хочет сотрудничать со мной, и дал мне доступ к коду.

Технические детали

Посмотрев на код, я немножко растерялся. Это не то и не так, как мы писали в Академии: код был запутан. Стек технологий был, по сути, тот же, который я изучал, но написано все было немножко по-другому, что сбивало меня с толку. После дня изучения кода я понял, что тут используется boilerplate, какая-то готовая библиотека для быстрого запуска проекта со своими преднастройками и своими рекомендациями по написанию кода, особенно на redux. Весь код Redux хранился в одном файле, для меня это было странно. Но прошел второй, третий день, все внутри меня так и просило просто взять и написать приложение с нуля, потому что само приложение еще можно было переписать на этой стадии за неделю, но заказчик отказался от такой идеи. И я начал разбираться в том, что было.

Самое веселое началось, когда я попытался запустить приложение. React Native выдавал кучу ошибок — тут мне стало совсем грустно. Начались танцы с бубном и файлом gradle — это настройки для запуска на андроиде, про iOS я вообще молчу. React Native — очень динамическая библиотека, и с выходом новых версий нужно менять большие куски кода других библиотек. Пришлось обновить библиотеку для навигации внутри приложения и изменить подход к написанию стилей. До этого все было написано с привязкой к одному конкретному устройству, а как вы понимаете, размеры мобильных разные, и приложение на разных телефонах выглядело по-разному, некоторые элементы выходили за рамки телефонов. В итоге я стал использовать относительные размеры вместо пикселей. Со временем я привык к структуре кода.

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

Одной из самых интересных и непростых задач на проекте была работа приложения в режиме оффлайн. На кораблях обычно плохое интернет соединение, поэтому приложение должно также функционировать в офлайне. Я прочитал много дополнительной информации и примеров кода на эту тему. Мы остановились на сохранении глобального стора с помощью библиотеки Redux persist и использовании optimistic UI. Таким образом, если юзер как-либо взаимодействовал с приложением в режиме офлайн, все сохранялось в стор и в очередь, а потом при появлении интернета отправлялось на сервер.

Текущие успехи

Спустя три месяца мы выпустили первый релиз в Play Market. Заказчик был очень доволен проделанной работой и пригласил меня в Норвегию к ним для обсуждения планов дальнейшего сотрудничества и переключения на их основной проект — веб приложение. До этого я бывал за границей всего лишь раз — в Турции на море, а тут целый бизнес трип, да еще и в одну из самых благоустроенных стран мира. Все случилось очень быстро, все расходы на себя взял заказчик. И вот я в Осло, Норвегии, смотрю на заснеженные горы, Северное море, огромные трамплины для ski jumping и не верю своим глазам.

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

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