Уважаемый Александр!
Возможно я не вполне верно представляю различия между большим и малым проектами, но мне казалось, что вполне уместно провести аналогию, например, с возведением большого и малого здания - если и для большого, и для малого потребуются одноимённые этапы (например, устройство фундамента), то можно предположить, что на устройство большого уйдёт пропорционально (а может быть даже непропорционально) больше материалов и времени, чем на аналогичную работу для малого. Поэтому мне кажется обоснованной привязка длительности шага к сроку проекта в целом, ведь несмотря на то, что работы могут быть аналогичными, их объём всё же может отличаться от проекта к проекту. В чём я ошибаюсь?
Нет. Это не совсем так.
Причина 1. Разные единицы измерения .
Есть работы, трудоемкость выполнения которых связана с размером объекта, а есть те, трудоемкость которых не связана с размером вовсе. Мне трудно продолжить аналогию с фундаментом (не знаю технологии обустройства фундаментов), поэтому приведу менее фундаментальный пример.
Предположим мы делаем ремонт квартиры. Есть работы, трудоемкость которых связана с ее площадью: например, это штукатурные работы. Есть работы, трудоемкость которых с размером квартиры не связана. Например, это сантехнические работы. А, скажем, трудоемкость электротехнических работ больше зависит от числа комнат и геометрии пространства (независимо от площади всего объекта), а также от разнообразия типов освещения в пределах одной квартиры.
Таким образом, совершенно не факт, что на обустройство бОльшей квартиры или бОльшего дома уйдет больше времени. Может, как ни странно, уйти и меньше.
Поэтому, кстати, понятно, что исчисление прайса "евроремонта" в "квадратных метрах" - это один из способов надуть смету. Подобное наблюдается не только у "прорабов", но и у частных архитекторов и дизайнеров: большую квартиру спроектировать легче, а вот умение "сделать" несколько удобных комнат на малой площади показывает уровень, за который - наоборот - можно и доплатить.
Так и у программиста: сделать большой объем - дело нехитрое: наворотили иерархию в N классов и N-факториал объектов и "освоили бюджет". (А критерий "простота сопровождения в отсутствие автора" в ТЗ и вовсе незаведен). Совсем другое дело, когда програмист напишет компактную программу, не уменьшив ее функциональности. Это говорит о квалификации, за которую можно и нужно доплатить.
Причина 2. Способ (технология) выполнения работ.
Известно, что в рамках технологической цепочки при увеличении общего объема (заказа) трудоемкость возрастет не на всех операциях. Самый известный пример - это полиграфия: чем длиннее заказ (больше тираж), тем ниже себестоимость каждого экземпляра. И это понятно: предпечатная подготовка делается 1 раз, какой бы тираж одного заказа мы бы не печатали. Подобное свойственно не только печатному процессу, но и многим другим.
Более того, если трудоемкость возрастает "пропорционально объему" - это говорит о неправильном распределении работ или вообще об отсутствии технологии и о присутствии на фирме не бизнес-процесса, а "натурального хозяйства", где каждый, как дачник окучивает свои 6 соток "от и до". Тогда, конечно, чем больше "дач", тем пропорционально больше работы. Но даже из 1000 дач нельзя создать одной приличной фермы.
Так и у программистов: когда они распределяют работу между собой "по объектам" ("по законченным подпроектам" и т.п.), а не по функциям, общая трудоемкость большого проекта, по мере его развития, возрастает даже не пропорционально, а лавинообразно (хотя работа каждого из них необязательно будет сложной).
Причина 3. Производительность не равна работе.
Производительность - это когда мы достигаем бОльших результатов меньшим количеством работы. Именно за производительность и надо платить премии.
Вы пишете: Постепенно, это приведет к тому, что у Вас начнет накапливаться "Справочник работ" (и соответствующие нормы времени). Подобный справочник уникален для каждого разработчика, либо существуют соответсвующие нормативные документы подобно ГЭСН в строительстве? Если существуют, прошу дать ссылку. Если не существуют и речь идёт о том, что каждый разработчик должен накапливать собственную статистику и сам устанавливать для себя нормативы, то могу ли я рассчитывать на Вашу помощь?
Насколько мне известно, такого общего справочника пока не существует. Но скоро должны появиться более надсистемные "общие вещи": например, общий пошаговый "алгоритм эффективной разработки программных систем". Наличие такого алгоритма настолько упростит вопрос о нормировании, что может быть он (не являясь справочником работ) сможет выполнить его функцию. (Кирилл Лебедев, при необходимости, здесь меня поправит).
Спасибо,