Há alguns dias tive a oportunidade de participar do meu primeiro Tech Ready (TR). Em linhas gerais, o Tech Ready é um evento técnico interno realizado pela Microsoft Corp. que tem como objetivo primário treinar seus colaboradores nas mais diversas tecnologias da empresa. São duas edições durante o ano calendário: uma no início e outra no meio. Esta edição foi realizada em Seattle, WA.
Dentre as muitas coisas realmente legais que acontecem durante o evento, uma delas é o hackaton (obviamente, para evangelistas que mantém seu foco em desenvolvimento de software) no último dia de evento. Desta forma, eu, Marlon Luz, Vinicius Souza e o Daibert, formamos a equipe do Brasil nesta oportunidade. O hackaton tinha dois temas: “games” e “produtividade”. Optamos por produtividade.
Nossa ideia
Como estamos vivenciando uma epidemia de Zika Virus não apenas no Brasil mas, em diversas partes do mundo (com casos já registrados inclusive nos EUA), optamos por criar um complemento de email (para Outlook) para empresas que pudesse atuar como um advisor em relação a mensagens relacionadas a compras de passagens aéreas. Isto é, ao usuário trocar mensagens relacionadas a compras de passagens aéreas informando o código do aeroporto (GRU, por exemplo), o complemento deveria “ler” o email, encontrar ocorrências de aeroportos e consultar o risco de Zika Virus na(s) cidade(s) daquele(s) aeroporto(s) e informar ao usuário através de um alerta na própria mensagem:
- O nível de periculosidade de contaminação (a OMS já disponibiliza estes 3 níveis);
- Medidas reativas (como proceder) caso uma infecção ocorra;
Com isso, entregaríamos uma solução que além de se encaixar na categoria “produtividade” (um requerimento do hackaton), agregaria um valor real no dia-a-dia dos profissionais que precisam estar viajando com bastante frequência.
Além disso, outra exigência do hackaton era que todo o processo de desenvolvimento da solução fosse transacionado pelo VSTS. Desde de a definição das sprints e suas tarefas, passando pelo versionamento de código e chegando à entrega da solução nos ambientes de homolog e produção com CI e CD.
Observação: chamamos essa solução de “Zika Outbreak“.
Passo a passo da criação da solução
Como o tempo era curto, precisávamos ter foco e dividir bem as tarefas para que tudo pudesse ser realizado com qualidade e dentro do período regulamentar. Assim, nosso primeiro passo foi, juntos, desenharmos a arquitetura da solução. Não havia tempo pra gerar uma documentação formal, portanto, nosso desenho de arquitetura foi no OneNote mesmo. O resultado está apresentado na Figura 1.
Figura 1. Rascunho de arquitetura da solução “Zika Outbreak”
Acredito que uma explicação seja necessária, certo? 🙂
- O usuário recebe uma mensagem que possui ocorrência(s) de aeroporto(s). Por exemplo: GRU, SDU, CGH, etc.
- O complemento que pode ser local ou remoto (é uma app do Office 365, portanto, tanto faz) faz uma varredura na mensagem recebida e armazena em uma estrutura de dados volátil todas as ocorrências de aeroportos encontradas.
- O algoritmo do complemento então chama um serviço REST passando os aeroportos como parâmetro. O webservice então consulta o banco de dados da aplicação, faz as devidas verificações e então retorna as informações de Zika nas cidades dos aeroportos em formato JSON.
- O complemento então distribui os dados retornados no formato do alerta na mensagem e exibe para o usuário.
- Do outro lado existe uma aplicação web (em ASP.NET 5 com EF 7) que oferece um painel de gerenciamento das informações da base de dados. Assim, as informações do Zika podem ser atualizadas sempre que necessário.
Após definir a arquitetura e o “modus operandi” da solução, partimos pra execução.
Nossa primeira providência foi criar um projeto no VSTS (com repositório Git) e de lá dividir as tarefas entre os membros do time. Criamos as sprints com seus respectivos prazos para conclusão, adicionamos os backlogs, incorporamos os mesmos às sprints e finalmente, criamos e alocamos as tarefas. A Figura 2 abaixo ilustra este processo.
Figura 2. Backlogs divididos (e já entregues) no board do VSTS
A aplicação possuía duas verticais: client (ou frontend) e backend. Dessa forma, definimos os times que trabalhariam em cada uma delas, de acordo com a regra abaixo.
- Aplicação client
- Owner: Vinicius Souza
- Tarefas: Marlon Luz e Vinicius Souza
- Aplicação backend
- Owner: Fabrício Sanchez
- Tarefas: Osvaldo Daibert e Fabrício Sanchez
As tarefas também foram definidas dentro de cada sprint, conforme ilustra a Figura 3.
Figura 3. Tarefas de determinada sprint
Papéis e responsabilidades definidos, partimos (em paralelo) para a execução. Enquanto o Vini Souza e o Marlon Luz iniciaram os trabalhos com o frontend da aplicação, eu e o Daibert iniciamos a construção do backend no Azure. O passo-a-passo a seguir apresenta um resumo das atividades que seriam desenvolvidas em cada grupo:
- Frontend
- Criar o projeto de frontend utilizando o SDK de desenvolvimento do Office 365;
- Realizar as configurações exigidas pelo componente;
- Implementar a rotina de detecção dos aeroportos (optamos por utilizar expressões regulares para nos ajudar);
- Implementar a rotina de armazenamento dos aeroportos encontrados;
- Implementar a rotina de chamada do serviço de validação dos aeroportos;
- Implementar a rotina de callback e distribuição das informações no email;
- Elaborar layout de alerta no email para o usuário final;
- Testar exaustivamente o funcionamento da aplicação;
- Backend
- Criar um banco de dados no Azure SQL Databases;
- Popular este banco de dados com informações relevantes sobre o Zika Virus (recorremos a informações disponibilizadas no site da OMS);
- Criar um ambiente de hospedagem para o serviço de validação (optamos aqui pelo Azure App Service);
- Implementar os algoritmos de validação para o serviço e CRUD para interagir com o website administrativo (criamos um ASP.NET Web API);
- Publicar o serviço na estrutura recém criada;
- Testar exaustivamente o comportamento do serviço de validação e de CRUD;
- Implementar o website administrativo (ASP.NET 5);
- Testar exaustivamente o website administrativo;
- Criar o processo de CI e CD no VSTS;
Conseguimos implementar 95% de tudo aquilo que havíamos imaginado. Os 5% que não foram implementados (apenas o website administrativo) foi por uma questão de falta de tempo. Na verdade, iniciamos a construção do website entretanto, nosso tempo esgotou-se e apresentamos a solução quase completa, funcionando perfeitamente, entretanto, sem o website administrativo (que convenhamos, é um pequeno detalhe 😉 ). A Figura 4 apresenta o componente completamente funcional.
Figura 4. O complemento ativo na conta de email e funcionando perfeitamente
Recursos criados e implementações
Como já mencionamos anteriormente, para a construção desta aplicação, utilizamos o SDK de desenvolvimento do Office. Você pode saber mais sobre SDK seguindo o link abaixo. Mas em linhas gerais, todo o desenvolvimento é baseado em Javascript e isso é muito legal!
https://msdn.microsoft.com/EN-US/library/office/jj220065.aspx
O código fonte da solução está disponível integralmente no GitHub. Fique a vontade para analisá-lo (para fins de estudo) ou até mesmo para contribuir. Seria muito legal ter a comunidade nos ajudando a criar um add-on ainda melhor. O link para acessar o repositório encontra-se disponível a seguir.
https://github.com/fabriciosanchez/zikaoutbreak
Como já mencionei também, todos os recursos do backend “rodam” no Microsoft Azure. As Figuras a seguir apresentam os mesmos online e disponíveis para o “Zika Outbreak”.
Figura 5. O banco de dados que serve de repositório de informações para a solução (AlertsDB)
Figura 6. O Web App Service que hospeda a API REST da solução
Enfim, é isso. Não vencemos o Hackaton mas ficamos bem classificados. Além disso, uma grande lição pra gente foi entender melhor como estruturar soluções para o Office (365 e client) utilizando backends remotos. Dá pra fazer coisas realmente funcionais e poderosas.
Clone o repositório, veja o que fizemos e sugira (ou implemente você mesmo) as melhorias que gostaria de ver na solução. Assim que criarmos o website administrativo atualizaremos o repositório no GitHub.
Um forte abraço e até a próxima!
Facebook
Twitter
Instagram
LinkedIn
RSS