1. 10 princípios de design para aplicativos distribuídos de Blockchain
Ethereum For Dummies

Por Michael Solomon

A tecnologia Blockchain é uma abordagem transformadora e disruptiva à maneira como gerenciamos dados. Ele promete mudar radicalmente a maneira como realizamos tarefas que lidam com informações confidenciais em ambientes compartilhados. Historicamente, operações críticas em dados confidenciais exigiam uma autoridade central forte para convencer os proprietários dos dados a confiar no ambiente o suficiente para permitir o gerenciamento de seus dados.

Um dos obstáculos mais difíceis que todo dApp de blockchain deve superar é criar confiança. Os usuários precisam confiar que o software em execução na blockchain inclui medidas sólidas para fornecer segurança e proteger a privacidade antes de fornecer dados pessoais e comerciais confidenciais.

Você pode percorrer um longo caminho para construir essa confiança seguindo várias diretrizes básicas de design. Se você seguir as dez metas de design para aplicativos blockchain encontradas aqui, ajudará os usuários a confiar no seu aplicativo o suficiente para usá-lo e confiar nele.

Projete aplicativos blockchain para confiança

Uma das principais razões pelas quais as organizações adotam soluções de blockchain é sua capacidade de compartilhar dados entre nós que não confiam uns nos outros. Se você pensar bem, isso realmente define um nível alto para os desenvolvedores de dApp. Para desenvolver um dApp bem-sucedido, você precisa convencer seus usuários a confiar no seu software com os dados deles, ao enviá-lo para um grande número de outros nós nos quais você não confia (e eles também não).

A confiança é normalmente (mas nem sempre) transitiva. (Sim, você voltou para a aula de matemática. Se A = B e B = C, então A = C. De nada.) Essa é a maneira mais comum pela qual nós, humanos, lidamos com confiança.

Se você confia em Mary e Joe confia em você, Joe provavelmente está bem em confiar em Mary. Vamos supor que você é um crítico de comida. Joe confia que você recomenda boa comida. Se você postar que realmente gosta da torta de pêssego de Mary, é mais provável que Joe experimente a torta de pêssego, já que Joe confia no seu gosto pela comida. Mas isso não acompanha um ambiente sem confiança. No caso de dApps de blockchain, seus usuários confiam em você, mas você não confia nos outros em sua própria rede blockchain.

Seu primeiro objetivo de design é um objetivo de alto nível que você deve manter como um motivador de destaque para todas as decisões. Muitos dos objetivos de design subseqüentes suportam este: Crie seus dApps com confiança. Esse objetivo significa que você deseja considerar o que seus usuários querem e o que os faz sentir que podem confiar no seu dApp.

Os usuários precisam saber que você cuidará dos dados deles. Seu dApp não deve ocultar nada e deve facilitar o controle do que está acontecendo. Deve comunicar claramente informações boas e ruins e proporcionar uma sensação geral de bem-estar. Embora seja uma tarefa difícil para o software, é necessário criar confiança.

O aspecto mais importante do design por confiança é entender quem são seus usuários e o que os faz sentir-se confortáveis. Em resumo, conheça seus usuários. Saiba o que eles querem e como você pode convencê-los de que não vai perder tempo ou tirar proveito da confiança deles em você.

Aplicar consistência em aplicativos blockchain

Uma das maneiras mais fáceis de evitar confusão é limitar as opções e experiências conflitantes em seus dApps. A Microsoft aprendeu há muito tempo o poder da consistência. Eles desenvolveram padrões para interagir com os usuários e exploraram e definiram todos os aspectos da criação de uma interface do usuário. É por isso que os aplicativos da Microsoft se parecem um com o outro.

Se você usou um aplicativo da Microsoft, reconhecerá pelo menos a interface geral do usuário em outros aplicativos da Microsoft. (E se você usa os produtos da Microsoft há algum tempo, lembra-se da enorme interrupção que a Microsoft causou quando eles se converteram em uma interface de usuário baseada em blocos - principalmente porque todos estavam tão à vontade com a interface herdada da Microsoft.)

Por exemplo, se você deseja encontrar a versão atual de um programa do Windows em execução, quase sempre pode clicar ou tocar em Ajuda e, em seguida, clique ou toque no item de menu Sobre no menu Ajuda.

A imagem abaixo mostra o item de menu Sobre no VS Code. O item de menu Sobre existe em praticamente todos os aplicativos do Windows e mostra informações básicas, incluindo o número da versão, do programa que você está executando. Esse exemplo simples de consistência da interface do usuário facilita para qualquer pessoa encontrar informações sobre o aplicativo sem precisar procurá-las.

Código VS Ethereum

A imagem a seguir mostra a caixa de diálogo Sobre no VS Code. Você encontrará informações sobre a liberação da maioria dos aplicativos Windows clicando ou tocando em Ajuda → Sobre. Esse é o poder da consistência.

Caixa de diálogo Código VS Sobre

Seus dApps devem definir padrões claros para cada interação do usuário. Quando você solicitar que seus usuários forneçam informações, faça-o da mesma maneira em todo o seu dApp. Quando um usuário digita um ID do produto em vários locais, o campo de entrada deve ter a mesma aparência em cada local. Use as mesmas cores, fontes e método de entrada para dar ao seu dApp uma aparência consistente.

Outra área em que você encontrará consistência nos aplicativos da GUI são os atalhos de teclado. Você quase sempre pode usar Ctrl-C para copiar o texto destacado e Ctrl-V para colar esse texto em um novo local. Atalhos de teclado consistentes tornam ainda mais fácil aprender e usar o novo software.

Da mesma maneira, padronize toda a saída. Mensagens de erro e alertas são áreas principais para padronização. Quando possível, use as camadas comuns de entrada e saída, para que todas as entradas e saídas usem o mesmo conjunto de funções. Todo o dApp parecerá mais consistente.

Você está tentando incentivar seus usuários a continuar usando seu dApp. Um dApp que apresenta uma interface de usuário consistente é aquele em que a construção confia. A consistência também facilita para os usuários aprenderem a usar o software, e um aplicativo fácil de aprender é aquele que os usuários provavelmente preferirão e aceitarão.

Remova a dúvida dos aplicativos blockchain com transparência

Uma das razões pelas quais os usuários desconfiam de um aplicativo é que eles realmente não o entendem. Os usuários fornecem seus dados, mas não têm certeza do que acontece depois disso. Eles não sabem para onde vão os dados e se ainda estão em algum lugar do sistema. Esse sentimento de colocar dados em uma caixa preta pode ser ainda mais forte com os dApps do blockchain.

À medida que a tecnologia blockchain se torna mais popular, a conscientização geral de seus recursos aumenta. Isso significa que muitos de seus usuários saberão que o seu dApp envia seus dados para muitos outros computadores, potencialmente em todo o mundo. Um dos obstáculos que você terá que superar é convencer os usuários de que você está protegendo os dados confidenciais deles.

Comunique claramente quais dados seu dApp precisa, por que precisa de cada tipo de dados e o que você faz com ele. Você não precisará transmitir essas informações sempre que solicitar dados, mas elas deverão estar disponíveis na primeira vez em que você interagir com um novo usuário e sob demanda.

Você também deve facilitar a visualização dos usuários pelo que eles fizeram (e pelo que o dApp fez com os dados). Fornecer transparência a cada etapa dá aos usuários uma sensação de confiança.

Facilite para os usuários detalhar e obter a verificação de ações. Esse nível de transparência oferece aos usuários a confiança de que seu dApp está fazendo o que afirma fazer e pode reduzir a preocupação de que seu dApp esteja ocultando algo. Dependendo do nível de preocupação do usuário e de suas próprias diretrizes de design, é possível criar transparência em cada fluxo de trabalho ou em funções sob demanda para permitir que os usuários avançados detalhem à vontade.

Forneça feedback, orientação e definição de expectativas para seus aplicativos blockchain

O próximo objetivo de design que você precisa para seu aplicativo blockchain é fornecer feedback e orientação e definir expectativas. Esse objetivo é uma extensão lógica da transparência. Enquanto a transparência torna os detalhes das transações e do fluxo de trabalho prontamente disponíveis para os usuários, as configurações de feedback, orientação e expectativa colocam a transparência no fluxo de trabalho normal. Em vez de permitir que os usuários vejam o que aconteceu, você deve apresentar um feedback informativo a cada etapa significativa do fluxo de trabalho.

Por exemplo, se você é um fabricante e acaba de transferir a propriedade de um novo trator para um remetente, o novo dApp da sua cadeia de suprimentos pode lhe dar uma mensagem “Você acabou de transferir o trator com número de série ABC-12345 para Unified Shipping - número da transação 456778 . ”É claro que você provavelmente obteria mais detalhes sobre uma transferência de itens de capital, mas entendeu a ideia. O dApp forneceu feedback que diz essencialmente “Ei, bom trabalho. Aqui está o que você fez. ”O feedback informativo é o primeiro passo para convencer os usuários a confiar no seu dApp. O feedback dá a eles a garantia de que eles estão usando o software corretamente.

Você pode estender o exemplo de feedback para informar os usuários da próxima etapa também. No exemplo do trator, sua mensagem de feedback também pode incluir a mensagem "Deseja liberar o título agora?", Com a opção de clicar ou tocar em um botão para ir para a próxima etapa. Prompts de fim de tarefa como esse ajudam a garantir que os usuários entendam o fluxo de trabalho adequado e dê a eles a impressão de que o software os está ajudando a realizar seus trabalhos corretamente. Quando o software torna os usuários mais eficazes, ajuda bastante na construção da confiança. Todo mundo adora softwares que os fazem parecer bem!

Manipule erros em seu aplicativo blockchain com classe

Encare, erros acontecem. E às vezes esses erros são grandes. Espero que você tenha encontrado todos os grandes erros no seu software durante o teste. (Você testou exaustivamente, certo?) Se testou, a maioria dos erros encontrados na produção serão erros do usuário.

Quando você lida com erros do usuário, tente evitar notificações que digam sutilmente “Você errou!” Concentre-se em resolver a situação, sem colocar a culpa.

Você provavelmente se lembra de usar seu primeiro dispositivo GPS em um carro. Nos primeiros dias do GPS, se você se desviava da rota sugerida, ouvia uma mensagem bastante severa de "redirecionamento". A voz poderia muito bem ter dito: "Você não vai aonde eu te disse. Espere, eu vou lhe dizer como voltar ao que lhe disse em primeiro lugar. ”As mensagens de erro devem informar os usuários sobre o que aconteceu, mas focar no que fazer em seguida. Sim, o GPS fez isso, mas geralmente foi depois de uma sutil repreensão. Não censure seus usuários.

Por outro lado, não gaste muito tempo concentrando-se em erros. Mensagens de erro excessivamente detalhadas podem ser confusas e levar muito tempo para serem lidas. Vá direto ao ponto. Sempre projete o tratamento de erros da perspectiva do usuário. Dê aos usuários tudo o que precisam para responder rápida e decisivamente a erros e nada mais.

As mensagens de erro ajudam os usuários finais a entender o que está acontecendo e também ajudam o pessoal de suporte na solução de problemas. Projete seu sistema de mensagens de erro para que ele forneça as mensagens necessárias do usuário, bem como mensagens mais detalhadas sob demanda para solução de problemas e investigações.

Lembre-se de que o blockchain é imutável, portanto, quaisquer erros que o transformem em um bloco sempre estarão lá. Seu dApp deve resolver problemas do usuário com os dados antes de armazená-los no blockchain. O truque para lidar com os erros é orientar os usuários para a solução certa sem diminuir a velocidade. Isso requer atenção sobre quem são seus usuários, como eles usam seu dApp e o que eles precisam para resolver um problema. Um dos seus objetivos de design deve ser o tratamento de erros que atenda às necessidades de seus usuários em todos os casos.

Crie funções no seu aplicativo blockchain focadas em ações do usuário, não em dados

As funções fornecem as ações de seus contratos inteligentes. Uma maneira de analisar os contratos inteligentes é que eles são compostos de dados (substantivos) e ações (verbos). A estruturação de contratos inteligentes dessa maneira facilita a descrição e o design deles, e geralmente resulta em um aplicativo que flui bem da perspectiva do usuário.

Como todos os aplicativos existem para atender aos requisitos de alguns usuários, faz sentido projetar software à luz do usuário. No nível mais alto, se um usuário deseja criar um novo pedido, você deve começar com uma função chamada createNewOrder (). Você pode mudar as coisas ao refinar seu design, mas começar pela perspectiva do usuário ajuda a manter a autenticidade com os objetivos do software. Projetar componentes técnicos que atendem às metas do usuário também ajuda a evitar desviar-se muito das metas funcionais de alto nível.

Muitas das organizações de desenvolvimento de software de hoje dependem de métodos que começam com histórias de usuários. Como desenvolvedor, você será solicitado a produzir um software que atenda a um requisito que se parece com "Como usuário, eu quero ____". Iniciando seu contrato inteligente com uma função que corresponde ao que os usuários desejam fazer (ou seja, o preenchido (em branco da declaração anterior), é uma boa estratégia de design para criar software fácil de usar.

Todas as funções não precisam ser mapeadas diretamente para as ações do usuário, mas suas funções de alto nível devem satisfazer as histórias do usuário. Você sempre precisará de funções orientadas a tarefas ou orientadas a dados de nível inferior para executar as etapas técnicas de qualquer tarefa. Tudo bem se essas funções não forem mapeadas diretamente para histórias de usuários. Mas todas as suas funções de nível inferior devem desempenhar um papel nas funções com as quais os usuários interagem. Como regra geral, suas funções públicas devem se parecer muito com as respostas da história do usuário.

Armazene dados do aplicativo blockchain com base em ações do usuário, não em estruturas de dados

Os usuários podem não interagir diretamente com os dados, mas você ainda deve tentar organizar os dados com base nos requisitos do usuário. Esse objetivo geral é mais uma regra de ouro. Use essa meta ao projetar inicialmente seus requisitos de dados de contrato inteligentes. Você provavelmente precisará refinar o design e alterá-lo, mas começar com os dados mapeados para as solicitações do usuário ajuda o software a permanecer fiel aos requisitos do usuário.

Por exemplo, se você estiver projetando um software para criar e manter pedidos, comece com uma instrução struct Solidity que defina um pedido da maneira que um usuário a vê. Um pedido pode ser uma coleção de campos que o descrevem, como número do pedido, data do pedido, pedido do cliente, instruções e uma lista de linhas do pedido. As linhas da ordem contêm campos como número do produto, preço e quantidade. Você pode definir isso como uma estrutura de variáveis ​​e uma lista de estruturas de linha de pedidos.

Independentemente dos detalhes técnicos de como você define os dados, o principal objetivo desse objetivo é considerar como os usuários usarão os dados e tentar apresentá-los dessa maneira. Se você fizer pedidos diretamente disponíveis aos usuários para promover a transparência em seu software, deseje facilitar o acesso possível aos pedidos. Você não deseja promover a transparência e, em seguida, fazer com que os usuários trabalhem duro para descobrir o que seus dados significam. Facilitar o acesso e a compreensão dos dados criará ainda mais confiança.

Mantenha seu aplicativo blockchain simples

Você tem muitas coisas a considerar ao criar um dApp. Embora o foco nos usuários deva ajudar a direcionar as decisões de design, a tendência é tentar atender a todas as necessidades dos usuários. Se desmarcado, esse desejo de fazer tudo tornará seu software excessivamente complexo e difícil de usar. Oferecer muitas opções aos usuários parece um bom objetivo a princípio, mas um usuário sobrecarregado não vai gostar (ou usar) do seu software.

O ditado de uso geral "seja simples, estúpido" ainda é relevante. É um lembrete severo de que a simplicidade é muito mais inteligente que a complexidade. Você pode ter ouvido falar que "uma mente confusa sempre diz não", mas deseja que seus usuários aceitem e usem seu dApp. Você quer que eles descubram que seu software os torna mais eficazes e eficientes. Para atingir esses objetivos, você precisa entender e usar o software com facilidade e clareza.

A simplicidade começa com a interface do usuário, mas não para por aí. Todos os aspectos do design funcional e dos dados do seu aplicativo devem ser o mais simples possível. Não tente fazer demais. Em vez disso, determine o que seus usuários precisam e desejam mais e faça isso. Priorize a funcionalidade que destacará o seu software. Mantê-lo simples exige mais trabalho, mas geralmente resulta em um produto consistente e focado que os usuários usarão.

Espere que o acesso à blockchain seja caro

Outro objetivo de design útil que o ajudará a evitar o retrabalho pós-desenvolvimento é fingir, desde o início, que o armazenamento de dados no blockchain é caro. Porque na realidade é. Para muitos que começaram a programar quando o Y2K estava longe no futuro, o armazenamento é muito mais barato hoje do que costumava ser. Hoje, a maioria dos desenvolvedores não precisa se preocupar com o tamanho dos dados ou com onde armazená-los. Blockchain está mudando tudo isso. Agora, em vez de ter toneladas de armazenamento barato e rápido disponíveis, você deve pagar conforme o uso.

Armazenamento caro não é algo novo na blockchain, mas pode ser fácil esquecer. Se você se lembrar de que o armazenamento é caro logo no início, é mais provável que pense nas opções de armazenamento mais detalhadamente.

Por exemplo, você precisa armazenar a cidade e o estado para onde o produto será enviado? Cidade e estado dependem do CEP (ou código postal em configurações mais genéricas). Você pode armazenar o CEP no endereço de entrega e procurar a cidade e o estado correspondentes usando uma API on-line em tempo de execução.

Separar dados, como o exemplo do código postal, pode não fazer sentido para o seu aplicativo, mas você sempre se beneficiará de pensar nas opções de armazenamento de dados. As opções de armazenamento mais caras são quase sempre o resultado de um planejamento ruim do projeto. Não crie dApps de blockchain da mesma maneira que cria aplicativos de banco de dados tradicionais. Eles simplesmente não são os mesmos. Crie uma mentalidade diferente e você terá um produto de software melhor.

Fique fora do caminho do usuário do aplicativo blockchain

Um bom aplicativo de blockchain atende às necessidades mais importantes dos usuários de uma maneira que os ajude a ser mais eficazes e eficientes. No entanto, seu design deve considerar não apenas o que seu aplicativo faz, mas também o que ele não faz.

Todo aplicativo tem restrições e limitações. Essa meta de design concentra-se em outra coisa que seu aplicativo não faz: não atrapalha o usuário. Simplificando, seu aplicativo deve ajudar os usuários, não diminui-los. Sua interface com o usuário deve ajudar os usuários a realizar seus trabalhos, e as transições entre os elementos da interface com o usuário devem ser intuitivas e instrutivas quando necessário.

Às vezes, você precisará coletar dados dos usuários e armazená-los na blockchain. (Você se lembra que isso é caro, certo?) Como você sabe que fará com que os usuários paguem para armazenar dados na blockchain, não os faça esperar por isso também. Sempre que possível, permita que seus usuários façam algo produtivo enquanto a função que manipula seus dados opera em segundo plano. Este pode ser um bom lugar no seu código para usar eventos.

Faça tudo o que puder para evitar se tornar um obstáculo para seus usuários. Ninguém gosta de esperar. Projete com pensamento e seu produto terá uma chance muito maior de atender às necessidades de seus usuários.