ITA-Водоканал · дебати по оцінці · 28.10.2026

Агенти сперечалися про ціну ITA. Суддя: реліз 1 коштує ≈ $375k

Обвинувач починав з $280k, захисник — з $426k. Після перехресної перевірки обидва зблизилися з оцінкою команди

Оцінка команди

$358k

8 744 год, зовнішні ставки, з AI

Вердикт судді

$375k

9 183 год без резерву, діапазон $361–392k

З резервом 10%

$412k

резерв — окреме комерційне рішення

Дебати

Сім сутичок за спірні години — і рішення судді після кожної

Обвинувач доводить, що оцінка завелика і AI її сильно зменшить. Захисник — що вона замала і AI такого приросту не дасть. Обидва працювали з повними вимогами (15 сторінок) і всіма рядками оцінки, а потім перевірили аргументи одне одного. Суддя не бачив їхніх висновків заздалегідь і кожен спірний пункт перевірив сам.

  • Обвинувач—
  • Оцінка команди$358k
  • Суддя—
  • Захисник—
Умови

Предмет — оцінка ITA-Водоканал: 8 744 год, $358k за зовнішніми ставками. Кожна цифра має посилатися на вимогу або рядок оцінки. Кожне прискорення від AI позначене як виміряне в пілоті або припущення.

Відкриття
Обвинувач · оцінка завеликаАтакує

Оцінка роздута, і щоб це побачити, AI не потрібен. У ній є роботи, яких у релізі 1 немає, і роботи, пораховані двічі. А те, що лишається, здебільшого однотипне — саме таку роботу агенти пишуть найшвидше.

Моя цифра — 6 813 год, ≈ $280k.

↩ Обвинувач«Моя цифра — 6 813 год, ≈ $280k»
Захисник · оцінка замалаЗаперечує

$280k — це «оцінка мінус дублікати», а не вартість релізу. Ви тільки віднімаєте. Я пройшов вимоги проти оцінки рядок за рядком: бракує майже 2 000 год роботи. Перенесення даних фактично немає, рахунку абоненту немає.

Моя цифра — 10 456 год, ≈ $426k, з резервом — $469k.

Сутичка 1 · Роботи поза релізом

Чи є в оцінці роботи, яких вимоги не просять?

ОбвинувачАтакує

Пенсійний фонд. В оцінці 80 год: тести ЕЦП-конверта, запитів статусу, списку запитів і парсер відповіді. А вимоги кажуть: «У релізі 1 процес ручний… КЕП не є частиною нового продукту». Ми тестуємо протокол, якого в продукті не буде.

Вимоги · Імпорт, розд. 3.5Оцінка · 80 год
ЗахисникВизнає

Тести ПФУ на 60 год я сам викреслив ще у вступі. Тут сперечатися нема про що.

↩ Захисник«Тести ПФУ я сам викреслив»
ОбвинувачАтакує

Тоді й вхідний обмін із соцзахистом: парсер файлу «Пільга-2» від соцзахисту, звірка, синхронізація довідника — 92 год. Вимоги знають «Пільга-2» тільки як вивантаження. Цього ви у вступі не помітили.

ЗахисникЧастково визнає

Не помітив — визнаю. Але залишок по субсидіях не чіпайте: історію перенесених субсидій вимоги показувати вимагають.

СуддяРішення

Поза релізом 1: −408 год. ПФУ −100, вхідний соцзахист −106 (14 год лишаю на історію субсидій), перерозподіл небалансу на 12 місяців назад −64, макети без вимог −44, SFTP −36, юридичний борг −32, редактор калькуляції тарифу −20, збережені фільтри −6.

Сутичка 2 · Дублікати

Чи оцінена одна й та сама робота двічі?

ОбвинувачАтакує

Перемикання робочого періоду: один рядок — POST /admin/working-period/switch, 16 год. Інший — POST /api/admin/working-period/switch з тими самими перевірками, 20 год. Завантаження файлу обміну — двічі по 16. Щомісячне нарахування — дві фонові задачі, 24 і 20. Таблиці відповідності кодів — дві різні таблиці для одного. Разом 260 год дублів.

↩ Обвинувач«з тими самими перевірками»
ЗахисникЗаперечує

Не все це дублі. Другий рядок про період додає заборону проводок поза робочим періодом — це окрема вимога. Другий рядок про обсяги юросіб додає прив'язку до будинкового вузла. Журнал файлів оплат має контрольні суми й різницю — цього прямо вимагають фінанси.

ОбвинувачЧастково визнає

Добре, на ці три лишаю по 8–12 год. А решта сім пар — ті самі серверні функції й ті самі фонові задачі. Їх ви не заперечили.

ЗахисникВизнає

Сім пар — справжні дублі. 124 год, приймаю.

СуддяРішення

Дублі: −172 год. 124 за сім справжніх пар, 28 за три часткові, де друга копія додає окрему вимогу, і 20 за дубльовані тести.

Сутичка 3 · Списки і спільні механізми

Роздуті списки чи недооцінені лічильники?

ОбвинувачАтакує

Найменша сторінка вимог — 15 вимог до списків. В оцінці під неї 876 год. Дизайн компонента — 164 год, а фронтенд, який його будує, — 88. Тести — 260 год: окремий ручний кейс на кожну групу операторів фільтра. Серверний рушій фільтрів оцінено двічі: 32 і 24 год.

Вимоги · 15 вимогОцінка · 876 год
↩ Обвинувач«Найменша сторінка вимог — 876 год»
ЗахисникЗаперечує

А тепер подивіться на лічильники: найбільша сторінка вимог, 187 КБ, — 212 год бекенду. Списки на 45 КБ — 312. Перекіс не в тому, що списки роздуті, а в тому, що лічильники недооцінені.

↩ Захисник«найбільша сторінка вимог, 187 КБ»
ОбвинувачЗаперечує

Розмір сторінки — не обсяг роботи. Частина логіки показів і будинкового розподілу сидить у рядках нарахувань і вузлів. Ваш пошук за ключовими словами її просто не знайшов — ви самі пишете, що розбивка «приблизна на ±1–2 рядки».

ЗахисникЧастково визнає

Подвійний рушій визнаю. Але 140 год дизайну на патерн, яким користуються близько 20 списків, — це не нуль. І права та друк на конкретних списках одним параметризованим набором тестів не перевіриш.

ОбвинувачАтакує

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

СуддяРішення

Спільні механізми: −270 год. Дизайн списків −92 (56 год на специфікацію патерну лишаю), подвійний рушій фільтрів −52, тести списків −52, параметри обліку −28, журнал −24, екрани довідників −22. Недооцінку лічильників частково визнаю — розглядаю її серед прогалин.

Сутичка 4 · Перенесення даних

Чи оцінено перенесення даних зі старої програми?

ЗахисникАтакує

Головна діра оцінки. Єдиний рядок розробки — «Міграція legacy-довідників „як є“», 32 год, і там тільки довідники. Рядок DevOps прямо каже: мапінг даних робить бекенд. А бекенду немає. Абоненти з історією, лічильники, покази, проводки, сальдо — нуль годин.

При цьому в QA є «Тестування міграції абонентів з legacy Access-бази». Тестуємо те, чого ніхто не будує.

Product Vision · принцип 5Оцінка · 32 год
↩ Захисник«Тестуємо те, чого ніхто не будує»
ОбвинувачЗаперечує

Тестів міграції в оцінці вже 68 год, не 24. А ви просите ще +100 год QA зверху.

↩ Обвинувач«Тестів міграції в оцінці вже 68 год»
ЗахисникАтакує

Тестів — 68. Розробки — 32, і та на довідники. Що саме ці 68 годин тестуватимуть?

ОбвинувачЧастково визнає

Розробки операційних даних справді немає — це ваша найсильніша знахідка. Але +556 завищено: беру 300 год бекенду і 40 тестів.

↩ Обвинувач«беру 300 год бекенду»
ЗахисникЗаперечує

300 — якщо дані ІТА чисті. А вимоги 13 разів кажуть «якщо такі дані є». Цих даних ще ніхто не бачив.

СуддяРішення

Перенесення даних: +396 год. 340 бекенду на близько 10 груп сутностей по 30–40 год і 56 тестів — тільки на те, чого наявні 68 год не покривають. Це найменш визначений пункт усього вердикту.

Сутичка 5 · Чого бракує в ядрі

Рахунок абоненту, банки, покази, нарахування

ЗахисникАтакує

Рахунок абоненту стоїть першим у закритому переліку звітів. Його щомісяця отримує кожен абонент: реквізити, QR, послуги, небаланс, перерахунки, пільги, борг. В оцінці на нього — «Дизайн шаблону квитанції», 4 год. «небаланс.docx» згадано у вимогах 11 разів, а в розробці — нуль.

Вимоги · закритий перелік звітівОцінка · 4 год
ОбвинувачЗаперечує

Реєстр звітів в оцінці сам генерує форми запуску з метаданих. Ваші 80 год фронтенду на запуск близько 19 форм — зайві.

↩ Обвинувач«Реєстр звітів сам генерує форми запуску»
ЗахисникАтакує

Форму запуску — так. А сам рахунок із QR на кожного абонента реєстр теж згенерує? Бекенду на нього нуль.

ОбвинувачВизнає

Ні, не згенерує. Рахунок, небаланс, архівна довідка, пільгові звіти — беру 112 год бекенду, 24 фронтенду і 24 тестів.

ЗахисникАтакує

Далі коротко:

  • файл боргів для чотирьох банків, два формати — екран є, генератора немає;
  • покази, що приходять з оплатою: найбільший показ дня, поріг 30 м³, другий лічильник текстом — ні фронтенду, ні бекенду;
  • касовий ордер — екран без сервера;
  • чернетки нарахувань і блокування даних на час розрахунку — немає.
↩ Захисник«ні фронтенду, ні бекенду»
ОбвинувачЧастково визнає

Банк і касовий ордер — правда. А покази: парсер Приватбанку вже читає лічильник і показники, бракує лише передачі в лічильники і черги. Чернетки: статус «чернетка» вже є, а журнал непроведених — ще один список на спільному рушії. Бракує тільки блокування й екрана запуску.

СуддяРішення

Прогалини ядра: +608 год. Друковані форми з рахунком абоненту +168, типи показів і середній розрахунок +96, чернетки й блокування +88, покази з оплат +68, банківський файл +52, профілі чотирьох банків +32, тариф з межею +32, касовий ордер +24, екрани обсягів юросіб +24, стартовий перелік прав +24.

Сутичка 6 · AI

Чи можна зняти з оцінки ще й за рахунок AI?

ОбвинувачАтакує

Тепер головне. Близько 130 серверних рядків — це «сутність + історія + CRUD + endpoint». Близько 20 списків на одному рушії. 18 друкованих форм із закритого переліку. Вимоги — 106 тис. слів із нумерованими пунктами: вимога до «Пільга-2» перелічує всі 17 полів файлу. Для агента це готовий контракт.

Обвинувач

Я не прошу ×2,5. Беру ×1,2–1,25 тільки на 4 598 год однотипної роботи, це ×1,13 на всю розробку. Фінанси, міграцію, права і запуск не чіпаю. І чесно позначаю: це припущення.

↩ Обвинувач«Беру ×1,2–1,25 тільки на однотипній роботі»
ЗахисникЗаперечує

Команда каже: 8 744 год уже враховують AI. Без AI компанія сама рахує 12 000–13 500 год. 12 000 / 8 744 = 1,37×. Пілот виміряв 1,25×. Ви пропонуєте порахувати той самий ефект удруге.

↩ Захисник«12 000 / 8 744 = 1,37×»
ОбвинувачЗаперечує

12 000–13 500 — цифра з резервом. Без резерву 10–20% закладено ≈ 1,14–1,40×. І в рядках цього не видно: дизайн картки рахунку — 32 год, а фронтенд — 24. Хіба це схоже на оцінку з AI?

↩ Обвинувач«дизайн картки — 32 год, фронтенд — 24»
ЗахисникАтакує

Це схоже на заниження фронтенду: в ньому немає екрана нарахування, списку непроведених, черги показів. А тепер подивіться у свій «однотипний» кошик тестів, де стоїть ×1,25: тести проводок, ручного рознесення оплат, «Пільга-2» з точністю до байта, міграції, фінансової регресії. Ви ж обіцяли їх не чіпати.

Обвинувач

Пілот — два місяці й одна команда. Це рання точка кривої навчання, а не стеля.

↩ Обвинувач«рання точка кривої навчання»
ЗахисникЗаперечує

Тоді це аргумент проти будь-якого множника, а не за ваш. А 1,76× — це людина на двох проєктах, а не дешевший проєкт. Кілька агентів в одній кодовій базі зіткнуться на рахунку, наданні послуги, проводці. Рядка на code review в оцінці немає — тільки 12 год архітектурних рев'ю.

СуддяРішення

Додатковий AI-шар відхилено. Без резерву компанія рахує 10 900–12 270 год, а це 1,25–1,40× від 8 744. Виміряні 1,25× вже в оцінці. Більший множник на однотипній роботі — припущення без виміру, а кошик обвинувача містить саме фінансові тести.

Сутичка 7 · Запуск і резерв

Хто виправлятиме дефекти і скільки закладати зверху?

ЗахисникАтакує

Годин розробників на виправлення дефектів після запуску — нуль. QA планує UAT і hypercare, а виправляти хто буде? Вимоги називають перші 3–4 місяці критерієм успіху. Прошу +264 год і резерв 10%.

ОбвинувачЧастково визнає

264 — це 8% усього бекенду й фронтенду, забагато. Беру 120. А резерв — не обсяг роботи, а комерційне рішення. Якщо додавати, то однаково до обох цифр.

↩ Обвинувач«резерв — комерційне рішення»
ЗахисникАтакує

А ваш PM, який зменшується разом з обсягом? Рядки PM календарні: «Супровід щотижневої взаємодії» — 80 год, «Регулярне оновлення статусів» — 64. Менший обсяг календар не скорочує — ви це самі записали у свої ризики.

СуддяРішення

Запуск: +244 год. Стабілізація розробниками +180 (UAT близько 2 тижнів і hypercare близько 4: половина бекенду, чверть фронтенду), звірка нарахувань за місяць зі старою програмою +40, навчання ключових користувачів +24. Резерв — окремим рядком: 10% = $37,5k. PM рахую тією ж часткою 10,4% від чистої зміни обсягу: +41 год.

Нові позиції

Після перехресної перевірки

ОбвинувачЧастково визнає

Визнаю 1 048 год ваших прогалин і не множу їх на AI. Без AI-шару в мене 8 835 год, $361k — це рівень оцінки. З AI-шаром — ≈ $324k.

↩ Обвинувач«Без AI-шару в мене $361k»
ЗахисникЧастково визнає

Тобто вся різниця між нами — ваше припущення про AI. Я приймаю 748 год ваших скорочень. Моя цифра — 9 920 год, ≈ $404k, з резервом $444k.

↩ Захисник«Моя цифра — $404k»
ОбвинувачАтакує

А ваша «незалежна перевірка» — 12 000–13 500, поділені на 1,25, — вже містить резерв. І все одно ви пропонуєте 10 456 без резерву зверху.

Вердикт

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

Суддя · вердикт

8 744 год оцінка − 850 зайве + 1 248 бракує + 41 PM = 9 183 год

Вердикт, без резерву

$375kдіапазон $361–392k

З резервом 10%

$412kрезерв — окреме комерційне рішення

Оцінка за сумою майже правильна, але неправильно розподілена: 850 год у ній зайві, а 1 248 год потрібної роботи немає.

Суддя

Поруч із цифрами компанії:

  • без AI $465–525k — порівнювати з вердиктом із резервом, $412k;
  • оцінка команди з AI $358k — вердикт на $17k вищий;
  • найкращий сценарій ≈ $320k — файли його не підтверджують: він тримається лише на прискоренні, якого пілот не показав.
Суддя

Бюджет $100k недосяжний. Розрив — $275k, для нього потрібне прискорення 3,75× у всіх ролях. Дизайн, архітектура, DevOps, тести й PM у вердикті самі коштують ≈ $162k. Вкластися можна, лише скоротивши реліз 1 приблизно на три чверті.

Суддя · хто переконав

Обвинувач виграв сутички про скоуп і дублі: точні посилання, і 850 із його 966 год скорочень я прийняв. Захисник виграв про перенесення даних, рахунок абоненту і подвійний рахунок AI, але завищив розміри прогалин у півтора раза: просив 1 976 год, я прийняв 1 248.

Суддя · обмеження
  • Години на відсутні роботи оцінено за аналогією з подібними рядками оцінки. Найбільша невизначеність — перенесення даних: даних старої програми ще ніхто не бачив.
  • Тривалість супроводу після запуску (≈ 4 тижні) — припущення.
  • Детально перевірено спірні й найбільші пункти, а не всі 562 рядки.
  • Пілот AI — одна команда і два місяці вимірювань.

Підсумок

Після перевірки сторони зійшлися біля оцінки команди, вердикт — на $17k вище

Обвинувач, стартз AI-припущенням

$280k

Обвинувач, після перевіркибез AI-припущення $361k

$324k

Оцінка команди8 744 год, з AI

$358k

Вердикт судді9 183 год, без резерву

$375k

Захисник, після перевіркибез резерву

$404k

Захисник, стартбез резерву

$426k

Бюджет клієнта $100k недосяжний

Розрив до вердикту — $275k. Без лічильників, нарахувань і оплат з банків Водоканал не зможе відмовитися від старої програми, тому вкластися можна лише скоротивши реліз 1 приблизно на три чверті.

Усі цифри — за зовнішніми ставками, без резерву, якщо не сказано інше. Шкала від нуля до $426k.