Problema XY
# Problema XY

O Problema XY é um problema de comunicação encontrado em situações de suporte técnico, engenharia de software ou atendimento ao cliente, nos quais o usuário final faz perguntas sobre uma tentativa de solução (Y), em vez de perguntar sobre o problema-raiz (X). O usuário final acredita que ao resolver o problema secundário (Y), ele resolverá o problema real (X), mas isso não é necessariamente verdade e traz ambiguidade à comunicação.
Geralmente, o Problema XY é o resultado da falta de compreensão do usuário final sobre o problema real (X). Ao responder a perguntas dirigidas a Y e concentrar-se nelas, a pessoa que fornece suporte pode não identificar X, impedindo-a de resolvê-lo apropriadamente. Como resultado, o usuário final recebe soluções ineficazes ou ineficientes. Ambos os lados se frustram com o desencontro de informações e o tempo perdido.
Quando o usuário final solicita um detalhe que é completamente irrelevante para a questão em mãos, isso pode ser um sinal de que o Problema XY está ocorrendo. Nesse caso, a pessoa que fornece suporte pode tentar identificar X através de perguntas que indiquem as razões pelas quais o usuário está perguntando sobre Y.

## Origem

A expressão Problema XY foi criada implicitamente por Eric S. Raymond no texto How To Ask Questions The Smart Way. No texto, ele escreve "Como eu posso usar X para fazer Y?" na seção "Perguntas que não devem ser feitas" (note-se, no entanto, que na referência original, o sentido de X e Y é invertido):
   Pergunta: Como eu posso usar X para resolver Y? Resposta: Se o que você deseja é Y, você deve fazer essa pergunta sem pressupor o uso de um método que pode não ser apropriado. Perguntas nesse formato frequentemente indicam uma pessoa que não é apenas ignorante sobre X, mas confusa sobre qual problema Y está resolvendo e, ainda, muito fixada nos detalhes específicos da situação.
A noção da existência desse problema, no entanto, precede a cunhagem do termo. Robert E. D. Woolsey ("Gene" Woolsey) descreve no livro "Applied Management Science: A Quick and Dirty Approach" um exemplo muito conhecido em Administração e próximo do Problema XY. Woolsey conta que a gerência de um edifício de escritórios estava preocupada com o alto número de reclamações sobre a lentidão de seus elevadores e, portanto, ela investiu pesadamente em várias tentativas de torná-los mais eficientes: coordenando-os entre os andares, contratando operários adicionais etc. Em algum momento, um consultor prometeu uma solução com relativo pouco investimento e tempo. Quando o consultor executou seu plano, foi um sucesso, as reclamações diminuíram drasticamente, porém a solução não era nada do que a gerência esperava: cada porta dos elevadores se tornou um espelho de corpo inteiro. Woolsey argumenta que a gerência estava tentando solucionar o problema errado: o problema em si não era a demora dos elevadores, mas a ociosidade dos passageiros — os espelhos providenciavam uma distração, pondo fim a boa parte das reclamações.
Para enquadrar este exemplo como um caso apropriado de um Problema XY, ele pode ser interpretado da seguinte maneira: a administração procurava soluções para "Como fazer com que os elevadores funcionem de forma mais eficiente?" (Y), mas aumentar a eficiência dos elevadores não estava diminuindo as reclamações, o problema real era "Os passageiros estão ociosos" (X), logo, tendo ciência do problema real, a pergunta adequada a se fazer seria algo nos termos de "Como entreter os passageiros ao longo do trajeto?" e uma das soluções viáveis seria "Colocar portas de vidro".

## Exemplos

Frequentemente, usuários finais acabam enfrentando problemas XY ao fazer uma pergunta que não aborda diretamente o resultado desejado que motivou originalmente a pergunta. Exemplos de engenharia de software incluem:
* Perguntar sobre como obter os três últimos caracteres de um nome de arquivo (Y) em vez de como obter a extensão do arquivo (X), que pode não consistir em três caracteres.
* Perguntar sobre como alterar a saída do Nmap (Y) em vez de como evitar que máquinas remotas não confiáveis ​​detectem o sistema operacional (X)
* Perguntar sobre como obter uma string entre dois delimitadores (Y) em vez de como analisar JSON (X)
* Perguntar como construir uma expressão regular para extrair valores de XML (Y) em vez de como analisar XML (X).