*Artigo escrito por Fernando Seguim, Head de Engenharia e Produtos do Bankly
Com a transformação digital em andamento e a necessidade crescente de soluções de TI robustas e eficientes, o papel dos profissionais de produtos - Product Owners (POs), Product Managers (PMs) e Product Designers (PDs) - está evoluindo rapidamente. Eles agora estão diretamente envolvidos em aspectos técnicos do desenvolvimento do produto, como o design das APIs que servirão para integração do Backend com o Frontend e a definição de quais eventos os sistemas deve produzir para atender aspectos de rastreabilidade, observabilidade e até mesmo gerar insights para o negócio.
Este artigo fornece uma visão abrangente dessas metodologias e como elas podem ser efetivamente implementadas por profissionais da área de produtos.
API Design: boas práticas no desenvolvimento de APIs
Profissionais de produtos não precisam se tornar especialistas em API, mas entender os conceitos básicos pode ajudá-los a se comunicar efetivamente com as equipes de desenvolvimento e garantir que as APIs atendam às necessidades dos clientes que integrarão com elas. Alguns aspectos importantes na hora de pensar no design de uma API são a estrutura dos dados, a forma como as informações são recuperadas e manipuladas, a segurança e a eficiência.
O API Design é o processo de criação de APIs, que busca conhecer as personas que utilizarão as interfaces, definir o domínio do problema a ser resolvido, os endpoints, métodos e contratos de requisição e resposta e testes de validação de hipóteses através de mocks antes mesmo de colocá-las na esteira de desenvolvimento.
Identificar quem vai usar a API é crucial para projetar uma API que atenda às suas necessidades. Isso pode incluir desenvolvedores internos, terceiros, ou até mesmo o público em geral se a API for pública. Compreender as necessidades e restrições desse público pode ajudar a informar decisões sobre funcionalidade, estrutura, protocolos de segurança, idioma das propriedades, mensagens de erro e documentação.
Usar técnicas de modelagem de domínio, como a modelagem de entidade-relacionamento (ER model), Design Orientado pelo Domínio (DDD), Modelagem Orientada a Objetos (OOM), para entender e representar as entidades do domínio e como elas interagem, definir uma linguagem ubíqua e coesa entre a área de negócios e tecnologia pode ajudar a dar clareza sobre o domínio do problema que a API está tentando resolver, suavizando a curva de entendimento na hora do desenvolvimento.
Abaixo temos um exemplo de modelagem orientada a domínio:
Exemplo de Modelagem Orientada ao Domínio
Ser capaz de definir os endpoints e métodos da API, em que cada endpoint deve representar uma entidade distinta ou um conceito no domínio do problema. Empregar de forma adequada os métodos HTTP comuns como GET (para recuperar dados), POST (para criar dados), PUT (para atualizar dados existentes) e DELETE (para remover dados), pode garantir que as APIs se tornem mais expressivas, seguras, eficientes e padronizadas, proporcionando ao desenvolvedor = uma experiência de uso mais intuitiva, consistente e confiável, além da fácil integração com outros sistemas ou aplicações.
O contrato de API define a forma como ela se comportará e como os desenvolvedores podem interagir com ela. Isso inclui o formato dos payloads de requisição e resposta, os códigos de status HTTP que a API retornará em caso de sucesso e falha, e a forma como ela lidará com erros.
Exemplo de API Design completo usando Postman
Uma vez que a API está projetada, é crucial testá-la antes mesmo de iniciar o seu desenvolvimento. Para isso, técnicas como Mocks e Stubs que simulam o comportamento da API em cenários de sucesso e falha ajudam a validar a usabilidade e o quão complexo será a integração.
Estabelecer uma estratégia de versionamento adequada para sua API é fundamental para orientar sua evolução e minimizar impactos decorrentes de alterações contratuais. O Versionamento Semântico (SemVer) é uma abordagem eficaz que utiliza um formato de três números (major.minor.patch) para indicar, respectivamente, mudanças significativas, introdução de novas funcionalidades e correções de erros.
Essa estratégia oferece um significado aprofundado para cada tipo de alteração, tornando o processo de versionamento mais robusto e preciso. Há também outras estratégias, como o Versionamento por Data, que geralmente reflete a data de lançamento da versão, e o Versionamento por Revisão, que incrementa um único número a cada mudança substancial na API. Contudo, esses métodos tendem a fornecer menos detalhes sobre a natureza das mudanças se comparados ao SemVer. Além disso, definir como a versão da API será informada, via URL, Header ou Query String, ajudam tanto na rastreabilidade, como na flexibilidade no uso das APIs.
Exemplo de versionamento semântico
Event Storming: o que é?
O Event Storming é uma técnica de modelagem e exploração do domínio que se concentra na descoberta e mapeamento de eventos (ou seja, algo que acontece em um sistema) para ajudar a entender o fluxo de negócios, os processos e as interações entre diferentes partes de um sistema. É um método interativo e colaborativo, semelhante a um brainstorm, que ajuda as equipes a obterem uma visão compartilhada do sistema e a identificarem potenciais problemas ou melhorias.
Assim como no API Design, o Event Storming se utiliza de técnicas semelhantes de design, passando desde a definição dos nomes dos eventos, para que expressem com clareza o que aconteceu no sistema, até os dados que serão compartilhados, visando a confiabilidade e seguranca da informação.
Antes de passar pelas técnicas que ajudam a facilitar uma sessão de Event Storming, é importante compreender os tipos de eventos que os sistemas podem gerar e com isso tirar melhor proveito deles. São eles:
- Eventos de domínio: são eventos significativos que acontecem dentro do domínio do negócio e geralmente são resultado de ações do cliente ou mudanças no estado do sistema. Esses eventos são expressos no passado, como "Conta Criada" ou "Cadastro Aprovado", por exemplo.
- Eventos de notificação: são gerados quando há interações entre diferentes sistemas. Geralmente o sistema que emite o evento não aguarda uma resposta do consumidor. Esse tipo de evento é bastante útil para aumentar o desacoplamento entre sistemas e viabiliza fluxos de trabalho mais coreografados. Um exemplo pode ser “Cadastro Aprovado”, em que o consumidor e outros componentes do sistema receberão esse evento e iniciarão uma próxima etapa do fluxo de trabalho. Todavia, o sistema emissor do evento pode querer receber uma confirmação ou uma resposta do consumidor, criando um acoplamento necessário, para dar sequência em fluxo de trabalho integrado onde há um orquestrador gerenciando o processo. Um exemplo disso pode ser um sistema de transação financeira, em que a transação é enviada para análise e aguarda uma resposta dessa análise para concluir seu fluxo de trabalho.
- Eventos de mudança de estado: são eventos que ocorrem quando o estado de uma entidade no sistema muda. Por exemplo, quando um cliente altera o seu endereço cadastrado, e o sistema, após registrar a informação em seu banco de dados, publica um evento para que sistemas consumidores conheçam o novo estado da entidade. Esse tipo de evento viabiliza que os sistemas tenham maior desacoplamento e sejam mais autônomos na execução de seus fluxos de trabalhos.
Conhecer e saber cominar esses 3 tipos de eventos é fundamental para criar uma estratégia de eventos que atendam às necessidades do negócio. Mas retomando ao Event Storming, essa técnica é projetada para ser eficiente, interativa e, por que não, divertida. Ao reunir os principais participantes na mesma sala (física ou virtual), o Event Storming tem a vantagem de ser rápido, simples, engajador e eficaz.
Definir as pessoas certas para participar da sessão de Event Storming é parte vital para o sucesso da interação. Essas pessoas saberão fazer as perguntas adequadas e/ou terão as respostas necessárias para as questões levantadas. Esse grupo provavelmente será uma mistura de partes interessadas que representam experiência do cliente, negócios, arquitetura, desenvolvimento e segurança da informação.
Explorar o domínio do negócio é a etapa principal da sessão. Nesta etapa, o grupo de participantes irá analisar e compreender o domínio do negócio para revelar o processo de forma abrangente. Existem três componentes principais que devem ser explorados: eventos de domínio, comandos, entidades e agregados.
Exemplo após identificar os principais comandos e eventos do fluxo de trabalho, destacando os eventos de domínio
Geralmente, um evento tem sua origem a partir um comando que cria ou altera o estado de uma entidade — existe uma máxima que sugere "um comando gera um evento". Traçar esse mapeamento proporcionará uma visão mais clara do fluxo de trabalho. Por outro lado, a identificação dos agregados pode revelar as dependências externas necessárias para a conclusão bem-sucedida do fluxo de trabalho. Esta abordagem integrada facilita a compreensão do funcionamento geral do sistema.
Exemplo após identificar os comandos, os eventos, a entidade os usuários e sistemas envolvidos no fluxo de trabalho
Conclusão
Combinar as práticas de API Design e Event Storming pode gerar resultados significativos, proporcionando compreensão entre as partes interessadas e facilitando a disseminação do conhecimento adquirido. Além disso, resulta em uma documentação clara e permite uma implementação voltada para o design orientado a domínio.
Em suma, ambas as práticas podem potencializar significativamente o trabalho de profissionais de produto na era da transformação digital. Eles equipam esses profissionais com as habilidades e ferramentas necessárias para contribuir ativamente no desenvolvimento técnico de produtos, ao mesmo tempo que melhoram a comunicação e colaboração entre as equipes técnicas e de negócios.