Como impedir que os usuários criem conjuntos de entradas incorretos, quando não há uma maneira prática de verificar a entrada?
A cena
Modifico um pequeno pacote ERP escrito no Visual FoxPro. Uma parte da embalagem diz respeito a manifestos e faturas de caminhões de impressão a serem enviados com os motoristas em suas rotas de entrega. A rotina de impressão, quando não é alimentada como entrada, tenta imprimir tudo, resultando em resmas e resmas de papel da impressora sendo desperdiçadas em uma impressora de alta velocidade.
Não estou em condições de reescrever nenhum dos elementos da interface GUI, nem posso adaptar estruturas, kits de ferramentas ou outro código externo a ser usado nessa situação. Os motivos estão relacionados à política do escritório; por favor, não sugira que eu possa substituir a estrutura existente do ERP, pois não é uma opção para mim.
O problema
Os usuários estão em um ambiente de alta pressão e tempo crítico. Cada processo é medido em minutos ou até segundos, o que significa que tenho que minimizar o tempo de processamento o máximo possível. Devido a esse ambiente e às possíveis distrações, os usuários frequentemente ignoram as caixas de diálogo, pressionando a tecla [Enter], que faz com que o foco se mova rapidamente pelo formulário e, eventualmente, aponte para o botão de ação da caixa de diálogo de entrada, resultando em uma impressão automática. .
A entrada consiste em um intervalo de datas, intervalo de rota e intervalo de pedidos de vendas.
A entrada para o intervalo de datas não pode ser definida automaticamente como "data de hoje", pois é necessária uma impressão posterior frequente. Além disso, os usuários finais trabalham durante a meia-noite, ou seja, a rolagem de datas torna isso impraticável sem criar uma rotina que detecte automaticamente a alteração, etc.
A entrada para rotas não pode ser codificada, nem deduzida de rotas que já foram enviadas, porque são necessárias novas impressões (veja acima).
A entrada para pedidos de vendas só tem significado ao imprimir pedidos únicos ou intervalos específicos.
Portanto, francamente, não há maneira prática de validar informações .
O botão de ação que aciona a impressão não pode ser bloqueado. Qualquer sugestão de que uma caixa de diálogo de bloqueio seja colocada na frente do usuário será ignorada. Não tenho a liberdade de discutir por que isso não é uma opção, além do conceito já ter sido discutido em outras partes do site (de um ponto de vista diferente) e ter sido rejeitado.
O bloqueio de impressões quando todas as entradas estão vazias foi rejeitado como uma decisão de design, pois o software deve acomodar isso como um recurso.
Os usuários
Os usuários foram solicitados repetidamente a não fazer isso. Eles freqüentemente ignoram esse conselho. Desencadear esse evento infeliz não é algo que seus capatazes / gerentes abordem, portanto não há pressão para acabar com o comportamento.
A organização
Não tenho voz no fluxo de trabalho envolvido, apenas a modificação dos componentes de software existentes afetados por esse fluxo de trabalho.
O vendedor
O fornecedor obtém uma segunda fonte do pacote como uma instalação personalizada do fornecedor de software original. O fornecedor exige que todas as alterações de código sejam enviadas de volta para integração em sua base de código. Alterações significativas na arquitetura resultarão em aumento de custos futuros durante a migração de versões devido à extensa personalização envolvida; em alguns casos, os programadores me disseram que ignorariam completamente essas grandes mudanças e farão o que quiserem.
O software
Não tenho voz na seleção ou instalação do software, portanto, mudar a plataforma está fora de questão.
Em relação ao ambiente do software, cada fatura impressa é uma única chamada. Não há um recurso de impressão em lote, e por causa de como o recurso de impressão é integrado ao sistema (e algumas peculiaridades do idioma), não é possível criar um invólucro em lote em torno dessa API. Além disso, essa parte do programa chama outro programa que imprime a fatura, que por sua vez chama a API de imprimir um relatório, que imprime uma única fatura. Design horrível, eu sei.
Os formulários de entrada são uma combinação estranha de um cabeçalho de formulário que não possui caixas de entrada, mas pode conter outros elementos da GUI. As caixas de entrada são definidas em tempo de execução.
O objetivo
O software impedirá que os usuários imprimam erroneamente toda a papelada.
Como você resolveria esse problema?
Respostas:
Isso é fácil, se deixar tudo em branco, você solicita que isso imprima tudo; no entanto, a seleção PADRÃO nesse prompt DEVE ser cancelada.
Se eles digitarem valores, imprima o que eles pediram.
Dessa forma, eles não irão queimar acidentalmente o formulário e imprimir tudo. Eles vão brilhar e imprimir nada. Eles precisariam pausar e imprimir alterar a seleção no prompt para OK, em Cancelar, para imprimir tudo.
fonte
Parece-me que você tem um requisito para consertar algo, mas toda vez que você propõe uma solução (e há muitas boas idéias em sua lista), ela é derrubada.
Este é o ponto em que você precisa recuar. Você não precisa de uma vaga idéia de que "isso está errado; conserte". O que você precisa é uma especificação. Pergunte às pessoas que o querem fixo exatamente o que eles não querem fazer, já que até agora tudo que você tem é o que eles não querem. Isso é fácil: simplesmente não faça nada e você não fará nada do que eles não querem. Diga a eles que, se eles querem mudanças, precisam criar regras positivas e concretas e você as implementará.
fonte
Tentarei responder a uma pergunta mais genérica: como evitar que um usuário cometa um erro que leve ao desastre ou algo que não possa ser cancelado ou desfeito (como desperdiçar papel imprimindo várias páginas que o usuário não esperava que fossem) impresso).
Como dito na pergunta original:
Isso significa que:
O produto de software deve fazer o possível para aumentar a produtividade dos funcionários. Quando cada segundo conta, a experiência e a produtividade do usuário são ainda mais importantes do que nos produtos em geral, onde é aceitável uma perda de alguns segundos em algum recurso que a pessoa nem usa com muita frequência.
Os usuários estão ocupados demais para prestar atenção ao produto de software. Quando, em um ambiente calmo, uso algum recurso do Microsoft Word que usei na última vez no ano passado, se o Microsoft Word me faz uma pergunta, explicando quais seriam as consequências de minha escolha, posso me permitir gastar um ou dois minutos lendo a pergunta e talvez até vá ler a documentação. No seu caso, você não pode pagar por isso. Seus usuários não têm tempo para ler.
Caixas de mensagem: não, não e ... não!
Como já explicado em minha outra resposta , as caixas de mensagens são ruins na maioria dos casos, por dois motivos (consulte Sobre o rosto 3 de Alan Cooper para obter mais detalhes):
O diálogo que gritava "Lobo!" Este princípio incita o usuário a descartar repetidamente uma caixa de diálogo sem prestar atenção se o aplicativo mostrar a mesma caixa de diálogo com muita frequência.
A caixa de diálogo perturba o fluxo de trabalho: o usuário não pode manter o foco no aplicativo, porque o diálogo retira esse foco e a interação com o aplicativo é suspensa até que o diálogo seja descartado¹.
Isso significa que as caixas de diálogo são um mal absoluto no seu caso do ponto de vista do UX: elas serão descartadas e diminuirão a produtividade em um ambiente em que cada segundo conta.
Outros significados
De acordo com a pergunta:
"A entrada consiste em um período, intervalo de rota e intervalo de pedidos de vendas."
Não há valores incorretos (por exemplo, o usuário pode inserir uma data anterior, uma data futura ou hoje no primeiro campo), portanto, a validação não é possível.
"A rotina de impressão, quando alimentada apenas como entrada, tentará imprimir tudo, resultando em resmas e resmas de papel da impressora sendo desperdiçadas em uma impressora de alta velocidade".
É totalmente possível solicitar a impressão com os dados padrão usados.
Em termos mais genéricos, significa que:
Você tem um valor padrão, que pode realmente ser válido,
Você não deseja que os usuários apertem o botão "Imprimir" com valores padrão mantidos por engano, enquanto pretendem alterá-los.
Aqui estão algumas técnicas que você pode tentar:
1. A mágica desfazer
Sim, os usuários estão em um ambiente crítico de tempo. Sim, uma vez que a impressora começa a imprimir, ela não pode ser parada. Mas ainda há algo que você pode fazer.
Mesmo em um ambiente de tempo crítico, as chances são de que a impressão no momento e a impressão em cinco segundos não mudem nada.
Quando o usuário clica em "Imprimir", exibe um pequeno botão "Desfazer" , assim como o GMail faz quando você solicita a remoção, por engano, de todos os seus e-mails. Aguarde cinco segundos ². Oculte o "Desfazer" e somente depois imprima.
Agora, o usuário tem a chance de perceber o erro e cancelá-lo antes que o dano seja causado, enquanto o material é impresso apenas com um pequeno atraso de cinco segundos.
2. O plano de fundo discreto do "valor padrão"
É suspeito ter valores padrão? ³ Com um valor, raramente é suspeito. Com três, há chances de que os casos em que o usuário precise manter todos os três valores por padrão sejam bastante raros.
Nesse caso, você pode:
Destaque o valor quando ele tiver seu valor padrão. Não em vermelho: vermelho é para valores inválidos. Defina-o como amarelo-laranja e volta a branco quando o usuário altera o valor padrão.
Ou desative o botão "Imprimir" até que um valor seja alterado. Adicione uma caixa de seleção próxima, que o usuário pode verificar para confirmar que sua intenção é imprimir com valores padrão.
3. Melhore a interface do usuário dos seus controles
Estamos sexta-feira, 6 º de janeiro 2012 hoje. Qual será a data da próxima quinta-feira? Rápido, rápido, você está sob pressão, você tem apenas um segundo para sua resposta. Além disso, você está cansado e há muito barulho por toda parte. Não é fácil responder, não é?
As pessoas não podem manipular datas facilmente quando está escrito como
1/8/1012
.Saturday, 7th of January (tomorrow)
é um pouco mais fácil. Uma visualização gráfica que destaca sábado e domingo, mostra hoje e o deslocamento é ainda melhor.Nada é tão feio quanto "Localização: Nova York". Essas três letras não fazem sentido quando você está cansado e trabalha em um ambiente estressante; erros são fáceis. Em vez disso, um mapa gráfico dos Estados Unidos mostrando um ponto vermelho para a cidade de Nova York é muito mais atraente, e o usuário tem muito mais chances de perceber que, enquanto ele queria selecionar São Francisco, o ponto vermelho parece aparecer em um lugar errado .
Você gostaria que o seu GPS dissesse que você precisa mudar de 38.90403, -77.04878 para 38.90568, -77.04665, depois vire à direita e vá para 38.90565, -77.04345, depois vire 90 ° à esquerda e vá para 38.90660, -77.04345? Você seria capaz de se concentrar no seu trabalho (na estrada)? Mostrar 1/8/2012 e Nova York a usuários ocupados é tão amigável quanto um GPS que gera coordenadas brutas em vez de uma visualização 3D de um mapa cheio de cores.
Ao fornecer controles mais ricos e uma visualização mais rica dos dados , você pode diminuir o nível de erros de seus usuários em um ambiente estressante.
A propósito, isso se aplica a outras variantes de caixas de diálogo. Você já fez uma pergunta sobre as caixas de diálogo em que os botões serão aleatórios e que dificultam o descarte. Infelizmente, essa abordagem não ajuda, mas apenas prejudica: os usuários ainda descartam o que é dito pela caixa de diálogo, mas perdem mais tempo tentando fechá-la para voltar ao trabalho.
² digo cinco segundos como exemplo. Você precisa monitorar a atividade dos usuários por alguns meses para ver com que rapidez eles clicam em "Desfazer". Provavelmente, estará abaixo de um segundo. Se você vir que o atraso é de 0,6 a 1,8 s. com uma média de 1,1 s., você pode mostrar o "Desfazer" por dois segundos e depois imprimir.
³ Por favor, por favor, diga não! Porque, se estiver, significa que há algo errado com seus valores padrão. Por exemplo, se o valor padrão da data é hoje, enquanto em 75% dos casos, os usuários precisam defini-lo para amanhã, 10% para ontem e 10% para o dia depois de amanhã, você deve definir o padrão valor para amanhã.
fonte
Você pode determinar antes de imprimir quantas páginas serão impressas ou de alguma outra maneira medir o tamanho da saída? Nesse caso, determine um tamanho máximo para uso normal e, se for maior, use uma caixa de diálogo de confirmação que indique o tamanho da saída e, para que não possa ser descartada sem a leitura, exige que o usuário digite novamente o tamanho da saída para confirmar.
fonte
Separe claramente os casos de uso. Há um caso "imprima algo agora" que pode levar a uma saída sem fim. Corrija isso para fornecer todos os padrões corretos.
Há um caso de "reimprimir alguma coisa anterior" que é uma solicitação especial (não padrão) em que as entradas podem ser verificadas com cuidado.
Falso.
A entrada pode ser configurada automaticamente hoje, sem nenhum efeito em solicitações frequentes de impressão traseira.
Qual o impacto possível de uma configuração automática para "data de hoje" nas solicitações de impressão traseira? Enumere-os na pergunta.
Falso.
Reimpressões e impressões traseiras são um caso especial. Eles nunca têm campos padrão e são a exceção, não a regra.
fonte
Permita-me reafirmar o problema.
Estado atual: pressionar cegamente Enterfaz com que resmas de papel sejam impressas.
Estado desejado: pressionar cegamente Enternão faz com que resmas de papel sejam impressas.
Solução: altere o software para que pressionar cegamente Enterfaça alguma coisa , além de causar a impressão de resmas de papel.
Isso praticamente deixa você com o problema do que deveria fazer. Pessoalmente, eu perguntaria aos operadores o que eles querem. Meu palpite é algo como imprimir as faturas mais urgentes que ainda não foram impressas. Deixe a capacidade de imprimir tudo, mas exija uma decisão consciente para fazê-lo.
fonte
Você tem uma situação em que o padrão atual do processo está criando desperdício e tempo de custo para seus usuários.
Desative a capacidade de pressionar Enter até o fim, mantendo o foco no botão "Redefinir parâmetros" (crie um, se necessário), para que, ao pressionar Enter, ele permaneça na tela, mas não faz nada. Eu criaria algum tipo de botão de atalho para as seleções mais comuns para preencher automaticamente o formulário com esses parâmetros para ajudar os usuários. Mas isso deve resolver seu problema, mesmo sem os botões de atalho.
fonte