Ловец идей, почти хакатон
Или как быстро прокачать команду в Dart/Flutter
Итак, дано: команда разработки — чуть больше 50 человек. В основном занимаемся web-разработкой со всякими интеграциями, личными кабинетами и e-commerce. Однако в последнее время около 20% — это мобильная разработка. Есть еще отдельная опытная-компактная команда, пишущая на Dart/Flutter.
Задача: подготовить как можно больше программистов из основной команды к задачам мобильной разработки.
Основной мобильный стек, который мы использовали раньше — React.Native и Flutter. Нам важна портабельность, это покупают. Обе платформы показали себя достойно для разработки бизнес-приложений. Есть известные ограничения и нарекания разработчиков, но это тема отдельной статьи («Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует» Bjarne Stroustrup).
Например, приложения на Flutter получаются более сексуальными и шустрыми (чем React. Native), но как дело доходит до виджетов, приходится писать на нативе. Реактовиков у нас исторически больше (пересесть с вебовского React в React.Native довольно просто), а вот Dart/Flutter-разработчик — зверь редкий.
У нас уже был опыт разработки проектов в рамках хакатонов (бесплатные старички HelpDesk, Хуижин, PlanningPoker и еще пара подвигов). Но практика показала, что в рамках хакатона брать незнакомую технологию — дело гиблое. Половину времени будут IDE настраивать.
Мы решили сделать внутренний конкурс с деньгами и призами за первые три места. Судить должна была та самая опытная-компактная команда, которая на Flutter уже «собаку съела». Осталось выбрать не очень сложный проект. Желательно, чтобы в нем был еще какой-то практический смысл. Скажем сразу, не все прошло гладко, сказалась неопытность в таких делах.
Мы решили реинкарнировать Squarespace.Note, которое в один момент перестал поддерживать его разработчик. Это «ловец идей», который ты открываешь, пишешь себе заметку и отправляешь в свой тудушник или на электропочту. Да, идея отправлять сообщения самому себе выглядит на первый взгляд довольно странной, но это до знакомства с принципами GTD.
Объявили внутренний конкурс. Назвали проект SingularityNote. Дали разработчикам дизайн, бэклог, стэк технологий (Dart+Flutter или React. Native) и все конкурсные дела: правила, жюри и призовой фонд.
Задача: подготовить как можно больше программистов из основной команды к задачам мобильной разработки.
Основной мобильный стек, который мы использовали раньше — React.Native и Flutter. Нам важна портабельность, это покупают. Обе платформы показали себя достойно для разработки бизнес-приложений. Есть известные ограничения и нарекания разработчиков, но это тема отдельной статьи («Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует» Bjarne Stroustrup).
Например, приложения на Flutter получаются более сексуальными и шустрыми (чем React. Native), но как дело доходит до виджетов, приходится писать на нативе. Реактовиков у нас исторически больше (пересесть с вебовского React в React.Native довольно просто), а вот Dart/Flutter-разработчик — зверь редкий.
У нас уже был опыт разработки проектов в рамках хакатонов (бесплатные старички HelpDesk, Хуижин, PlanningPoker и еще пара подвигов). Но практика показала, что в рамках хакатона брать незнакомую технологию — дело гиблое. Половину времени будут IDE настраивать.
Мы решили сделать внутренний конкурс с деньгами и призами за первые три места. Судить должна была та самая опытная-компактная команда, которая на Flutter уже «собаку съела». Осталось выбрать не очень сложный проект. Желательно, чтобы в нем был еще какой-то практический смысл. Скажем сразу, не все прошло гладко, сказалась неопытность в таких делах.
Мы решили реинкарнировать Squarespace.Note, которое в один момент перестал поддерживать его разработчик. Это «ловец идей», который ты открываешь, пишешь себе заметку и отправляешь в свой тудушник или на электропочту. Да, идея отправлять сообщения самому себе выглядит на первый взгляд довольно странной, но это до знакомства с принципами GTD.
Объявили внутренний конкурс. Назвали проект SingularityNote. Дали разработчикам дизайн, бэклог, стэк технологий (Dart+Flutter или React. Native) и все конкурсные дела: правила, жюри и призовой фонд.
Единственный оставшийся экземпляр Squarespace.Note мы случайно обнаружили на старом iPod на док-станции, где тестировщики заряжают свой зоопарк мобилок.
Что пишем
Задача простая: за 3 новогодние недели (конкурс проходил в самом начале 2020 года) сделать минималистичный редактор заметок с возможностью отправить заметку в SingularityApp, на почту или Evernote.
Фичи конкурсного приложения:
1. заметку можно отправить в свой SingularityApp, Evernote или на почту (+ настройка их привязки, + стейты иконок в зависимости от настроек отправки),
2. к заметке можно прикрепить изображение из галереи устройства или снимок камеры,
3. функций — минимум. Все манипуляции с заметками — одним свайпом:
4. язык интерфейса — ру/en в зависимости от локации пользователя,
5. для каждой отправленной заметки в списке видно: начало текста, дата создания, куда она отправлена,
6. если заметку не удалось отправить (например, интернета нет), она становится серой, а при тапе на нее — повторная отправка,
7. рекламный баннер на наш смежный проект.
Фичи конкурсного приложения:
1. заметку можно отправить в свой SingularityApp, Evernote или на почту (+ настройка их привязки, + стейты иконок в зависимости от настроек отправки),
2. к заметке можно прикрепить изображение из галереи устройства или снимок камеры,
3. функций — минимум. Все манипуляции с заметками — одним свайпом:
- Отправить готовую заметку? Свайп вверх.
- Удалить? Свайп вниз.
- Посмотреть все отправленные заметки? Свайп вправо.
- Изменить настройки? Свайп влево.
- И смена темы при встряхивании телефоном.
4. язык интерфейса — ру/en в зависимости от локации пользователя,
5. для каждой отправленной заметки в списке видно: начало текста, дата создания, куда она отправлена,
6. если заметку не удалось отправить (например, интернета нет), она становится серой, а при тапе на нее — повторная отправка,
7. рекламный баннер на наш смежный проект.
Стек технологий и критерии оценки
Проект по условиям мог быть выполнен на:
- React. Native (React + Redux (предпочтительно) / Mobx (норм паровоз).
- Dart + Flutter (должен использоваться паттерн BLoc).
Эстетическую сторону оценивал арт-директор. Юзабельность и плавность интерфейсов — тестировщик. Качество кода — опытные в мобильной разработке программисты.
Чтобы приложение могло участвовать в конкурсе, оно должно:
- содержать обязательные фичи (без них проект не рассматривается, дисквалификация);
- быть полностью функциональным и покрывать всю рабочую цепочку (кроме пунктов, отмеченных в постановках как «желательные»);
- быть разработано на одном из перечисленных стеков технологий;
- разрабатываться исключительно в нерабочее время;
- и никаких коопераций с жюри.
Как это было
Решились участвовать четыре команды разработчиков. Старт 4 января. По пути одна команда слилась. Остальные 27 января отдали работы жюри на оценку. Оценивали по двум параметрам:
- Культурный код. В коде не должно было быть «дичи», и его можно легко поддерживать (от 1 до 10 баллов),
- Юзабилити. Качество реализации. Стабильность приложения (от 1 до 10 баллов).
Судейство — открытое. Побеждает приложение, набравшее наибольшее количество баллов.
Что потом
А потом мы доработали то, что нужно было доработать, и отправили приложение в официальные сторы Google Play и App Store. Нарисовали и сверстали лэндос. Все посмотреть можно здесь.
Боевую версию для сторов допиливал тоже я, уже в рабочее время. Моя конкурсная версия приложения работала только на Android, потому что дома не было ничего на iOS. Теперь нужна была и версия для iOS — сделал ее, еще дополнительный бэкенд для отправки писем и создания заметок в Evernote (такая опция была доступна только для PRO-аккаунта Evernote), сканер QR-кодов и еще мелкие доработки.
Денис
1 место
Что получилось:
- У меня теперь есть аналог того приложения, которым я пользовался несколько лет.
- Сразу после разработки мы смогли подключить программистов уже к боевым, клиентским проектам.
- К сожалению, знания без практики быстро выветриваются. Не всем из участников достался в дальнейшем боевой, коммерческий проект.
- Потребовалось много времени на полировку и доводку даже того решения, которое взяло первое место. Проект отложили в долгий ящик, поскольку с этими коронавирусами работы стало так много, что было совсем не до него.
- Хакатоны — это фановая штука. А вот конкурс — требует много сил и дисциплины.
Владимир
CEO & Founder «Сибирикс»
Пробуйте!