Что такое "компании по разработке программного обеспечения"?
Под «компаниями-разработчиками программного обеспечения» я подразумеваю компании, которые зарабатывают деньги, главным образом, за счет создания нестандартного программного обеспечения. Например, агентства или промежуточные компании, или подрядчики / консультанты, такие как Redify .
Что противоположно "компаниям по разработке программного обеспечения"?
Противоположностью вышеуказанной бизнес-модели являются компании, которые ориентированы на долгосрочные продукты, будь то развертываемые настольные / мобильные приложения или программное обеспечение SaaS.
Верный способ создать технический долг:
Я работаю в компании, которая пытается сосредоточиться на наборе продуктов SaaS. Однако из-за определенных ограничений мы иногда в конечном итоге подчиняемся воле определенных клиентов и заканчиваем сборкой программного обеспечения, которое можно использовать только для этого клиента.
Это верный способ получить технический долг. Теперь у нас есть немного программного обеспечения, которое ничего не добавляет к нашему основному продукту.
Если заказные работы - верный способ создать технический долг, как агентства справляются с этим?
Так что это заставило меня задуматься. Компании, у которых нет основного продукта в качестве центра их бизнес-модели, хорошо, что они всегда делают заказное программное обеспечение. Как они справляются с понятием технического долга? Как это не загоняет их в техническое банкротство ?
Ответы:
Если вы можете превратить пользовательские требования во что-то, что будет полезно всем, отлично. Если клиент готов оплатить текущие расходы на поддержку этой функции, также отлично. Но если вы небольшая команда и вам трудно поддерживать все свои функции, вам ничего не остается, кроме как принять какие-то жесткие решения о функциях, которые вам требуются меньше всего, а затем потратить некоторое время на их удаление из своей базы кода.
SaaS дает вам хорошие возможности для сбора статистики использования. Если вам еще не пришло в голову, вы должны рассмотреть возможность усовершенствования своих функций, чтобы вы могли отслеживать, кто чем пользуется. Наш опыт показывает, что большинство идиоматических клиентов обычно также являются самыми неблагополучными; тот парень, который топнул ногами и задержал дыхание, пока вы не дали ему кнопку экспорта в MS-Access, вероятно, не использовал ее более года. Некоторые функции сохраняются, даже если их использует только один клиент, потому что этот клиент громкий и угрожает заняться своим делом в любое время, когда что-то его не устраивает. Прекращение использования этой функции может стоить вам сейчас клиента, но время, затрачиваемое на поддержку этой функции, может обойтись десяткам клиентов за эти годы. Это показатель качества вашей управленческой команды,
Когда вы прекращаете работу какой-либо функции, не забудьте заранее объявить о своем решении своим клиентам (или, по крайней мере, тем, кого они затронули), в любом месте от шести месяцев до трех лет. На самом деле, если вы соглашаетесь создавать специфичные для пользователя функции, вы можете попытаться заставить своих сотрудников по продажам определить дату окончания срока действия с самого начала. Назовите это «сроком службы поддержки» и дайте понять, что чем дольше они этого хотят, тем больше денег это будет стоить. Попытайтесь предоставить обходные пути для своих клиентов, чтобы они не колебались при запуске функции, например, скрипт, который преобразует ваши экспортированные файлы XML в формат MS-access, или несколько советов по выбору лучшей СУБД.
Что-то, что сработало для нас в качестве превентивной меры, - это ежемесячное получение отчета от нашего отдела продаж нашей команде разработчиков и руководству. В этом отчете рассматриваются отзывы клиентов - какие функции наиболее популярны, какие функции наиболее востребованы, какие предлагаемые функции вызывают наибольшее внимание. Это интересно, если вы разработчик, но реальная выгода - для отдела продаж, который теперь немного больше думает о каждой функции в контексте общей картины, вместо того, чтобы отправлять бесконечный поток запросов функций и определять приоритеты на основе на котором клиент был самый громкий. Это привело к тому, что наш торговый персонал стал более твердым, когда речь заходит о новых запросах функций в ходе переговоров, потому что они лучше понимают, где каждая функция может вписаться в общее ценностное предложение нашего продукта.
Наличие модульного кода с большим количеством автоматических тестов поможет вам, когда вы взламываете функции в своем продукте и снова взламываете их, но в конечном итоге это не вопрос программирования, а вопрос управления. Написание кода для продажи - дурацкая игра.
источник
Когда я сталкиваюсь с пользовательскими запросами на разработку, я фильтрую их через классный фильтр, который разбивает запросы на 3 кучи:
Честно говоря, это никогда не подводило, и я не думаю, что мы реализовали какие-либо функции категории 3. И, конечно, никто из покупателей не шел (продажи не позволили бы мне осуществить это иначе :)
(этот опыт был в компании ISV)
источник
Ваша проблема не в том, что вы создаете код, который используется только для одного клиента. Проблема в том, что вы включаете код, который используется только для одного клиента, в продукт, который вы продаете многим другим клиентам, которым эта функциональность не нужна.
Они доставляют продукт. А потом они идут дальше. Когда вы разрабатываете продукт по контракту, все, что вы делаете в этом проекте, предназначено для этого одного клиента. Любая техническая задолженность, которая могла возникнуть в процессе разработки, становится проблемой клиента после окончания контракта, и разработчик переходит к другому проекту для другого клиента.
Это не значит, что нормально делать дерьмовую работу, конечно. Ваша цель номер один - заставить вашего клиента продолжать работать с вами, а качественная работа - это способ добиться этого. Это также не означает, что технический долг не является проблемой для разработчиков контрактов. Даже если вы постоянно пишете чистый код самостоятельно, есть вероятность, что в какой-то момент вас примут на работу над проектом, который уже накопил кучу долгов. Это может быть хорошо (клиент хочет заплатить вам за уборку) или нет (клиент не знает, насколько плох код, и не понимает, почему «просто» добавление еще нескольких функций займет так много времени ).
источник
Я не согласен с предпосылкой о том, что заказные работы гарантируют техническую задолженность. Избегать технических долгов не означает избегать определенных видов функциональности - это значит избегать ненужной жесткости, проблем с зависимостями и вещей, которые затрудняют изменение кода (то есть дорого). Пользовательская функциональность не подразумевает ничего из этого - она просто подразумевает узкую основу для функциональности. Таким образом, их ключ заключается в том, чтобы как можно больше выделять из реализации как можно больше общей, многократно используемой логики, оставляя пользовательские, одноразовые компоненты в качестве отдельного модуля, который может быть развернут для запрашивающего клиента.
Например, предположим, что у вас был конечный продукт, представляющий собой внутреннее веб-приложение, которое ваши клиенты будут устанавливать в интрасети. Однажды приходит клиент и предлагает довести самосвал, полный денег, до вашей компании, если вы сделаете для него версию с настольным приложением «богатого клиента» вместо интерфейса браузера. Что ж, если ваша система хорошо спроектирована и ваши зависимости хорошо управляются, это просто вопрос повторного использования компонентов домена, доступа к данным и служб при создании нового компонента представления. Техническая задолженность не учитывается, даже если у вас есть только один клиент, который хочет вернуться в 1999 г., и для этого у вас есть настольное приложение.
источник
Это довольно сложный вопрос, потому что, как и многие вещи, он действительно зависит от обстоятельств проекта, уровня контроля со стороны компании-контрактора, от того, управлялось ли заказным программным обеспечением компании-контрактника на протяжении всего его жизненного цикла, количества «вмешательства» других людей в доступ к базе кода, отношение всех вовлеченных людей, сложность проекта и используемые методологии ... Я действительно мог бы продолжить.
Все системы имеют определенный технический долг. В некоторых случаях это может быть не особенно заметно из-за усердных усилий со стороны разработчиков, работающих над постоянным поддержанием чистой базы кода, однако ни одна система не является идеальной, и серьезный редизайн может сделать кажущуюся невинной, но давнюю проблему очевидной. Так как же контрактные компании справляются с этим?
Во многих случаях это не так. Часто программное обеспечение будет написано одной фирмой, а затем изменено другой, и нет ничего необычного в том, чтобы кодовая база была действительно испорчена, поскольку каждая компания по контракту работает в сжатые сроки и не оправдывает время для поддержания кода в чистоте ( и иногда едва проверены), если это означает, что они могут рискнуть пропустить крайний срок.
В других случаях вы находите компании, которые не только хорошо управляют своим контрактным проектом, но и каким-то образом находят время, чтобы оставить существующую кодовую базу в лучшем состоянии, чем они ее нашли. Они часто делают это с тщательным планированием, выявляя источники технической задолженности - обычно те, которые больше всего влияют на новую работу - и они разрабатывают стратегии для предоставления тестовых примеров и модификаций, которые способствуют управлению технической задолженностью и учитывают все это в графике их проектов. ,
Гарантирует ли наличие специализированного программного обеспечения технический долг, а не написание центрального продукта? Короткий ответ - нет, однако, вероятно, технический долг будет накапливаться, если с ним не будут активно бороться. Это так же, как с любым другим программным проектом. Если вы полностью контролируете проект на протяжении его жизненного цикла, у вас появляется лучшая возможность справиться с технической задолженностью. Если нет, то вам придется иметь дело с техническими долгами, которые могли возникнуть из кода, оставленного предыдущей компанией.
С другой стороны, если ваш вопрос - спросить, является ли написание программного обеспечения независимо от вашей бизнес-модели гарантией технической задолженности. Ответ будет Абсолютно. Реальный вопрос заключается в том, как любая компания справляется с техническим долгом. Позволить ему накапливаться и иметь дело с ним в запланированное время, или постоянно управлять чистой базой кода, чтобы как можно скорее расплатиться с техническими долгами? Этот ответ сводится к индивидуальным приоритетам компании, а также к тому, является ли возникший технический долг финансовым.
источник
Заказное программное обеспечение не является гарантией технического долга, но обслуживает двух мастеров.
Компания, специализирующаяся на разработке программного обеспечения, создаст программное обеспечение, точно соответствующее поставленной задаче, доставит его и при необходимости поддержит. Действительно заказное программное обеспечение часто не требует добавления новых функций очень часто.
Проблема, описанная в этом вопросе, заключается в том, что продуктовые компании встраивают пользовательские функции в общий продукт. Если бы продукт был полностью изготовлен по индивидуальному заказу, он двигался бы только тогда, когда менялись требования к одному клиенту. Если бы продукт был полностью универсальным, он мог бы двигаться только при добавлении новых функций, чтобы сделать его более привлекательным. Но когда у вас есть особенность в другом универсальном продукте, у вас есть два фрагмента кода, которые находятся в тесном контакте и движутся с разной скоростью. Подобно тектоническим плитам, которые вызывают землетрясения, интерфейс между этими кусками кода является «горячей точкой», созревшей для проблем.
источник