DOU Labs: як в Provectus розробили додаток для відстеження громадського транспорту в Одесі

У рубриці DOU Labs ми запрошуємо IT-компанії ділитися досвідом власних цікавих розробок і внутрішніх технологічних ініціатив. Питання і заявки на участь надсилайте на [email protected] .

Мене звати Кирило Малаєв, я бізнес-аналітик в компанії Provectus. Наша компанія організовує для своїх співробітників курси з управління проектами «Формула 1». Для нас це можливість поглянути на проект очима менеджера і замовника, а для стажистів, яких набирають в рамках курсу, — понюхати пороху в умовах командної роботи і всіх несподіванок, які вона може принести.

Можливість взяти участь у «Формулі 1» в ролі Product Owner'а здалася мені дуже привабливою. Як каже мій друг, в крайньому разі у мене б не вийшло, і я залишився б там, де починав. Я ризикував всього лише парою годин Borderlands в тиждень. Так я думав в самому початку. Забігаючи вперед, скажу, що на сьогодні це одна з найбільших помилок в оцінці проектів.

Отже, розповім про Android-додатку «Громадський транспорт — Одеса» , яке ми розробили під час стажування.

Ідея

Ідея нашого додатка проста як двері — відображати на карті рух трамваїв і тролейбусів на міських маршрутах.

Ми довго обговорювали інші можливі ідеї. Ця здалася найпривабливішою з двох причин: досить широкий діапазон функціональності, щоб стажистам було цікаво, і досить невеликий обсяг робіт, щоб вкластися в період стажування. Раз Uber, Facebook, Chatroulette і Dota 2 вже готові — що нам залишалося?

Для цього проекту у нас було додаткова перевага — web-інтерфейс існуючого ресурсу «Транспорт Одеси». Ми вирішили брати звідти дані по маршрутах і геолокаціі транспортних засобів. Сайт також дав нам уявлення про те, що ми хочемо зробити в додатку.

Схожі програми для інших міст України та Європи служили прикладами реалізації подібних ідей. Але найчастіше це були приклади того, як робити категорично не варто.

Як працює додаток

Наша програма відображає на карті міста місцезнаходження кожного трамвая або тролейбуса на зазначеному маршруті — це його основна функція. Додатково користувач отримує всю можливу інформацію про конкретному транспортному засобі: швидкість руху, вартість проїзду, кількість пасажиромісць, протяжність маршруту та інвентарний номер транспортного засобу. Також можна дізнатися адреси зупинок і проходять там маршрути. Ще одна функція — список улюблених маршрутів.

На всякий випадок ми приховали в додатку пересування технічного транспорту. Якщо раптом підступний завойовник вирішить проникнути в наше місто і використовувати муніципальний громадський транспорт для переміщення свого захватнического особового складу, наші партизанські загони зможуть непомітно пересуватися у вагонах технічної підтримки.

Для водіїв у додатку теж є корисна функція — інформація про парковках. Користувачі отримують дані про розташування парковки, загальну кількість місць, робочий час і типі паркування. Попереджаю ймовірний питання — додаток не показує кількість вільних місць. На жаль, поки немає можливості відслідковувати ці дані.

Дуже хотілося б додати інформацію про переміщення маршруток і автобусів, але оригінальний сервіс поки що не надає такої інформації.

Android-технології

Ми використовували Android SDK, мінімальна версія ОС 4.4 (19), Room для роботи з базою. З сторонніх ліб: ButterKnife, Retrofit 2, RxJava, Dagger 2, EventBus.

Ми вибирали технології, доступні для наших стажерів: враховувалася їхня спеціалізація та рівень підготовки. Також рішення вибиралися виходячи з того, що команда встигне зробити за час стажування.

Бувало, що при розробці виникали складності. Наприклад, коректна побудова маршрутів: вони повинні були проходити по вулицях, де є зупинки громадського транспорту, а не впоперек карти — через житлові квартали і будинки. Також були труднощі із створенням зручного UI/UX і кешування даних на клієнта.

Набір стажерів і комунікація на проекті

Після лекційної частини стажування ми перейшли до практики. План дій виглядав просто:

І тут я відчув ставлення більшості наших замовників: вони вважають свої проекти простими і зрозумілими, але від цього не менш геніальними.

Ми розділилися на групи по 3-7 чоловік, і кожна група почала працювати над своїм проектом. Разом з іншими менторами ми написали User Story, зробили декомпозицію задач, оцінили робота з поправкою на навички і знання стажистів, накидали матрицю ризиків, розклали таймлайн і діаграму Гантта. Нам здалося, що ми встигаємо почати і закінчити проект за чотири місяці розробки.

Потім прийшов час набирати стажистів. Я на співбесідах не був присутній, так як виконував у проекті роль Product Owner'а і мені стажисти не покладалися. В результаті, до нашої команди приєдналися два Android-розробника, два розробника Java (Backend) і чотири QA-інженера.

Команда проекту «Громадський транспорт — Одеса»

«Занадто багато народу для такого маленького проекту», — помітить допитливий і уважний читач! І буде правий. Але ми набирали людей з запасом, оскільки матриця ризиків передбачала вибування частини стажерів з проекту по мірі розвитку. Хто на роботу, хто на лікарняний, хто просто не занадто старанний і працьовитий. Приємно повідомити, що в нашій команді зібралися тільки відповідальні люди, а також ті, хто знайшов роботу за час стажування, але не пропав безвісти, а повідомив про це менторів.

Далі потрібно було ввести стажерів в курс справи за проектом та процесів. Я отримав дуже цінний досвід у галузі складання документації для членів команди. Відразу стало ясно, що багато чого з опису процесів не всім ясно. Також з'ясувалося, що люди не хочуть сліпо слідувати інструкціям, значення яких не розуміють. Все це начебто знають, але усвідомлення і прийняття цього факту вплинуло на мій світогляд.

Я також зрозумів, наскільки важливі комунікації в команді. Ми запланували тижневі спринти з щотижневим демо, грумингом і планингом. C самого початку встановили обов'язкові щоденні стендап созвони. З часом ми домоглися того, що на них були присутні більшість членів команди, а ті, кого не було, писали звіти. Ми також домоглися того, що мітинги тривали не більше десяти хвилин.

Порівнюючи наш підхід з підходом інших команд, можу сказати, що у нас було дуже вдале рішення. Кожен зробив коротку доповідь за формою: що зробив, чим займаєшся, чим плануєш займатися, які є проблеми. Ми відмовилися від обговорення проблем на спільних мітингах, а тільки озвучували їх і говорили, хто з ким повинен обговорити вирішення проблеми.

Двом-трьом людям простіше знайти спільну вільний проміжок часу для обговорення і вирішення проблеми, ніж синхронізувати п'ятнадцять чоловік і змусити більшу частину нудьгувати. Щоденні обміни актуальними статусами і завданнями давали всім ясне бачення стану справ на проекті. Кожен розумів, що від нього залежить і на що впливає його робота.

Скрам з тижневими спринтами організовано перевели в Канбан, коли половина стажистів зійшли з дистанції і ми перестали поміщатися в тижневі спринти. У підсумку з восьми стажистів до фінішу дійшли шестеро: Аndroid-розробник, два Java-розробника, три QA-інженера. В цілому на створення програми пішло три місяці.

Результати та плани

Проект завершився успішно. Додаток доступно для скачування на Google Play. Зараз у нас більше 10 000 тисяч скачувань та 1 500 до 2 000 користувачів в день. В команді є люди, які планують підтримувати роботу сервісу та розширювати функціональність.

Архітектура програми дозволяє підключати сервіси відстеження транспорту для інших міст. Так що якщо у вашому місті є така послуга на web, а в нативному додатку на Android вона недоступна — ми зможемо швидко і органічно додати ваше місто в наш сервіс, якщо подолаємо лінь силою волі.

Зараз ми працюємо над редизайном. Ми повністю переосмислили UI/UX програми. Робимо його максимально зручним і простим у використанні.

Також плануємо в рамках наступної стажування Formula 1 розробити додаток для платформи iOS. І попутно розширити функціонал існуючого додатки для Android.

Опубліковано: 15/03/18 @ 11:00
Розділ Різне

Рекомендуємо:

Яке це — працювати в IT, якщо вам за 50
DOU Проектор: YoutubeTutor — розширення Chrome для навчання на YouTube
Розробник з Білорусі — до переїзду в Київ за програмою для політичних біженців
Product Management дайджест #2: як застосовувати Machine Learning, чому Agile не працює у великих компаніях
Підбірка фан-відео від айтішників за 2017 рік