Как стать автором
Обновить

Давайте поговорим о метриках как способе оценки труда программиста

Время на прочтение 8 мин
Количество просмотров 18K
Всего голосов 35: ↑26 и ↓9 +17
Комментарии 24

Комментарии 24

Чаще всего бюджет не двигается с места, то есть подвижной частью является «время выполнения».
Но оно всегда плюс/минус прогнозируемо, то есть заказчик четко понимает, сколько «примерно» времени уйдет на исполнение его заказа.
Как раз в большинстве случаев это утверждение будет ошибочным. Если делается действительно что-то масштабное и принципиально новое, ошибка в оценке времени (и соответственно бюджета тоже) может быть просто огромной (спросите у NASA) и это вполне нормально.
Вы спутали метрики по «результату» и по «времени» и только подтвердили правильность написанного выше. В приведенном абзаце речь идет о небольших фриланс-заказах на пару дней-недель. А как раз таки приведенный вами пример относится к большой разработке (разделом ниже), которая затягивается на месяцы и годы и тут да, спрогнозировать что-либо нереально, поэтому покупаются человеко-часы, а не «результат».
На приведенной блок-схеме стрелка от «Нет» к «Нет» — лишняя, нет?
Нет.
Свой вариант, что учитывать, я озвучивал пол года назад на Тостере.
Если коротко:
— число строк,
— время в офисе,
— выполнение задач,
— фикса в месяц.

Если полностью:
1. Количество написанных строк обязательно должно оплачиваться деньгами, либо как основная оплата («сколько написал — столько получил, например 35 руб./строка»), либо в качестве поощрения («фикса 20 тыс. руб./месяц + 25 руб./строка»).
2. Новые строки кода должны разделяться на разные виды и оплачиваться по-разному:
1) абстракции (описание классов, структур, заголовки модулей, названия методов) и пустые строки — 0 руб. (т.е. не учитываются в оплате за строки кода)
2) рабочий код (тело методов, тело функций, тело процедур и т.п.) — 70 руб./строка*
3) определение констант, массивов, переменных вне тела методов — 10 руб./строка
4) комментарии (не более 10% от всего числа строк) и todo — 5 руб./строка
5) документация, changelog, bugfix-файлы — 20 руб./строка.

*Цена за рабочий код зависит от языка программирования, для низкоуровневых языков она должна быть меньше, для высокоуровневых — больше, например:
— Си — 50 руб.
— С++, Pascal, PHP — 60 руб.
— Ruby и Python — 70 руб.
Ну и так далее.

3. Измененные строки (не новые) должны оплачиваться в 30%-50% от новых.
4. Перенесенные строки (не изменялись, просто перенесены) — не оплачиваются.

Учёт строк должен проводиться по распечатанному «git diff» или специально написанными для этого утилитами.

Помимо оплаты за строки кода желательно оплачивать:
1) фикса в месяц — например, минимум 15 тыс. руб./мес. включающие оплату первых строк кода (т.е. напишет или не напишет на 15 тыщ, но всё равно получит, даже если весь месяц ни строчки не написал, или писал, но на 15 тыщ не написал). Это что-то типа подушки безопасности для новичков.
2) время, проведенное в офисе — например, 50 руб./час. Это не должно быть много, но должно стимулировать писать в офисе, а не из дома. Для работодателя, пишущий в офисе эффективнее, чем пишущий дома, т.к. он вживую общается с коллегами и больше пишет кода. К тому же присутствующий в офисе участвует в мозговых штурмах, совещаниях и тому подобном, что тоже положительно скажется на процессе. Чтобы не просыпали, первый утренний час сделать дороже, например 100 руб./час. Учёт входов и выходов вести турникетом по электронной карте или паролю номеронаберателя. Бюджетно — положить самозаполняемый журнал на тумбочку или бумажки, ручку и ящик с прорезью. Можно рядом повесть веб-камеру.
3) бонус за выполнение поставленной задачи. Работодатель перед раздачей заданий сотрудникам может оценить каждое из них, например:
— Написание GUI для ввода формы «Счета на оплату» — 3200 руб.
— Реализация сетевого обмена записями по подпискам — 7500 руб.
— Сохранение сообщений об ошибках в лог-файл — 1000 руб.
Ну и так далее. Бонус учитывает сложность и срочность выполнения с точки зрения работодателя.

При описанной мной системе программист будет мотивирован:
1) больше писать рабочего кода, меньше плодить абстракции и витать в облаках
2) стараться проводить больше времени в офисе
3) брать «горячие» задания и выполнять их как можно быстрее
4) не бояться остаться без денег (актуально для новичков).

Все цифры приведены примерно и должны подбираться экспериментально конкретно для вашей ситуации.
Дополнительно можно добавить метод Водянова, когда часть бюджета разработки (например 20%) распределяется самими разработчиками между собой.

К примеру в конце каждого месяца (или спринта) сотрудники садятся в одной комнате в круг, каждому даётся 3 фишки (красная-600р, зеленая-300р и синяя-200р), перед каждым ставится пустая коробочка, и по кругу разрабы скидывают свои фишки друг другу, на первом круге — красные, потом зеленые, а потом синие. При сбросе фишки, разраб говорит, за что он поощряет, например «за крутой рефакторинг сетевого модуля», «дал мне дельный совет», «носил всем вкусные печеньки», ну и так далее.

После собрания разраб со своей коробкой идет «обналичивать» премию (если ему накидали), в кассу или у начальника.

В этом случае с менеджмента частично снимается вина за «несправедливое» премирование, ну или по крайней мере, «несправедливое премирование» частично «выпрямляется» самими разрабами. Я также полагаю, что это может улучшать личные связи в команде.
лучше 40% бюджета, и выдавать не фишки, а по ножу каждому… банк забирает тот, кто выйдет из комнаты. так ведь интересней будет, больше мотивации, да?

Вижу три минуса подобного подхода:


  • Исправление багов невыгодно. внесенные изменения будут оцениваться как минимум вдвое меньше, чем написание нового функционала.
    • На исправление бага требуется время на поиск (минимальная ставка)
    • При исправлении бага будет больше измененных строк чем новых (минимальная ставка)
  • Рефакторинг невыгоден (абстракции оплачиваются по минимуму). Значит технический долг будет расти.
  • Дикое поощрение копи-пасты. Вместо вынесения общего кода будет выгодно сделать свою версию функции.
    • на С++ шаблоны не будут использоваться. Выгоднее сделать копию и поменять типы данных.

PS. Если разработчик найдет дублирующий код и удалит его, то будут ли его штрафовать за это? (например по 5 рублей за каждую удаленную строчку)

А еще всё это поощряет писать кривой полурабочий код, потому что во главу угла встает количество строк в единицу времени. Зачем думать, разбираться, читать документацию, искать граничные случаи, если можно сходу нашлёпать кое-как работающее решение и отдать в тестирование? Будут баги — подопрём костылями, еще строчки в копилочку.
— число строк,
— время в офисе

ПЕСЕЦ!
А ваши robux статьи на Хабре, давшие вам позитивную карму, судя по всему литературные негры писали?
Потому что всё это приведёт к том, что на код вместо нормального исправления ошибок с рефакторингом будут лепить заплатки, поверх которых будут лепить новые заплатки, так что в итоге будет тормозной и глючный говно-код состоящий на 99% из заплаток сидящих на заплатках и заплатками погоняющими.
Deosis
Дикое поощрение копи-пасты. Вместо вынесения общего кода будет выгодно сделать свою версию функции.

Не только! Вместо нормального цикла «повторить 100 раз» будет очень выгодно вставить копию кода 100 раз, а если потребуется цикл на 99 раз, то будет выгодно написать ещё одну копию из 99 элементов. Если же цикл может выполнять от 100 до 1 раза, то будет создано сто копий раскрытого цикла.
А ещё это стимулирует создавать функции которые ничего не делают в итоге. Вместо 2+2 будет написанно, divide(sum(mult(2,100),mult(2,100),100), а сама функция sum(a,b) внутри будет вида a=a+1 повторённое b раз.
Странно, что никто ещё не упомянул китайский код
Интересно узнать, где Вы этого говна набрали, чтобы обходить людей и организации черпающие субстанцию из этого источника.

— Си — 50 руб.
— С++, Pascal, PHP — 60 руб.
— Ruby и Python — 70 руб.
Ну и так далее

Следуя этой логики получается, что JS — 100 рублей строка. Мы чудесным образом приходим к тому, что чем менее профессиональный специалист, тем больше он получает.

П.С. Вдруг пришло осознание откуда появился Skype на электроне и почему всё больше в нашем мире говнософта с титаническими аппетитами на ресурсы.
Можно пойти от обратного, чем меньше строк, тем лучше… и будут все писать в одну строку. И пускай весь мир подождет…
Получается что за ассемблер, этот самозванец robux, со статьями от литературных негров, собирается платить 5 коп. — как язык самого нижнего уровня, а за машинные коды — и вовсе полушку! (полушка = царская монета в полкопейки)
а ты думал? по твоему почему те, кто по JS шарит — работает удалённо в Тае, на берегу моря, попивая свой мохито, а спецы по Си сидят в подвалах, в старых свитерах своих, с катышками, едят дошик в сухомятку, запивая пивом… блин, да у ребят даже денег нет, чтобы элементарно побриться :)
НЛО прилетело и опубликовало эту надпись здесь
Пункт 1 — у меня, кажется, есть лайфхак…
Хотя, лично у меня есть пункт 0 — обходить подобные конторки подальше, пусть своими кепеями развлекаются сами. И тратят кучу денег на подобных учётчиков.

> но должно стимулировать писать в офисе, а не из дома

«Ходите в туалет на работе, так вы не только экономите туалетную бумагу, но вам за это ещё и платят».
Вы троллте или серьезно?

Выше отбомбили ленивые пафосные лоботрясы, не умеющие и не любящие писать код, но любящие гнуть перед руководством пальцы и завышать свою значимость :)

По твоему писать не говнокод и заботиться о качестве — это быть пафосным лоботрясом?!
И по твоему писать на ассемблере, а не скриптовом языке — тоже лоботряство?!
Ты — точно САМОЗВАНЕЦ!
Не могу понять, чем плоха метрика — качественно сделанная в разумные сроки работа? Это же вполне реально оценить.
Потому что нет общего для всех определения, что такое «качественная» и что такое «разумные».
Джоэл Сполски дал ответ на вопрос о метриках лет 20 назад.
По памяти: «Вы имеете дело с умными людьми. Если вы поставите их зарплату в зависимость от каких угодно метрик они найдут способы максимизировать значения этих метрик в ущерб любым значимым характеристикам.»
Можно лаконичнее: «Люди производят то, что вы измеряете»
Зарегистрируйтесь на Хабре , чтобы оставить комментарий