Цена — это то, что вы платите, качество программного обеспечения — это то, что вы получаете

«Дураки игнорируют сложность. Прагматики страдают. Некоторые могут этого избежать. Гении удаляют это». — Алан Перлис

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

  • Время = деньги
  • Сложность= Сложность — это технический долг. Когда код и решения непросты, их понимание, поддержка и обновление требуют больше времени.
  • Качество= Качественный код прост. Качество менее сложно и с меньшим техническим долгом.

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

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

Почему добавление большего количества людей в проект не ускоряет его — реальность = адаптация, усиление коммуникации, конфликты друг с другом. Может привести к увеличению сложности и увеличению технического долга.

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

Не писать юнит-тесты — вы находите меньше ошибок и вам приходится тестировать заново при изменении кода.

ALM — DevOps — требует времени для настройки, но экономит время и обеспечивает синхронизацию сред.

Сложность и ценность

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

  • KISS = Будь проще, глупый
  • YAGNI — тебе это не понадобится
  • SOLID — Единая ответственность, Принцип открытой закрытости, Принцип замещения Лисков, Принцип разделения интерфейсов, Принцип инверсии зависимостей
  • СУХОЙ — не повторяйся
  • SOC — разделение интересов

здесь — отличный пост с объяснением понятий выше.

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

Эти аббревиатуры сообщаются разработчикам, но цель, стоящая за ними, не объясняется, из-за этого разработчики не понимают, ПОЧЕМУ эти аббревиатуры полезны или преимущества.

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

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

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

Ловушки ценности разработки программного обеспечения

Цена — это то, что вы платите, ценность — это то, что вы получаете (Уоррен Баффет)

Цена — это то, что вы платите за разработку. Качество программного обеспечения - это то, что вы получаете.

В статье Почему дешевый вариант разработки ПО стоит дороже? Я объясню, почему разработка дешевого программного обеспечения часто стоит дороже. Дешевая разработка программного обеспечения работает, если она крошечная, а качество программного обеспечения не имеет значения.

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

  • Функциональность редко является автономной, обычно она взаимодействует с другими функциями и ее необходимо изменить/обновить.
  • Программное обеспечение не имеет ценности, пока оно не находится в производстве и не используется пользователями/системами.

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

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

Разработка программного обеспечения является итеративной. Когда программное обеспечение выходит из стадии разработки, тестирование выявляет ошибки, из-за которых программное обеспечение не работает так, как указано в требованиях.

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

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

Каждый раз, когда вы меняете код, вы рискуете все сломать.

Качественный код, который следует за аббревиатурами, уменьшает влияние изменений за счет слабой связанности и уменьшения зависимостей.

Качество экономит время и то, как быстрая разработка низкого качества стоит вам времени на разработку и текущее обслуживание.

После того, как программное обеспечение создано, вы должны поддерживать его. Чем ниже качество, тем выше обслуживание.

Ловушки разработчиков

Ярлыки кажутся выгодными, но только в краткосрочной перспективе. Разработка программного обеспечения — это долгосрочная игра, где качество — это кратчайший путь.

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

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку здесь.