Interface Otimista - O que é?
Imagine que ao desenvolver uma aplicação de gerenciamento de tarefas, uma das funcionalidades pode ser a atualização do título de uma tarefa. Nesse caso, a probabilidade de algo dar errado é mínima, já que não há restrições complexas associadas ao título da tarefa. Portanto, podemos adotar uma abordagem otimista para essa operação.
Na abordagem otimista, não é necessário aguardar pela confirmação do back-end para refletir a mudança na interface do usuário. Assim que o front-end envia uma requisição ao back-end para atualizar o título da tarefa, o novo valor é imediatamente apresentado na tela. Se ocorrer algum erro durante a requisição, simplesmente revertamos para o título anterior exibido na tela. Caso contrário, mantemos a modificação realizada.
Essa abordagem proporciona uma experiência de usuário mais fluida, eliminando a espera desnecessária e mantendo a interface responsiva, enquanto assegura a integridade dos dados.
Veja esse exemplo que encontrei na internet de um TODO utilizando essa o conceito de interface otimista para criação de novas tarefas:
Repare que no momento em que ele adiciona, o item já aparece!
Agora dá uma olhada nessa versão com loading state, que seria a maneira tradicional:
Viu a diferença?
A abordagem é chamada de "otimista" porque assume que as coisas vão dar certo desde o início, sem esperar pela confirmação do servidor. Em vez disso, ela atualiza a interface imediatamente, proporcionando uma experiência mais rápida e responsiva para o usuário.
Mas claro que essa abordagem possui seu lado bom e ruim, como tudo na vida! Então cabe a você decidir quando utilizar.
Para mim essa abordagem "otimista" acaba carregando um potencial perigo para a experiência do usuário, me lembrando até dos mandamentos do Go Horse. Te dou 2 analogias para tentar te mostrar como um otimismo pode levar a péssimas situações para uma pessoa/usuário:
-
Você confia no seu código e acredita que ele sempre irá cumprir o seu propósito, pois você utiliza linguagem tipada e sempre confere o resultado seja no console, debug ou interface e, dessa forma, você acredita que não precisará realizar testes unitários, de integração etc. Nem preciso dizer que isso é um Go Horse de carteirinha e essa prática vai dar merd@ em algum momento.
-
Um princípio do UX é que se você faz uma ação, você precisa saber o resultado da sua ação. Se você recebe o resultado da sua ação e após algum momento, por qualquer motivo, esse resultado precisa vir com "pedido de desculpas" falando que o resultado não era realmente o que antes foi afirmado, isso fere totalmente o princípio mencionado, além de proporcionar uma experiência em que o usuário sempre precisará ficar alerta devido a falta de compromisso com a "verdade".
Dito isso, inicialmente o otmimismo parece realmente produtivo mas, ao meu ver, é preciso ter um certo pragmatismo ao codar.
Good evening, guys!
The mentioned links above its broken.
Do you have the correct links?