Escrito por Equipe Pagi - ilegra,
5 minutos de leitura
Transformação digital no software: o que você precisa saber?
Desde a organização e composição de equipes até a escolha de tecnologias, saiba o que você precisa para realizar a transformação digital no software da sua empresa.
Quando ouvimos falar de empresas bem sucedidas, imaginamos uma organização impecável e com excelência na execução de processos. Ainda que verdadeiro, essa excelência na execução passa por um tempo elevado para realizar tarefas comuns como reembolso de despesas de viagem ou assinatura de contratos. Por essa razão, as empresas têm buscado digitalizar seus processos utilizando softwares para dar maior agilidade às suas rotinas e, como consequência, aumentar a produtividade.
A construção de um software deve ser considerada como um projeto de médio a longo prazo, de forma que ela exige o envolvimento de diferentes profissionais, cada um cumprindo um papel importante em cada fase do projeto.
Para iniciar, sugerimos montar uma equipe de Arquitetos e de Engenheiros. Eles estarão ouvindo a área de negócios sobre suas necessidades e expectativas e trabalharão nas definições de como as coisas deverão funcionar, disponibilizando para os demais profissionais as funcionalidades que o software terá.
Na sequência, é importante incrementar o time com profissionais focados na experiência do usuário, pois eles serão capazes de projetar a interface que o usuário final do software vai receber e, assim, as áreas de negócios, de arquitetura e de engenharia poderão realizar as mudanças necessárias e seguir com o projeto.
A partir daqui, entendemos que será preciso criar uma área que esteja preocupada com o todo, sempre visualizando o que melhor servirá ao software, avaliando sugestões, bem como possibilitando compartilhar os casos de sucesso entre as áreas. Além disso, começam a ser criados times que se especializam em determinadas áreas do software.
Ao time que está preocupado com o todo daremos o nome de ENTERPRISE. Nele teremos pessoas para realizar a Arquitetura da Solução, a Arquitetura e a Engenharia do Software para Backend, a Arquitetura e a Engenharia do Software para Frontend, e a Arquitetura e a Engenharia do Software para Mobile. Neste time, é importante que o perfil profissional seja de pessoas mais experientes, pois assim acredita-se que o processo de construção poderá ser mais assertivo. Este time também deve ser composto por uma pessoa para trabalhar como Agilista, uma como Engenheira DevOps, uma para Administração de Banco de Dados (DBA), uma para UX Design e uma para UX Research.
Uma vez que temos um time ENTERPRISE, teremos agora os times que irão trabalhar nos módulos do software. O foco aqui serão atividades estritamente relacionadas ao módulo em que se está trabalhando, e qualquer sugestão que possa servir a outros times deve ser discutida com o time de ENTERPRISE. Dessa forma, é possível otimizar recursos e acelerar o desenvolvimento.
Para cada módulo, sugerimos ter uma pessoa para realizar o papel de líder e fazer a comunicação entre a área de negócio, time de ENTERPRISE e time de desenvolvimento. Essa pessoa será tratada como dono do produto (PO) e precisará ter no seu time uma pessoa para o desenvolvimento do backend, uma para o desenvolvimento do frontend e uma para o desenvolvimento mobile, além de ter uma pessoa para análise de qualidade (QA).
Destaca-se que o time de ENTERPRISE será único, enquanto os times de módulos multiplicar-se-ão conforme a necessidade e o escopo do software. Tendo em vista que alguns dos termos que foram apresentados até aqui foram explorados de uma forma superficial, nas próximas seções serão exploradas as responsabilidades de cada profissional, bem como as tecnologias empregadas por estes.
ARQUITETO DE SOLUÇÃO
O arquiteto de solução deve ter uma visão macro do software e trabalhar em conjunto com a equipe de arquitetura de software para definir as soluções que devem ser utilizadas para atender às necessidades do software, entenda-se por soluções componentes de nuvem pública: soluções IaaS, SaaS e PaaS.
ARQUITETO DE SOFTWARE
É responsável por definir qual estrutura o código-fonte terá, bem como de que forma deverá ser feita a comunicação entre os componentes, além de planejar as estruturas com foco em alta escalabilidade, disponibilidade e baixo custo. É necessário estar em permanente observação de tecnologias atuais e sempre buscar inovação junto ao time de Engenharia, a fim de transformar e melhorar a experiência do desenvolvedor no cotidiano.
ADMINISTRADOR DE BANCO DE DADOS (DBA)
Profissional responsável por administrar os bancos de dados utilizados pelo software, realizando tarefas como manter a base de dados segura, garantir a integridade dos dados, atualizar ou migrar sistemas de gerenciamento de banco de dados, orientar melhores práticas, garantir escalabilidade e disponibilidade, entre outras.
ENGENHEIRO DE SOFTWARE
É responsável por implementar e manter a estrutura do código-fonte definida pela equipe de arquitetura, bem como as integrações com os demais componentes do software.
Este profissional deve garantir que as entregas de software sejam de alta qualidade, escalabilidade e performance, mantendo os custos apropriados. Participando ativamente das definições de novas soluções e de arquitetura; é o ponto focal quando se trata de trazer inovações e melhorias para a empresa.
OPERAÇÕES
Este grupo de profissionais está preocupado com os requisitos não funcionais do software, ou seja, se o software está disponível para ser acessado a qualquer momento pelo usuário e de maneira que não haja problemas de segurança. Também verifica se os recursos utilizados estão respondendo de maneira rápida e eficaz. Além disso, o Engenheiro de Operações auxilia as equipes de desenvolvimento proporcionando automações no processo de disponibilização do código, tornando o trabalho mais produtivo, eficiente e escalável.
As ferramentas sugeridas para automação de tarefas são Jenkis ou TravisCI. Já para controle de autorização e autenticação, destaca-se Forgerock ou Keycloak. Para hospedar o software, podemos utilizar os provedores de nuvem Microsoft, Amazon ou Google, que disponibilizam de forma prática os serviços de conteinerização com Docker e Kubernetes. Para armazenamento e controle de alterações do código fonte do software, utilizamos ferramentas para hospedagem de repositórios Git como o GitHub. Além disso, utiliza-se ferramentas para avaliar a qualidade e segurança do software, como SonarQube ou Fortify, e, por fim, também existem ferramentas para monitorar o comportamento, segurança e performance do software, como Grafana, Dynatrace, OpenSearch ou Kibana.
UX DESIGN/RESEARCH
Profissional responsável pelo estudo e desenho da experiência do usuário ao interagir com as interfaces de software. O UX designer atenta ao design das telas, enquanto o pesquisador analisa o comportamento do usuário com o software por meio de metodologias como entrevistas ou testes de usabilidade, a fim de entender como tornar a experiência do usuário mais positiva e focar nas características do software que irão agregar valor a este usuário final.
PRODUCT OWNER (PO)
O product owner é um integrante do time que deve representar uma ponte entre o domínio do negócio e as demandas do time de desenvolvimento, de modo que seja necessário ter uma visão clara do produto. Ele é responsável por definir e manter o backlog do produto priorizado, garantir a execução de cerimônias como daily ou planning, além de comunicar a visão do produto para o time e garantir que as entregas sejam realizadas no prazo.
DESENVOLVEDOR BACKEND
O desenvolvedor backend é o profissional responsável pelo desenvolvimento dos processos internos do software, de modo que suas habilidades estejam concentradas em garantir que o software realize as operações desejadas de maneira ágil e segura, desenvolvendo mecanismos que recebem os dados e realizam o processamento. Este profissional não tem contato com as telas que o usuário final do software tem acesso.
Nessa área estarão os processamentos do software e toda a estrutura de armazenamento. Para tecnologias de processamento, sugere-se utilizar NodeJS ou Spring. Já para tecnologias de armazenamento dos dados, existem opções com foco em velocidade, como os bancos de dados não relacional MongoDB, Cassandra e Redis; e outras com foco em integridade, a exemplo dos bancos relacionais MySQL e PostgreSQL.
DESENVOLVEDOR FRONTEND
Atuar como uma pessoa desenvolvedora frontend exige uma compreensão de como receber os dados informados pelo usuário do software, enviar para a área de processamento (backend) e exibir o retorno desse processamento. Este profissional deve estar preocupado também com o dispositivo a ser utilizado pelo usuário para a correta captação e exibição dos dados.
Cabe à pessoa desenvolvedora frontend desenvolver as telas de acordo com os fluxos criados, configurar o projeto através de um bundler (ex.: Webpack), manter as telas responsivas e estilizadas, além de escrever testes unitários e testes de componentes.
Há também os profissionais que se especializam em desenvolvimento para dispositivos móveis: desenvolvedores frontend mobile. Estes se preocupam em desenvolver as telas de aplicações nativas para dispositivos móveis e seus sistemas operacionais, como Android e iOS.
Sendo esta a principal área onde o cliente interage com o software, é importante utilizar tecnologias que deem flexibilidade para atender às necessidades do usuário, principalmente em recursos visuais. Como sugestões podemos citar o TypeScript, além dos frameworks Angular ou Next.js e a biblioteca do React JS. Em relação ao desenvolvedor mobile, podemos citar Kotlin ou Java e React Native.
QUALITY ASSURANCE
Esse grupo é responsável por manter o software disponível para uso e automatizar tarefas, fornecendo maior produtividade e confiabilidade ao desenvolvimento do software. Garante a qualidade das entregas feitas pelos times de desenvolvimento de acordo com as solicitações realizadas pelo cliente. O profissional de Quality Assurance realiza testes de carga, estresse e escalabilidade, assegurando que todos os requisitos de negócio foram implementados de forma correta, sem bugs e anomalias.
O QA é referência em qualidade de software, e também contribui na análise de risco, estratégias de teste e na tomada de decisão, participando de todas as etapas do desenvolvimento de software.
Em relação às ferramentas, são sugeridas Jest e Testing Library (Frontend). Também é realizada a automação de testes funcionais e de performance para fornecer rápido feedback sobre a qualidade dos sistemas, a partir de ferramentas como Selenium, Appium, Gatling e Postman. Ocorre também a criação e gerenciamento de cenários e cobertura de teste com ferramentas como Zephyr Scale.
A transformação digital no software de uma empresa pode ser feita por fases, e, em cada fase, ocorre o incremento natural da equipe, agregando especialidades e reduzindo o tempo de entrega. Ao realizar esta transformação, mesmo antes da conclusão total do projeto, a empresa já pode experimentar ganhos de produtividade nas tarefas que passaram a ser processadas pelo novo software e consegue vislumbrar novas possibilidades para o software em construção. Contudo, esta não deixa de ser uma tarefa desafiadora, mas que pode ser facilitada com a contratação de uma consultoria para auxiliar em todo o processo, desde a contratação dos profissionais à execução das atividades de desenvolvimento.