[Перевод] Проблема XY, или как правильно задавать вопросы

9cbm5h5rcybmlupnphv686lmgus.jpeg

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

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


Проблема XY — это когда вы задаётесь вопросами о предпринятом решении Y. Но вместо этого нужно задаваться вопросами о проблеме X.

— xyproblem.info


Давайте выявим общий алгоритм проблемы XY. Определение взято с сайта xyproblem.info, так что стоит заглянуть на него.
  • Пользователь хочет сделать X.
  • Пользователь не знает, как сделать X, но считает, что сможет нащупать путь к решению, если ему удастся сделать Y.
  • Пользователь не знает, как сделать и Y.
  • Пользователь начинает просить помощи с Y.
  • Люди пытаются помочь пользователю с Y, но Y кажется странной для решения проблемой.
  • Пользователю нужна помощь с X, а Y даже не является приемлемым решением X.

Вы пытаетесь получить расширение файла из трёх последних символов. Это проблема Y. Но истинная проблема заключается в нахождении всех расширений файлов. Это X.

Вместо того, чтобы обсуждать X, вы говорите об Y.

Как получить echo трёх последних символов в имени файла?

Если они в переменной: echo ${foo: -3}

Почему 3 символа? Что тебе нужно НА САМОМ ДЕЛЕ? Ты хочешь получить расширение?

Да.

Нет никаких гарантий, что все файлы имеют трёхбуквенные расширения,

поэтому получение трёх символов не решит проблему. echo ${foo##*.}

— xyproblem.info



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

— Адам Ральф


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

Это — ваша ответственность. Задавая такие вопросы, вы будете совершенствоваться как разработчик. Чтобы быть специалистом в определении потребностей бизнеса, нужно достаточно хорошо знать язык неспециалистов.

Вам нужно спрашивать, что им нужно, а не что они хотят.


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

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

Если вы не будете хорошо коммуницировать, от этого пострадает проект.


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

В своём докладе Адам спрашивает, влияет ли имя (first name) клиента (допустим, начинающееся на Ms) на его социальный статус (status), что вызывает лавину ответов. Он использует эти ответы для моделирования проблемных областей, состоящих из трёх частей.

2yhiifliym3_k4hn72dkzcx-yu4.png

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

Применение сценариев и поведений — отличный способ моделирования проблемных областей. Определение взаимосвязей сущностей разрешает проблему XY.

Попытки решений могут совершаться специалистами в конкретной области. Но на самом деле они не знают подробностей всей системы.

Глубинное понимание проблемных областей приводит к новым решениям. По сути, это разрешает проблему XY.


На правах рекламы


Многие клиенты уже оценили преимущества эпичных серверов от Вдсины.
Это недорогие VDS с процессорами AMD EPYC, частота ядра CPU до 3.4 GHz. Максимальная конфигурация позволит реализовать практически любую идею — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe. Закажите и вы!

8p3vz47nluspfyc0axlkx88gdua.png

© Habrahabr.ru