Как «компании по разработке программного обеспечения» справляются с техническим долгом?

20

Что такое "компании по разработке программного обеспечения"?

Под «компаниями-разработчиками программного обеспечения» я подразумеваю компании, которые зарабатывают деньги, главным образом, за счет создания нестандартного программного обеспечения. Например, агентства или промежуточные компании, или подрядчики / консультанты, такие как Redify .

Что противоположно "компаниям по разработке программного обеспечения"?

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

Верный способ создать технический долг:

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

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

Если заказные работы - верный способ создать технический долг, как агентства справляются с этим?

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

Энди
источник
5
Почему я испытываю сильное желание просто сказать «плохо»?
HLGEM
5
Это вопрос о технических долгах или о программном обеспечении для ползучести и только для одного клиента? Технический долг - это сумма плохих практик, которые возвращаются, чтобы преследовать вас позже. Ползучесть функций и программное обеспечение только для одного клиента - это другой кошмар управления.
Фил
На самом деле, это обычное дело. Я работал в нескольких компаниях, которые намеренно продают или арендуют промежуточное программное обеспечение с универсальными модулями, которые допускают некоторую настройку.
umlcat
3
С точки зрения клиента, опыт показывает, что большинство специализированных магазинов настоятельно рекомендуют вам накапливать неприятные технические долги, чтобы вы могли снова вызывать их, чтобы накапливать новые, разные технические долги.
Уайетт Барнетт
2
@WyattBarnett С точки зрения пользовательского магазина: многие покупатели плохо разбираются в технических долгах, а попытки обучить их вызывают только трения. Они эффективно настаивают на том, чтобы вы помогли им накопить технические долги, даже не обсуждая плюсы и минусы.
MarkJ

Ответы:

13

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

SaaS дает вам хорошие возможности для сбора статистики использования. Если вам еще не пришло в голову, вы должны рассмотреть возможность усовершенствования своих функций, чтобы вы могли отслеживать, кто чем пользуется. Наш опыт показывает, что большинство идиоматических клиентов обычно также являются самыми неблагополучными; тот парень, который топнул ногами и задержал дыхание, пока вы не дали ему кнопку экспорта в MS-Access, вероятно, не использовал ее более года. Некоторые функции сохраняются, даже если их использует только один клиент, потому что этот клиент громкий и угрожает заняться своим делом в любое время, когда что-то его не устраивает. Прекращение использования этой функции может стоить вам сейчас клиента, но время, затрачиваемое на поддержку этой функции, может обойтись десяткам клиентов за эти годы. Это показатель качества вашей управленческой команды,

Когда вы прекращаете работу какой-либо функции, не забудьте заранее объявить о своем решении своим клиентам (или, по крайней мере, тем, кого они затронули), в любом месте от шести месяцев до трех лет. На самом деле, если вы соглашаетесь создавать специфичные для пользователя функции, вы можете попытаться заставить своих сотрудников по продажам определить дату окончания срока действия с самого начала. Назовите это «сроком службы поддержки» и дайте понять, что чем дольше они этого хотят, тем больше денег это будет стоить. Попытайтесь предоставить обходные пути для своих клиентов, чтобы они не колебались при запуске функции, например, скрипт, который преобразует ваши экспортированные файлы XML в формат MS-access, или несколько советов по выбору лучшей СУБД.

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

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

dslh
источник
+1 отличный ответ dslh, дело дошло до сути тех модификаций или хаков, которые мы должны сделать. Мне нравится идея истечения срока ... действительно интересно.
Энди
+1 Нет проблем с приобретением множества мелких функций, которые необходимо поддерживать, если клиент оплачивает функцию + поддержка. Извините, мы не можем позволить себе бесплатно поддерживать вашу функцию ...
Фил
18

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

  1. удивительные вещи, которые будут полезны для всех и относительно просты в реализации
  2. удивительные вещи, которые будут полезны для всех и которые трудно реализовать
  3. глупая вещь, которая нужна только этому клиенту, который на самом деле не нужен
  • Категория 1 реализуется в текущем цикле разработки.
  • Категория 2 будет реализована в следующем цикле разработки.
  • Категория 3 получает от 1 человека в месяц, после чего большинство клиентов понимают, что их запрос не стоит того.

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

(этот опыт был в компании ISV)

MK01
источник
интересный МК. Хотя я не уверен, что 3 будет летать с потенциальным новым клиентом, но, вероятно, будет работать с существующим клиентом. Тем не менее, очень интересно.
Энди
6
1 человеко-месяц? У вас должны быть клиенты с очень маленькими запросами!
JohnB
@JohnB да, хорошо, либо это, либо продукт уже был очень гибким.
MK01
6
@JohnB ты говоришь, что человеко-месяц - это миф?
октября
2
@octern Я думаю, что другие пропустили ссылку :-)
Арнольд Зокас
12

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

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

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

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

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

Калеб
источник
3

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

Например, предположим, что у вас был конечный продукт, представляющий собой внутреннее веб-приложение, которое ваши клиенты будут устанавливать в интрасети. Однажды приходит клиент и предлагает довести самосвал, полный денег, до вашей компании, если вы сделаете для него версию с настольным приложением «богатого клиента» вместо интерфейса браузера. Что ж, если ваша система хорошо спроектирована и ваши зависимости хорошо управляются, это просто вопрос повторного использования компонентов домена, доступа к данным и служб при создании нового компонента представления. Техническая задолженность не учитывается, даже если у вас есть только один клиент, который хочет вернуться в 1999 г., и для этого у вас есть настольное приложение.

Эрик Дитрих
источник
1

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

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

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

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

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

С другой стороны, если ваш вопрос - спросить, является ли написание программного обеспечения независимо от вашей бизнес-модели гарантией технической задолженности. Ответ будет Абсолютно. Реальный вопрос заключается в том, как любая компания справляется с техническим долгом. Позволить ему накапливаться и иметь дело с ним в запланированное время, или постоянно управлять чистой базой кода, чтобы как можно скорее расплатиться с техническими долгами? Этот ответ сводится к индивидуальным приоритетам компании, а также к тому, является ли возникший технический долг финансовым.

S.Robins
источник
+1 Спасибо за исчерпывающий ответ С.Робинс. Я предполагаю, что главное, что я пытался сделать, это то, что, если вы строите что-то для краткосрочной цели продажи, но не готовы поддерживать этот продукт с течением времени, то у вас возникают технические долги, так как каждый раз что продукты нуждаются в поддержке, вы, как компания, не будете готовы, и тогда вам придется взять членов основной команды разработчиков продукта, чтобы исправить то, за что никто больше не платит.
Энди
0

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

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

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

Шон Макмиллан
источник