LINUX.ORG.RU
ФорумTalks

Стоимость строки кода в разных регионах и на удалёнке

 


0

1

Вопрос в контексте Agile разработки по ТЗ, которое может изменяться по ходу проекта. Нередко используют почасовую оплату за потраченное разработчиком время, а я предлагаю вместо этого в контексте поставленной задачи осуществлять биллинг за проделанную работу с помощью учёта количества строк кода, написанного для решения задачи.

Как думаете, сколько стоит качественный отлаженный DRY код в предметной области DevOps, соответствующий всем паттернам, best practices и т.п.?

Если оценивать построчно, подразумевается, что получается максимально компактный, эффективный код без читерства и копи пасты, максимально использующий готовые компоненты, стеки и тулсеты.

Преимущества учета стоимости кода по количеству написанных строк в Agile-проекте

Учет стоимости кода по количеству написанных строк – подход, который периодически обсуждается в IT-среде, в том числе и в вашем прикреплённом обсуждении. Хотя в современной разработке этот метод считается спорным и не всегда применимым, у него есть определённые преимущества, особенно если речь идёт о специфических задачах (например, DevOps-скрипты, IaC, CLI-утилиты) и при правильной постановке процесса.

1. Прозрачность и простота расчётов

  • Лёгкость измерения: Количество строк кода – объективный, легко измеряемый показатель, который можно быстро получить с помощью инструментов анализа кода.
  • Понятная метрика для заказчика: Заказчик может видеть «осязаемый» результат работы, что важно для непогружённых в детали разработки людей.

2. Мотивация к эффективности

  • Фокус на результат: Такой подход мотивирует разработчика не растягивать задачи, а выдавать конкретный, измеримый результат.
  • Возможность сравнения: Можно сравнивать производительность между разными исполнителями или командами, если задачи типовые и стандартизированы.

3. Гибкость при изменении требований (Agile)

  • Простота пересчёта стоимости: При изменении требований (что часто бывает в Agile), можно быстро пересчитать стоимость, исходя из нового объёма кода.
  • Удобство для коротких итераций: В спринтах, где задачи дробятся на небольшие части, оплата по строкам может быть удобна для микрозадач (например, написание шаблонов, конфигов, скриптов).

4. Контроль качества (при правильной постановке)

  • Возможность учёта сложности: Если в стоимость строки закладывается качество (DRY, тесты, best practices), появляется стимул писать лаконичный и качественный код.
  • Быстрая оценка вклада: В проектах с большим количеством рутинных изменений (например, поддержка DevOps-инфраструктуры), этот подход позволяет быстро оценить вклад каждого разработчика.

5. Применимость к DevOps и инфраструктурным задачам

  • Стандартизированные задачи: В DevOps часто встречаются задачи, где результат – это скрипт или конфиг, и их объём хорошо коррелирует с трудозатратами.
  • Меньше риска «раздувания» кода: Если стоимость строки высокая и есть контроль качества (ревью, автоматические проверки), разработчики заинтересованы писать компактно и эффективно.

Важно!

  • Подход не универсален: Для сложных R&D-задач, архитектурных решений, оптимизаций, где ценность кода не в количестве, а в качестве и уникальности, этот метод не подходит.
  • Риски злоупотреблений: Без контроля качества возможен «честинг» – искусственное раздувание кода, копипаст, бессмысленные строки.
  • Лучше использовать в сочетании с другими метриками: Например, с оплатой за закрытие задач, code review, покрытие тестами и т.п.

Вывод

Учет стоимости кода по количеству строк может быть полезен в узких случаях – для стандартизированных, повторяющихся задач, особенно в области DevOps и инфраструктуры, при условии жёсткого контроля качества и прозрачных критериев оценки. В рамках Agile такой подход может упростить биллинг и сделать процесс более предсказуемым для обеих сторон, однако его не стоит рассматривать как универсальное решение для всех типов проектов.



Последнее исправление: sanyo1234 (всего исправлений: 5)
Ответ на: комментарий от Dimez

Оно и видно.

Разве это что-то плохое?

И двадцатилетний опыт работы в ПФР тоже видно.

Меньше (лет) и только в качестве Linux DBA, для региона не так уж и плохо.

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

Такой исполнитель с проекта будет снят, неужели непонятно?

Все исполнители будут сняты. И ты останешься один читерить. Неужели непонятно?(c)

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

Тобой упрямо манипулирует твой аватар?

У Golang кстати маскот похожий, вероятно как раз для читеров очень подходящий ЯП, чтобы кодогенерить тонны лапши в отсутствии наследования.

Непонятно, чем только коты на форуме занимаются, явно не ловлей мышей.

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 3)
Ответ на: комментарий от sanyo1234

Разве это что-то плохое?

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

Linux DBA

Кек :) Как же, конечно же знаю такую базу данных - Linux :)

Dimez ★★★★★
()
Ответ на: комментарий от sanyo1234

Не могу, у меня есть определённые моральные принципы.

Все так говорят. А потом на собеседованиях заставляют про светофоры задачи решать.

Именно такие проекты меня и интересуют, где люди заинтересованны писать компактный качественный код с оплатой за количество строк. Это морально устойчивые порядочные люди и проект с хорошим уровнем оплаты, где нет дефицита последующей интересной работы, чтобы пытаться накручивать решение какой либо подзадачи.

Товарищ, то, что ты называешь морально устойчивыми людьми, коммунисты называют коммунистической сознательностью. Так вот, её нет, поэтому, и коммунизма нет. И таких проектов, аналогично, нет.

Потому что некоторым противно работать с жуликами, кто занимался бы накруткой количества строк или часов?

Товарищ, все что-то накручивают. Кто-то свой скилл накручивает, кто-то свою власть, кто-то свой ум, кто-то свою честность. Святее б-га тоже не нужно быть.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

А потом на собеседованиях заставляют про светофоры задачи решать.

Не занимаюсь собеседованиями.

коммунисты называют коммунистической сознательностью. Так вот, её нет, поэтому, и коммунизма нет. И таких проектов, аналогично, нет.

Потому что там за несознательность не запрещали доступ к благам коммунизма, а скорее наоборот поощряли (спекули всякие, продавцы-накрутчики и т.п.)

Товарищ, все что-то накручивают. Кто-то свой скилл накручивает, кто-то свою власть, кто-то свой ум, кто-то свою честность.

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

sanyo1234
() автор топика
Ответ на: комментарий от lenin386

А кому причиняется вред накручиванием рабочего времени?

Зависит от ситуации, вероятно заказчикам или их акционерам?

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

Ты вообще представляешь, насколько мало капиталист отдаёт непосредственному исполнителю? Зарплатный фонд составляет обычно 1% от оборота. И основная его часть - идет не в карман разработчику.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 2)
Ответ на: комментарий от lenin386

Зарплатный фонд составляет обычно 1% от оборота.

Оборот разве показатель?

Но если очень мало от дохода и одновременно ниже рынка, то вероятно пора что-то менять (например работодателя) ?

Ты мне сейчас пытаешься объяснить, что читерить - это хорошо? А читерство возможное без контроля качества при моём способе биллинга просто слишком привлекательное и простое?

А другие способы читерства, практикуемые сейчас менее палевные, более привычные, а я пытаюсь всё испортить?

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

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

Товарищ, если бы все были кристально честными людьми, денег бы не было. Зачем они вообще? Зашёл в магазин, взял, что тебе действительно сегодня надо, а не всю икру с полок. Квартиру взял по потребностям, а не самый дворец, какой только можно захавать. И вместо жратья водки, пошёл бы, сквер почистил. И т.д. Ну, просто же всё. Только не получается так.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

IMHO неправильно сравнивать поведение при потреблении в общем случае для всех, что слабо контролируемо, с небольшим коллективом, где есть хороший контроль качества кода и мотивация писать качественный код.

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

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 2)
Ответ на: комментарий от lenin386

Товарищ, если бы все были кристально честными людьми, денег бы не было. Зачем они вообще?

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

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

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

И в один прекрасный момент этот творческий человек случайно (на самом деле, нет) узнаёт размер зарплаты коллэги, которого считает ниже себя, и начинается у творческого человека бугурт. Разрывание рубашки, угрозы уволиться, реализация угроз уволиться. Примеров - вагон и маленькая тележка.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

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

Важно, чтобы критерии оценки качества кода были прозрачны и понятны всем сторонам, в идеале хотя бы частичная автоматизация оценки качества кода.

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

Зачем оценка-то? Зачем? Нет денег. Кому нравится строить - то строит, кому нравится лечить - лечит. Продукт есть. Только не выйдёт так. Никто не захочет строить, все захотят элитный коньяк попивать и артистами быть, на удалёнке непременно конечно жэ.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Какое-то слишком пессимистичное мнение о человечестве?

Откуда тогда столько успешных софтовых высокотехнологичных производителей в США? По твоей логике они должны только водку жрать и танцы и пляски устраивать?

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

При моём способе биллинга люди более замотивированы работать больше.

Нет, они замотивированы накручивать размер кода. Потому что это проще и эффективнее. Потому что уже всё понятно. Системы контроля рабочего времени уже созданы, и не потому, что JFF.

Важно, чтобы критерии оценки качества кода были прозрачны и понятны всем сторонам, в идеале хотя бы частичная автоматизация оценки качества кода.

Товарищ, это лозунг. Делайте хорошо и не делайте плохо - вот чего ты хочешь сказать. Это утопия.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

Откуда такая уверенность, и что мешает платить за строки и закрытие задач, а не за время?

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

anonymous_incognito ★★★★★
()
Ответ на: комментарий от sanyo1234

в идеале хотя бы частичная автоматизация оценки качества кода.

В последних MS Visual Studio есть потуги на это. Интересно, где-нибудь реально используют?

anonymous_incognito ★★★★★
()
Ответ на: комментарий от sanyo1234

Откуда тогда столько успешных софтовых высокотехнологичных производителей в США? По твоей логике они должны только водку жрать и танцы и пляски устраивать?

Чойта? Разве в США отменили доллар? Это тварищ твоя такая логика, не моя.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

Товарищ, это лозунг. Делайте хорошо и не делайте плохо - вот чего ты хочешь сказать. Это утопия.

Лозунг - это когда нет практического контроля и обратной связи, а когда есть, то уже не лозунг.

sanyo1234
() автор топика
Ответ на: комментарий от anonymous_incognito

В конце-концов, всё что ему реально нужно - это решение задачи.

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

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

То есть, неоднородность задач ты осознаёшь, а неоднородность строк кода - не осознаешь. Это называется товарищ сверхценная идея.

lenin386 ★★★★
()
Ответ на: комментарий от sanyo1234

Зависит от ситуации, вероятно заказчикам или их акционерам?

А ты каким боком к ним относишься?

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

А ты каким боком к ним относишься?

Я и к продавцам магазинов никак не отношусь, значит нужно популяризировать вынос мимо кассы?

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

IMHO просто закрытия задач слишком размыты для оценки их трудоёмкости, особенно до начала работ.

Поставь себя на место заказчика. Ты бы стал кому-то платить за количество строк кода? Случаи условно неограниченного бюджета естественно не рассматриваем.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от sanyo1234

Каким образом мой вопрос относится к твоему ответу?

А, понял, это одна из бредовых идей малого размаха.

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

А никто его не пытается популяризировать. Но он - есть. И заложен в цену. Будешь зажмуривать глазки, и торговать как будто его нет - разоришься, вот и всё.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Лозунг вполне может быть и с обратной связью, с контролем. Например, «Решения XXII съезда КПСС - в жизнь!».

Не надо путать желание наличия обратной связи в лозунге без фактической реализации её на практике

и

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

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

Не надо путать желание наличия обратной связи в лозунге без фактической реализации её на практике

На практике, кстати, не исключён вариант, что справедливее заплатить за меньшее, а не большее количество кода. Но не всегда.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

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

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

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

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Товарищ! Сам по себе качественный код - это уже очень дорого и нецелесообразно(c).

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

А на продуктовых и/или in-house, когда life cycle кода будет измеряться возможно десятками лет, то целесообразно при наличии соответствующего уровня финансирования.

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 2)
Ответ на: комментарий от sanyo1234

При наличии соответствующего уровня финансирования(с), товарищ, целесообразно вообще всё. Хоть плясать вприсядку, хоть код до последней строки оптимизировать. Вопрос, кто заплатит за это, тебе уже задавали.

lenin386 ★★★★
()
Ответ на: комментарий от sanyo1234

Как он может быть успешен, если вы будете оптимизировать код? Ваш продукт не выйдет, а если выйдет, будет убогъ.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

У читеров продукт выйдет хотя бы, а у тебя - не выйдет. Ты сначала оптимизировать будешь, потом проверять на оптимизацию, потом всех разгонишь.

lenin386 ★★★★
()
Ответ на: комментарий от sanyo1234

А кто же у тебя тогда проджект менеджер, если не ты? Или у тебя там ещё один сидит, который нашёл деньги на оптимизацию кода по объему? Почему он молчит тогда?

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Он не обязан выступать со своими заявлениями на форуме?

sanyo1234
() автор топика
Ответ на: комментарий от lenin386

Или у тебя там ещё один сидит, который нашёл деньги на оптимизацию кода по объему? Почему он молчит тогда?

Может ему просто нечего сказать?

Mischutka ★★★★★
()
Ответ на: комментарий от Mischutka

Или альтер-эго временно подавлен лекарствами :-)

Dimez ★★★★★
()
Ответ на: комментарий от Mischutka

А что вас смущает? Весьма скоро бОльшая часть этой публики заявится в Россию, поэтому было бы разумно поменяться местами жительства с этими «товарищами».

Продемонстрируй на собственном успешном примере «обмена мест жительства с этими товарищами» :)

sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

На основании того, что VB.NET полноценно поддерживает ООП, в т.ч. наследование классов и полноценный Access Control для членов классов?

ОО – это возможность не просто кидаться данными, а данными вместе с функциями. Это довольно широкое определение, которое навязывает только стиль программирования, а не конкретную реализацию. На Си возможно писать ОО-код, но неудобно, а на Го возможно и удобно.

Отсутствие наследования не выглядит как огромная проблема, потому что можно использовать композицию. Отсутствие Access Control на уровне типов не мешает писать в ОО стиле.

VB.NET поддерживает Exceptions, Default Arguments, Operator Overloading в отличие от Golang

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

Exceptions ломают последовательное исполнение, запутывая восприятие кода. Но данный механизм, на самом деле, есть в Go для действительно исключительных ситуаций: panic.

Default Arguments легко выражаются в более простых понятиях (структура с опциями). Когда нужно более гибкое поведение, можно использовать более продвинутые паттерны, например self-referential functions.

Operator Overloading очевидное нет для языка, который ценит ясность выше краткости.

Ничто из трёх, на мой взгляд, не делает работу с объектами значительно проще.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 2)
Ответ на: комментарий от kaldeon

ОО – это возможность не просто кидаться данными, а данными вместе с функциями. Это довольно широкое определение, которое навязывает только стиль программирования, а не конкретную реализацию.

Однако полиморфное наследование является одной из основных концепций популярных ООП языков программирования.

В классическом ООП выделяют четыре ключевых принципа: инкапсуляция, абстракция, наследование и полиморфизм. Эти принципы тесно связаны между собой и часто реализуются совместно.

На Си возможно писать ОО-код, но неудобно, а на Го возможно и удобно.

Чем на Golang удобнее, чем на Си? Наличием интерфейсов?

Отсутствие наследования не выглядит как огромная проблема, потому что можно использовать композицию.

Ты пытаешься представить композицию как какую-то инновацию в мире софтостроения? Ещё в 1995 году программисты VBA для приложений MS Office были вынуждены использовать композицию вместо наследования, потому что VBA не поддерживал такую мощную ООП фичу, в то время как программисты Delphi (object pascal) уже во всю использовали преимущества наследования, в т.ч. необходимость написания намного меньшего количества кода по сравнению с композицией при прочих равных условиях.

Поздравляю, Golang создан для такой же аудитории, для которой был предназначен VBA. :)

Отсутствие Access Control на уровне типов не мешает писать в ОО стиле.

А помогает? LOL

Разве хорошо, что нет возможности более точно назначать права доступа к членам классов? Ах да, ведь в Golang нет даже классов …

Но даже в VBA 30 лет назад контроль доступа был более точным.

Я бы задался вопросом, зачем он всё это поддерживает.

Что значит, зачем? Потому что VB.NET - это первоклассный ООП ЯП для разработки приложений, такой же как C#. Причём, начиная примерно с 2002-2003 годов.

Слияние с другими языками – понятная причина, но технически непримечательная.

В каком смысле слияние?

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 3)
Ответ на: комментарий от sanyo1234

В классическом ООП выделяют четыре ключевых принципа: инкапсуляция, абстракция, наследование и полиморфизм.

Go не предлагает традиционные средства реализации ООП.

Но если говорить только о принципах, то всё-таки самым важным является абстракция.

Чем на Golang удобнее, чем на Си? Наличием интерфейсов?

Да.

Ты пытаешься представить композицию как какую-то инновацию в мире софтостроения?

Нет.

намного меньшее количество кода по сравнению с композицией

И это всё, вся проблема выбора сводится к количеству кода?

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

Недостатки композиции решаются трейтами, миксинами, встраиванием типов.

Разве хорошо, что нет возможности более точно назначать права доступа к членам классов?

Нормально, никто не жалуется. Там, где действительно нужна инкапсуляция, её можно сделать через пакет.

Ах да, ведь в Golang нет даже классов …

А зачем они нужны?

Слияние с другими языками – понятная причина, но технически непримечательная.

В каком смысле слияние?

Быть похожим на все остальные. C#, PHP, Java, VB – они все предлагают примерно один и тот же стиль.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 2)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)