Коротко: сделать дёшево, быстро и качественно одновременно нельзя — это «треугольник проекта»; цена складывается из опыта, проектирования и требований к надёжности.
Нет — сделать одновременно дёшево, качественно и быстро невозможно. Это классический «треугольник проекта»: выбрать можно любые два угла из трёх, но не все три сразу. Разберём, из чего реально складывается стоимость IT-проекта и почему вариант «за месяц и пачку дошираков» — это миф.
Качественно сделать даже дорого и медленно удаётся не всегда, поэтому «быстро и за копейки» я считаю заведомо нереалистичным. Но тема вечная — думаю, будет полезна и новичкам в разработке, и тем, кто собирается нанимать программистов под проект.
Из чего складывается стоимость проекта?
Если коротко, на цену влияют:
- опыт программистов;
- опыт архитектора;
- надёжность;
- отказоустойчивость;
- расширяемость;
- функциональность;
- поддерживаемость;
- экономия на спичках;
- сроки;
- общая сложность;
- наличие аналитики / экспертизы;
- сложности характера заказчика.
Разберём ключевые подробнее.
Опыт программистов
Здесь всё довольно линейно. Чем выше профессионализм — тем быстрее идёт разработка, качественнее результат и выше цена. В обратную сторону тоже верно: чем ниже опыт, тем дольше тянется проект и ниже итоговое качество, а цена ВОЗМОЖНО будет ниже. Именно «возможно»: тут всегда есть зависимость от сроков. Малоопытные разработчики порой делают одну и ту же фичу так долго, что по деньгам выравниваются с опытными — и в цене не выиграли, и по времени проиграли.
Опыт архитектора
Один из важнейших этапов — составить план и архитектуру ещё до первой строчки кода. Если сделать этот этап некачественно или вовсе выбросить из списка работ — риски превратить продукт в «долгострой» улетают в небеса.
Надёжность, отказоустойчивость, расширяемость, функциональность, поддерживаемость
Эти пять факторов напрямую зависят от программистов и архитектора. Если в начале всё сделано корректно и система спроектирована с учётом нюансов — всё будет хорошо. Если что-то не учли — какие-то факторы проявят себя и принесут проблемы разной сложности, решаемости и стоимости.
Экономия на спичках
Часто заказчик пытается сэкономить на мелочах, наивно полагая, что «чуть-чуть в десяти местах» даст ощутимую экономию. По итогу обычно наоборот: без денег качества не получить, начинается экономия на качестве, которая по цепочке цепляет одно за другим — и приводит к плачевному результату.
Сроки и миф о бесконечном ускорении
Кажется, тут всё очевидно, но есть неочевидный нюанс. Разработку можно ускорять только до определённого предела, а дальше в лучшем случае не будет изменений, в худшем — деградация процессов. На примере: над проектом работают 2 разработчика. Добавляем ещё 2 — скорость выросла вдвое. Добавляем ещё 4 — но прироста ×2 уже нет, получаем лишь ×1.3. Теперь на проекте 8 человек. Доводим команду до 16 — и вместо прироста получаем резкую деградацию до уровня 4 разработчиков. Причина в том, что мы перешли предел полезных людей на проекте и упёрлись в процессные издержки (классический закон Брукса). Поэтому сроки нужно ставить реальные, а не фантастические.
Сложность и наличие аналитики
Если продукт очень сложный, а технического задания нет, оно расплывчатое или заказчик ставит задачи в духе «сделай то, не знаю что» — стоимость растёт кратно. Особенно при отсутствии экспертизы у заказчика. Заказчик должен знать ВСЕ детали бизнес-процессов, чтобы суметь объяснить их программистам. Иначе разработчики будут догадываться и тыкаться вслепую, а это увеличивает и сроки, и стоимость.
Характер заказчика
Этот фактор тоже часто важен. Согласитесь, мало кому приятно работать с человеком, который постоянно на вас орёт. Но если орущий заказчик готов платить ×3 от рыночной цены — то почему бы и нет: за тройную цену ор можно и потерпеть :) Так что здесь всё зависит исключительно от заказчика: чем он вменяемее, тем дешевле обходится проект.
Итого: цена проекта — это не «жадность разработчиков», а сумма опыта, проектирования, требований к надёжности и адекватности постановки. Если хотите трезво оценить бюджет и сроки своего проекта — помогу разобраться на консультации.