Aula 6
Conceitos de Experiência do Usuário (UX) para devs
Professor: Ricardo Pires
3º Técnico DS - Desenvolvimento de Sistemas II
🚀 Roteiro (105 min)
- Ritmo: Conceito → Código → Resolução de Problema.
- Foco: UX aplicada a decisões de frontend e backend.
- Meta: reduzir fricção e aumentar taxa de sucesso do usuário.
🧠 Conceito: UX não é só interface bonita
- Utilidade: resolve problema real.
- Usabilidade: fluxo simples e previsível.
- Confiança: feedback claro e estável.
💻 UX no backend: resposta que ajuda
public record ApiError(String codigo, String mensagem, String detalhe) {}{
"codigo": "USUARIO_EMAIL_INVALIDO",
"mensagem": "E-mail inválido.",
"detalhe": "Use o formato nome@dominio.com"
}- Erro técnico sem contexto gera abandono de fluxo.
🧩 Heurísticas práticas para devs
- Feedback imediato (loading/sucesso/erro).
- Mensagem acionável em caso de falha.
- Consistência entre telas e ações.
- Acessibilidade básica (teclado, foco, contraste).
Fluxo simples -> menos erro -> mais conversão🗣️ Desafio do Código - O Bug de Produção
Tela de cadastro exibe apenas Erro 400 quando API rejeita CPF inválido.
Impacto:
- Usuário não entende o problema
- Abandona cadastro
- Queda na taxa de conversão- Causa: ausência de mensagem útil entre backend e frontend.
✅ Desafio do Código - A Solução do Sênior
- Padronizar contrato de erro da API.
- Exibir mensagem amigável na interface.
- Monitorar taxa de erro por tela.
Mensagem clara + ação sugerida = UX melhor e menos suporte🎯 Checklist final da Aula 6
- O sistema oferece feedback claro em cada etapa?
- A mensagem de erro orienta o próximo passo?
- O fluxo principal está previsível e rápido?
- O backend e frontend usam contrato de erro consistente?
📝 Atividades práticas em sala (30 min)
Exercício 1: Melhorar mensagens de erro
Refatore a API para retornar erros mais úteis:
@RestController
public class UsuarioController {
@PostMapping("/usuarios")
public ResponseEntity<?> criar(@RequestBody Usuario usuario) {
try {
usuarioService.salvar(usuario);
return ResponseEntity.ok().build();
} catch (Exception e) {
return ResponseEntity.badRequest().body("Erro");
}
}
}Exercício 2: UX do formulário
Analise este fluxo de cadastro e identifique melhorias:
Fluxo atual:
1. Usuário preenche 15 campos obrigatórios
2. Clica "Salvar"
3. Se erro: perde todos os dados e volta ao início
4. Se sucesso: redireciona para login
5. Precisa cadastrar senha em tela separadaMapear: pontos de fricção e soluções
✅ Gabarito das atividades
Gabarito 1 - API melhorada:
public record ApiError(String codigo, String mensagem, String detalhe) {}
@PostMapping("/usuarios")
public ResponseEntity<?> criar(@RequestBody Usuario usuario) {
try {
usuarioService.salvar(usuario);
return ResponseEntity.ok().build();
} catch (EmailInvalidoException e) {
ApiError erro = new ApiError(
"USUARIO_EMAIL_INVALIDO",
"E-mail inválido",
"Use o formato nome@dominio.com"
);
return ResponseEntity.badRequest().body(erro);
} catch (Exception e) {
ApiError erro = new ApiError(
"ERRO_INTERNO",
"Erro interno do servidor",
"Tente novamente em alguns minutos"
);
return ResponseEntity.status(500).body(erro);
}
}Gabarito 2 - Melhorias UX:
Problemas identificados:
- Muitos campos obrigatórios de uma vez
- Perda de dados em caso de erro
- Fluxo fragmentado (cadastro → login → senha)
Soluções:
- Formulário em etapas (wizard)
- Validação em tempo real
- Preservar dados preenchidos
- Cadastro completo em um fluxo
- Login automático após cadastro
Atividade rápida
- Implementar uma das melhorias de UX.
- Testar fluxo com colega simulando usuário final.