Нельзя экономить на программистах

34

2013-11-11

Каждому программисту хотя бы раз в жизни приходилось сталкиваться с заданием вроде «нужно сделать это быстро, а не качественно». А потом сделаем рефакторинг. На самом деле в 146% случаев рефакторинга не происходит, потому что на программиста валятся другие задачи, которые нужно сделать снова быстро и некачественно.

Давайте соберём в одном месте те вещи в разработке ПО, на которых нельзя экономить.

8. Аутсорс

Нельзя экономить на программистахКраткосрочные выгоды: более низкая оплата труда, потенциально более короткий период разработки (поскольку за те же деньги можно нанять больше разработчиков).

Долгосрочные затраты: возрастающие затраты на обучение по причине более низкой квалификации разработчиков; высокие затраты на управление командой; задержки в процессе коммуникации.

«Один опытный штатный разработчик с оплатой 100$/час принесёт в итоге больше выгоды, чем пять и более удалённых джуниоров с оплатой 20$/час».

«Штатным разработчикам приходится уделять большую часть своего рабочего времени на обучение аутсорс-работников».

«Многие аутсорсеры дают совершенно нереалистичные сроки выполнения работ только ради того, чтобы выиграть контракт».

7. Отсутствие обучения

Краткосрочные выгоды: разработчики больше времени посвящают текущим прибыльным проектам.

Долгосрочные затраты: происходит стагнация знаний разработчика, он перестаёт узнавать о новых инструментах и техниках, которые помогут ему решить текущие или будущие проблемы; это в итоге приходит к отсутствию внутренней удовлетворённости и последующему уходу из компании.

«Изучение новых технологий очень полезно, даже если, возможно, вы эти технологии никогда не примените на практике: новый свежий взгляд всегда можно применить и к старой технологии».

«Новые технологии возникают для удовлетворения новых возникающих потребностей, поэтому их изучение облегчает понимание определённых проблем».

6. Расширение обязанностей разработчика

Нельзя экономить на программистахКраткосрочные выгоды: не нужно платить тестировщикам, техническим писателям и сотрудникам клиентской службы, потому что все их задачи выполняют разработчики.

Долгосрочные затраты: рост зарплаты разработчиков в связи с повышенной рабочей нагрузкой; появление большего количества багов в коде; повышенные затраты на обслуживание; снижение качества документации и клиентского сервиса.

«Если вы платите программисту за выполнение работы тестировщика/технического писателя, вы бросаете деньги в никуда».

«У разработчиков свой тип мышления: «Как сделать так, чтобы заработало?», у тестировщиков свой: «Как можно сломать это?». Разные типы, разные задачи, объединять их нельзя».

«Разработчики —самые плохие тестировщики на свете».

5. Отсутствие проект-менеджмента.

Краткосрочные выгоды: отсутствие затрат на проект-менеджмент.

Долгосрочные затраты: отсутствие контроля над командой разработки; никто не мотивирует команду и не помогает ей справиться с подводными камнями; конечный продукт чаще всего не соответствует требованиям, срокам или бюджету заказчика.

«Вот вроде бы есть в команде человек, который должен управлять работой команды, но на него сваливается столько левых задач, что ему просто некогда этим заниматься. В итоге проект остаётся без контроля над его исполнением».

4. Изобретение велосипеда

Нельзя экономить на программистах

Краткосрочные выгоды: отсутствие затрат на исследовательскую деятельность, покупку или реализацию существующих

Долгосрочные затраты: оплата повторного изобретения колеса; долгие сроки реализации; расползание границ проекта; возрастающие затраты на разработку.решений.

«Самый популярный пример: многие компании пытаются разработать собственную CMS. Начинается всё с малого, а потом раздувается до неприличных размеров и обрастает неконтролируемыми функциями».

«Гораздо проще использовать и оплатить уже готовое решение, чем заставлять команду тратить время на изобретение собственного квадратного колеса».

«Один вечер в библиотеке экономит неделю в лаборатории».

3. Технический долг

Краткосрочные выгоды: ориентация на скорость, а не на качество экономит деньги и время в процессе реализации продукта.

Долгосрочные затраты: рефакторинг решений, сделанных на левой коленке; возросшие расходы на обслуживание; затруднения в добавлении будущих функций.

«Технический долг всё растёт на благодатной почве, состоящей из сотен и тысяч костылей… Рост этого долга невозможно контролировать, он расползается быстрее, чем вы думаете».

«Когда-то я работал в месте, где людей увольняли за рефакторинг кода, поскольку считалось, что пока вы делаете рефакторинг, вы не приносите прибыль компании».

«А сколько раз мне в руки попадался код с комментариями а-ля «костыль, заменить после демо-релиза», сделанными пять лет назад…».

2. Экономия на оборудовании

Нельзя экономить на программистахКраткосрочные выгоды: отсутствие затрат на новые мощности или замену старых машин.

Долгосрочные затраты: снижение продуктивности и удовлетворённости разработчиков по причине медленной компиляции, системных проблем, маленьких устаревших мониторов и т.д.

«В своей первой компании я работал на стареньком Pentium II. Компиляция занимала вечность, от IDE вообще было не дождаться ответа».

«Второй монитор действительно экономит множество часов работы».

«Лучший способ дать администрации понять, что железо безнадёжно устарело —во время компиляции начать стричь ногти со скучающим выражением лица или, например, читать газету».

1. Низкая заработная плата

Краткосрочные выгоды: отсутствие затрат на рекрутинг опытных специалистов или на поощрительные выплаты текущим разработчикам.

Долгосрочные затраты: низкое качество работы; пониженная мотивация сотрудников; потеря хороших программистов.

«Если навыки не оплачиваются — навыки уйдут в другое место». 

Закончить мысль можно старой историй о Томе Найте и машине Лиспа.

Послушник пытается перезагрузить лисп-машину, выключая и включая ее. Машина не загружается. В этот время мимо студента проходит Том Найт.
— Что ты делаешь?! — восклицает Найт.
— Вот, не включается… — с грустью отвечает послушник.
— Ты не починишь машину, просто выключая и включая ее, — строго замечает Найт, — если не понимаешь, как она работает.
Найт протягивает руку, выключает машину, а затем включает ее. О, чудо! Машина заработала.

Вывод: без просветления не обойтись.

У хороших разработчиков, помимо навыков, есть немного магии. Но это не значит, что они волшебники. Простые мирские радости вроде комфорта, уважения, чёткого разграничения обязанностей и адекватной оплаты труда совершают чудеса и окупаются с лихвой.

Перевод: Люся Ширшова. По материалам ITworld.