O que UX e tratamento de exceções tem a ver? TUDO!
Programadores costumam ver UX como algo para os "criativos", para os "designers". E quanto mais posicionados ao "back" eles estão, mais longe das preocupações dos usuários ele se vê. Mas será que ele está mesmo tão longe do usuário e das suas necessidades assim? É isso que eu quero discutir nesse texto. Conto com a opinião de vocês.
De início, precisamos entender que UX é sobre experiência do usuário. E uma das piores experiências que o usuário pode ter é aquela que acontece quando as nossas aplicações assumem um comportamento inesperado: da tela azul do Windows à alucinação do ChatGPT, passando pelas mensagens de erro de conexão, travamentos, maratonas da Netflix interrompidas pela falta de pagamento e até mesmo as mensagens de erro que os compiladores, runtimes e interpretadores lançam nos nossos consoles.
E aí chegamos num ponto interessante.
No contexto do uso de uma linguagem, API ou framework de programação, os usuários somos nós, programadores.
E assumindo isso, qual experiência nós estamos oferecendo aos nossos usuários?
No mundo do front-end, se tornou comum o design de telas de erro que se preocupam em informar o que houve e dar um caminho ao usuário. Desde a simplicidade da tela 404 do Tabnews até a forma descontraida da tela 404 da Netflix, ambas cumprem o seu papel, não se limitando apenas a lançar uma mensagem "erro 404" que obrigue o seu avô estudar protocolos HTTP para entender o que houve.
Mas quando os usuários são desenvolvedores, costumamos assumir que eles tem um nível técnico mais apurado, e por isso tendemos ser mais relaxados com essas soluções.
Veja, como exemplo, o que acontece quando você está utilizando VBA e se confunde quanto ao uso de comparações.
Se você cometesse um engano semelhante no Node, essa seria a mensagem:
Repare que existem trade-offs aqui:
- No Node, a escolha foi mostrar uma pilha de execução, que ajudaria o dev a entender qual foi o caminho do "erro" na aplicação. Uma mão na roda, pensando que a persona (essa palavra é importante) que utiliza o Node tem condições de fazer essa analise mais minunciosa;
- No Excel, a escolha pela simplicidade também é orientada a persona que utiliza a ferramenta: alguém que pouco sabe de programação, provavelmente não sabe o que é uma pilha de execução, e inclusive agradece ao ver um link para a página de ajuda da Microsoft para salva-la.
Mas, será que não caberia ao console do Node exibir um link para a página de documentação da linguagem, pensando nos iniciantes na linguagem? E será que não caberia ao Excel exibir uma mensagem de erro mais clara do que um simples "Erro de sintaxe"? Será que o usuário do Excel sabe o que é "sintaxe", no contexto de programação?
Personas
Como disse, a palavra "persona" é importante aqui. Em UX, persona é a idealização do provavel usuário do produto - neste caso, a linguagem de programação.
A definição de personas costuma acontecer depois de muita pesquisa e contato com os possíveis usuários, mas se fossemos definir aqui, à revelia e de forma simplória, quem são as personas usuárias do Node e do VBA, poderiamos afirmar, entre outras coisas, que:
-
Persona usuária de NodeJS/Javascript
- Formadas em Ciências da Computação e afins
- Dedicam 100% do seu tempo em projetos que envolvem programação
- Criam aplicativos, APIs e outras soluções de grande porte
-
Persona usuária de Excel/VBA
- Sem formação em computação, no máximo fizeram algum curso rápido
- Utilizam as horas vagas para desenvolver soluções
- Automatizam relatórios e criam soluções de pequena complexidade
E o que temos a ver com isso? Tudo!
Enquanto, como usuários de linguagens de programação, temos poucas ações a fazer; já como programadores, somos nós quem desenhamos e disponibilizamos soluções aos usuários, sejam eles usuários finais ou outros colegas programadores. Quando estamos escrevendo, por exemplo, as nossas APIs, somos nós quem estamos escrevendo as mensagens de erro que serão consumidas por outros colegas programaodres. E como fazemos isso? de uma maneira clara, que facilita o entendimento sobre o que ocorreu ou não?
Pensando dessa forma, o simples fato de criarmos Exceptions mais claras já seria uma boa decisão de UX, centrada no usuário. Veja como a Exception abaixo já é auto informativa a partir do nome, e ainda oferece uma mensagem personalizada, ao contrario de simplismente lançarmos uma Exception genérica:
//Java
class FieldNameNullException extends Exception{
public FieldNameNullException(String s){
super(s);
}
public getMessage(){
return this.message;
}
}
Concluindo
O objetivo do texto foi trazer um pouco da "luz do UX" aos nossos códigos, reconhecendo e nos preocupando com os possíveis usuários das nossas soluções.
No mundo ideal, seria interessante conseguirmos falar com os nossos usuários e entender melhor quem são eles e em que contexto eles utilizarão as nossas soluções. Mas eu creio que a simples mudança de mindset, nos colocando no lugar do nosso usuário já seria benéfico para criarmos soluções mais bem desenhadas.
Lembrando que UX orientada ao usuário dev não se limita ao design de exceções e erros, mas também aos nomes de métodos, endpoints, escrita de documentação, dev rel, entre outras tantas possibilidades que precisamos considerar.
Quem quiser entender mais sobre UX, recomendo sempre o livro "Design Centrado no Usuário" de Travis Lowdermilk. Quem tiver outras recomendações de conteúdo ou mais pinceladas sobre o assunto, aguardo nos comentários.