Опасная иллюзия

Я часто рассказываю в своей интерпретации историю, которую прочитал в одной из классических книг по программированию, не могу вспомнить в какой.
Основная идея истории заключается в том, что у любого программного обеспечения есть 3 стадии: любительская, когда что-то
работает у программиста на компьютере, профессиональная, когда программное обеспечение
можно установить и люди его будут использовать в повседневной работе, и коробочная, которую
можно устанавливать на многих компьютерах, многих людей. Трудозатраты этих 3-х версий находятся в примерном
отношении 1:10:100, где коэффициент 10 очень сильно зависит от типа проекта. Очень вероятно встретить проект в котором
данное соотношение будет 110000, но не существует проектов где бы это соотношение было 1:3:9 или еще лучше.
В мире руби он рейлс программирования, в данной терминологии, любительская версия - это прототип, который почти работает, профессиональная версия - это живой продакшн, коробочная версия - это гем. На примере первых двух версий я хочу вам рассказать о самой страшной, по моему мнению, иллюзии, которая, я уверен, погубила очень много проектов. Это иллюзия приводит к главному бичу программистов - чудовищному срыву сроков.
Посмотрите, что происходит в реальной жизни. Отрезок AС соответствует полному времени, необходимому для создания живого продакшена (исправление всех дефектов, доработок, сглаживание шероховатостей и т.д.). Отрезок AB - это время создания прототипа (любительской версии). Соотношение длин отрезков как раз соответствует отношению 1:10, которое мы обсуждали в начале рассказа. Точка L - это состояние проекта, когда у программиста на компьютере "что-то работает". Данная версия деплоится на бету, клиент нажимает несколько кнопок, и у него создается впечатление что проект "почти работает", то есть находится как минимум в точке K. Самое страшное, что часто сам программист думает так же. В данном, простом случае, получается ошибка оценки на порядок (кажется что проект выполнен по крайней мере на 70%, а на самом деле готовность проекта не больше 7%).
Типовой проект обычно проходит по следующей схеме. Программист, наслаждаясь собой и жизнью, быстро проходит отрезок AL и даже AB, клиент радостно потирает руки. Оставшийся отрезок BC (90% времени!) проходят в стрессе, конфликтах и постоянных срывов сроков и обещаний. У вас возникает вопрос: "Как же избежать такой схемы и не ошибаться в своих оценках?" С удовольствием отвечаю: "Я не знаю."
Данная проблема очень волнует меня, но cеребрянной пули, которая помогла бы адекватно оценивать отрезки AB и AC не существует. Тем не менее существует набор методов, которые помогают ошибаться с оценкой не в двадцать раз, а всего лишь в пять :-)
Контроль времени: на все возможные "тёмные" активности уходит неприлично много времени, гораздо больше, чем кажется. Написать письмо на три абзаца - 1 час рабочего времени, пост в блог - 3 часа рабочего времени, встреча с клиентом - 5 часов рабочего времени, разочарование в профессии - бесценно. Когда работаешь на энтузиазме над прототипом, то тёмных активностей гораздо меньше.
Договориться с клиентом об Agile: то есть брать оплату за фактическое время. На самом деле это полумера, так как клиент все равно будет требовать каких то оценок и обязательств. И ему будет сложно объяснить, что 20 часов, потраченных на рефакторинг, и 30 часов на твиттер - это для пользы дела.
Максимальное упрощение и стандартизация кодовой базы: "Будь проще и люди потянутся к тебе" - всегда говорит мой дядя. Усложненный, запутанный код сильно увеличивает вероятность заниженной оценки.
Автоматизация всего, чего возможно: если, для того чтобы выкатить проект необходимо зайти на сервер, git pull, выполнить пару рейк задач, перезапустить демона и обновить базу, то в какой-то момент вы обязательно забудете какой-нибудь шаг. Чтобы из дома открыть ноутбук, разобраться с паролями, с ошибкой, написать письмо, туда-сюда уходит 2 часа. Не забывайте, что в неделю у нас максимум 20-40 часов и так легко бесполезно потратить из них 10%.
Оптимизм: просто верить, что все будет хорошо.
Надеюсь данные методики, особенно последняя, помогут вам выполнять все проекты в срок и даже немножко раньше :-)
Tweet