TIGR · Flutter-клієнт · аудит роботи Євгена Реріха · 26.10.2026

Зроблено більше, ніж залоговано, але час записано не на ті задачі

Години не завищені. Прогрес у Jira не відповідає коду, а процес розробки треба налагодити

Залоговано

85 год

Flutter-робота, 23.09–20.10.2026, 14 робочих днів

Закрито оцінок

≈135 год

оцінки задач у Jira, помножені на частку, яку видно в коді

Дозвітувати

0 год

слідів незалогованої роботи немає

Обсяг і час

Ворклоги збігаються з комітами день у день

Усі 85 комітів у гілці develop зробив Євген. Кожен день із комітами має ворклог, комітів у вихідні немає, а коміти потрапляють у вікно 09:00–19:45.

33 тис.

рядків коду застосунку

без згенерованих файлів, станом на 20.10

819

автотестів, 18 тис. рядків

тести логіки й екранів, з реальними перевірками

≈30

екранів

вхід, головна, виклик, профіль, авто, місця, контакти, історія, підписка, FAQ

2,5–7 тис.

рядків коду за день

при 4–8 залогованих годинах

Код пишеться з AI-асистентом

8 комітів підписані як спільні з Claude, і так само це видно з темпу. Код відредагований: мертвих файлів немає, стиль однаковий.

З бекендом працює по-справжньому

Вхід з оновленням сесії, профіль, авто, місця, контакти, фото, історія викликів, перевірка зони покриття, тривожний виклик, реєстрація push-токена.

4 год Flutter-роботи записано на iOS-задачу

TIGR-130 «Додавання фото до інциденту» (iOS). Насправді того дня Євген робив темну тему у Flutter-застосунку: це видно і з коментаря у ворклозі, і з коміту. Тому разом 81 + 4 = 85 год.

Відповідність задачам

Час у Jira записаний «кошиками», тож статус задач не показує реальний стан

Ліворуч — задача, години (залоговано / оцінка) і що написано у ворклогах. Праворуч — що є в коді.

TIGR-123 Дизайн-система · 7 / 73 год із них — сторінка оплати

Кольори, шрифти й тема є. Спільних станів «порожньо / помилка / завантаження» немає: блок помилки скопійовано в 9 екранах.

TIGR-124 API-клієнт і сесія · 13 / 149 год із них — головний екран і таббар

Зроблено якісно: оновлення токена, повтор запиту, відкликана сесія, захищене сховище.

TIGR-126 Splash / Bootstrap · 9 / 9зараз на Юрієві, статус Ready for QA; усі 9 год залогував Євген — на відновлення стану, зони й верстку підписки

Самої задачі в коді немає: ні перевірки /meta, ні примусового оновлення, ні стартової маршрутизації за станом сесії. Splash — тільки картинка.

TIGR-128 OTP-вхід · 7 / 10у ворклогах — «Як працює Тигр» і тривожна кнопка

OTP-вхід зроблено: зворотний відлік, повторне надсилання, автозаповнення коду, обробка ліміту запитів.

TIGR-141 Профіль · 14 / 146 год із них — правки F-07…F-16 на різних екранах

Зроблено повністю.

TIGR-142 Спільне завантаження фото · 6 / 14у ворклогах — довірені контакти, історія викликів, історія оплат

Вибір, стиснення і завантаження фото є. Індикатора прогресу завантаження немає.

TIGR-143 Автомобілі · 3 / 10автомобілі

Повний CRUD із фото та підтвердженням видалення. Залоговано помітно менше, ніж зроблено.

TIGR-145 Головний екран · 6 / 14у ворклогах — активний виклик і профіль

Зроблено, але час на нього записаний у TIGR-123 і TIGR-124.

TIGR-154 Push · 6 / 10FCM і Crashlytics

Токен реєструється. Переходу за натисканням на сповіщення немає, лічильника на іконці немає, production-налаштування Firebase — заглушка.

Скільки дозвітувати

Години додавати не треба — треба переписати 85 год на правильні задачі і зменшити залишок оцінок

У гіт-історії немає днів без ворклогів і немає роботи у вихідні. Тож різниця між залогованим часом і закритим обсягом — це прискорення від AI, а не незалогована робота.

Залоговано

Flutter, усього
85 год
На задачах To Do
0 год

Закрито оцінок

Flutter, усього
≈135 год
На задачах To Do
≈43 год

Задачі в статусі To Do, де вже є робота (закрито оцінки / вся оцінка): TIGR-144 ярлики Дім/Робота ≈8 / 12, TIGR-146 перевірка зони ≈7 / 9, TIGR-150 виклик і екран інциденту ≈7 / 14, TIGR-152 історія викликів ≈6 / 7, TIGR-149 екран підписки ≈6 / 14, TIGR-127 онбординг ≈3 / 9, TIGR-157 обробка помилок ≈3 / 7, TIGR-147 докупівля виклику ≈2 / 7, TIGR-156 дозволи ≈1 / 7.

Задачі «в роботі»10 задач, оцінка 103 год

≈88 год

Задачі To Do9 задач, оцінка 86 год

≈43 год

TIGR-126 Splash / Bootstrapзараз на Юрієві, оцінка 9 год

≈3,5 год

Ризик подвійного обліку ≈43 год

Якщо пізніше на задачі To Do, які вже частково зроблені, залогують повні оцінки, ці ≈43 год будуть оплачені вдруге. Залишок оцінок на них варто зменшити зараз.

«Закрито оцінок» — це оцінка задачі в Jira, помножена на частку критеріїв приймання, яку видно в коді. Частки оцінені вручну, похибка близько ±20%. Екрани на заглушках зараховано частково. Робота поза задачами (темна тема, довірені контакти, історія оплат, видалення акаунта, офлайн-черга) у ці цифри не входить.

Не зроблено

Оплата через магазини, карта інциденту і примусове оновлення ще попереду

  • TIGR-148 Apple IAP і Google Play Billing (20 год) — не почато. Натомість у коді веб-оплата через MonoPay, і та на заглушках: оплата відкриває тестову адресу, підтвердження завжди «успішно», історія оплат вигадана.
  • TIGR-151 карта активного інциденту з екіпажем — немає. Є тільки карта зон покриття.
  • TIGR-155 deep links, TIGR-158 примусове оновлення, TIGR-159 тестові збірки в магазинах, TIGR-160 резерв — не почато.
  • TIGR-156 спільний сценарій дозволів — є лише для геолокації.

Перехід з IAP на MonoPay варто підтвердити з PM: якщо рішення не погоджене, частину робіт із підпискою доведеться переробляти.

Якість коду

Код вище середнього, процес розробки слабкий

Оцінки за шкалою 1–10 — за результатами читання коду. Збірку і тести не запускали.

Архітектураекрани → стан → сервіси → мережа

7

Безпекасекретів у репозиторії немає

7

Тести819 тестів поведінки

7

Читабельністьбагато дублювання

6

Обробка помилокпомилки часто ковтаються

6

Процес і gitбез MR, рев'ю і CI

3

Тривожна кнопка шле збережену адресу, а не поточну геопозицію

Якщо в клієнта збережено «Дім», екіпаж поїде додому, навіть коли людина деінде. Геопозиція пристрою береться тільки тоді, коли збережених адрес немає. Так зробили під час правок за рев'ю (F-11), тож це, можливо, свідоме рішення. Для сервісу безпеки його обов'язково треба підтвердити з PM.

Процес85 комітів прямо в develop, без MR і рев'ю; гілку main не оновлювали від першого коміту; CI немає; README шаблонний

Робота через MR із рев'ю, CI з аналізом коду і тестами, номер задачі в коміті має відповідати вмісту.

Логи тестових збіроку збірках для тестувальників у лог пишуться токен доступу, номер телефону і OTP-код

Вимкнути логування заголовків і тіл запитів у будь-яких release-збірках.

Заглушки виглядають готовимипідписка, оплата, історія оплат, production-налаштування Firebase

Позначати такі екрани в задачах і в інтерфейсі тестових збірок, поки бекенду немає.

Помилки не доходять до звітів про збої44 блоки перехоплюють будь-яку помилку і лише пишуть її в консоль

Відправляти оброблені помилки в Crashlytics як некритичні.

Дублюванняоформлення тем — ≈28% коду (56 класів по 20–30 полів); блок помилки скопійовано в 9 екранах, сценарій збереження форми — у 6

Кілька спільних стилів і віджетів станів замість копій. Якраз цього вимагала TIGR-123.

  • Сильний мережевий шар: одне спільне оновлення токена для паралельних запитів, повтор запиту, відкликана сесія, 27 тестів на це.
  • Секретів у репозиторії немає; ключі передаються при збірці.
  • Усі тексти інтерфейсу винесені в локалізацію; контролери й таймери коректно звільняються.

Наступні кроки

П'ять рішень, щоб облік і продукт відповідали реальності

Що потрібно вирішити

  1. Підтвердити з PM, куди тривожна кнопка шле екіпаж: на збережену адресу чи на поточну геопозицію.
  2. Попросити Євгена переписати 85 год на ті задачі, де робота зроблена, і зменшити залишок оцінок на задачах To Do приблизно на 43 год.
  3. Розібратися з TIGR-126: вона в Ready for QA, хоча bootstrap-логіки в коді немає.
  4. Ввести MR з рев'ю і CI для tigr-flutter.
  5. Підтвердити спосіб оплати: IAP за задачами чи MonoPay за кодом.

Обмеження. Збірку і тести не запускали, якість оцінено читанням коду. Скільки реально працювала людина, з git не перевірити — видно лише, що дні збігаються. iOS-частину не аналізували: на iOS-задачах ще ≈81 год, плюс ворклоги на чужих задачах. Останній коміт у репозиторії датований 20.10.