Однако во многих доменах типичный клиент:
- Интересуются повседневными операционными проблемами - тактика ближнего действия ... не стратегия;
- Только касается немедленного решения;
- Обычно одномерные, не абстрактные мыслители;
- В первую очередь заинтересован в «выполнении работы», а не в поиске долговременного, качественного решения.
И, честно говоря, у них обычно есть веские причины для такого мышления. Прежде всего, они управляют бизнесом, который должен приносить доход сегодня и завтра, а не в отдаленном будущем. Во-вторых, они не являются техническими экспертами - они не знают, что возможно, а что нет, и каковы последствия конкретного выбора архитектуры / дизайна / реализации. Это то, что мы знаем.
Таким образом, ответ - вряд ли удивительно - общение .
Вам нужно много общаться, обучать друг друга, чтобы заставить друг друга понять точку зрения другой стороны хотя бы до базового уровня. Вам необходимо объяснить им краткосрочные и долгосрочные последствия возможных альтернатив. И вам нужно использовать язык, который они понимают .
- Если вы говорите «это будет взломом, что делает код менее читабельным и расширяемым» , они говорят «да, что угодно» .
- Если вы говорите «это было бы краткосрочным исправлением, которое сделало бы более долгосрочную разработку и обслуживание более дорогостоящим и увеличило бы риск появления ошибок» , они сказали бы «ха, давайте рассмотрим» .
- И если вы скажете: «Это решение сейчас обойдется вам в 100 долларов, но вводит технический долг в 500 долларов, который вы рано или поздно должны погасить с процентами; ОТО, это другое решение стоит вам 400 долларов сейчас и не оставляет технического долга; выберите тот, который вам нужен». хочу " , говорят " теперь мы говорим! " ,
OTOH они могут научить нас кое-что о перспективе бизнеса. Бизнесу нужны полезные и достаточно хорошие - вряд ли идеальные - решения, И они знают, наверное, лучше, чем кто-либо, что «совершенство - враг добра». Поэтому вам нужно помнить, что наша задача - предоставлять решения проблем наших клиентов, а не производить технически совершенное программное обеспечение. Иногда эти два сходятся к одному, но чаще нет. Это может показаться грустным для многих, но это реальность бизнеса. Для меня, если мне удалось решить проблему моего клиента, и я вижу, что это заметно облегчило им жизнь, я так же счастлив, как и они. OTOH, если мне удастся реализовать идеальный дизайн, который я имел в виду, но компания обанкротится на следующей неделе, это вряд ли победа для кого-то, не так ли?
Разумный владелец бизнеса поймет - если вы объясните им, используя их собственный язык, - почему важно поддерживать чистоту программного обеспечения, писать модульные тесты, проводить рефакторинг и т. Д. Несмотря на то, что в краткосрочной перспективе они, похоже, не вносят непосредственного вклада, они необходимы для долгосрочного обслуживания. А здравомыслящие клиенты заботятся о долговременном обслуживании своего бизнеса, поэтому они, безусловно, готовы инвестировать в него, когда видят ценность, которую приносят их инвестиции. Однако и их ресурсы, и ваше время ограничены, поэтому вам нужно расставить приоритеты и сосредоточиться на самых важных вещах. Но это важно, только если это важно для вас обоих .
Возможно, вы захотите провести рефакторинг модуля A, потому что код там просто ужасен, и у вас есть отличная идея, как реорганизовать код, чтобы он был лаконичным, элегантным и чистым, используя шаблон проектирования, о котором вы только что прочитали. Однако, если к этому модулю не прикасались годами, и он работает надежно, вам, скорее всего, лучше сосредоточиться на модуле B, который будет расширен на следующей неделе с очень важной новой функцией, и он содержит тонны ошибок уже.