Logo Tech Writers

Tech writers

Esse é o nosso blog para apaixonados por tecnologia! Aqui, softplayers e outros especialistas compartilham conhecimentos fundamentais para o desenvolvimento dessa comunidade.

SEJA UM TECH WRITER
Plataforma SaaS: o que você ainda não sabe sobre ela!
Tech Writers Junho 20, 2022

Plataforma SaaS: o que você ainda não sabe sobre ela!

Você certamente concorda que o cloud computing está se tornando vital para as empresas. Neste contexto, uma enorme parcela de sua popularização no mercado se deve às plataformas SaaS, conhecidas como Software as a Service ou Software como Serviço. Para você ter ideia, 80% das organizações planejam ter todos os seus sistemas em SaaS até 2025, sendo que 38% já rodam suas aplicações quase que totalmente no modelo. Os dados são do DevSquad. Considerando que este segmento deve atingir US$143,7 bilhões ainda em 2022, segundo a Gartner, é fundamental que todo profissional de tecnologia fique atento às suas particularidades, desafios e tendências. É isso que abordaremos neste artigo. Acompanhe! O que você ainda precisa saber sobre a plataforma SaaS? Graças à rápida e crescente expansão do cloud computing, atualmente é mais prático, barato e rápido para os desenvolvedores SaaS implementarem suas aplicações do que seria no desenvolvimento tradicional de software, feito localmente. Como você já sabe, todas as tecnologias em nuvem são executadas via sistemas subjacentes. Entretanto, as plataformas SaaS dizem respeito especificamente aos aplicativos de negócios que operam via cloud. Atualmente, praticamente todas as ferramentas essenciais para as empresas são disponibilizadas por provedores de softwares SaaS. Tanto que essas aplicações podem ser encontradas em diferentes formatos, escopos e direcionamentos. Apesar dessa variabilidade, os sistemas SaaS quase sempre podem ser englobados em três categorias específicas. Descubra como cada uma delas se delimita e quais são os seus propósitos de mercado: SaaS colaborativo No caso das plataformas SaaS colaborativas, a finalidade é favorecer a atuação conjunta de times de profissionais, seja no mesmo ambiente corporativo ou de maneira remota. Portanto, sempre que você se deparar com um sistema em nuvem voltado à troca de mensagens, compartilhamento de arquivos e documentos, videoconferências, integrações de processos, entre outros semelhantes, isso é considerado um SaaS de colaboração. Mais uma vez, os exemplos são amplos. Eles incluem aplicativos de vídeo-chamadas como o Zoom, soluções web de gerenciamento de projetos como o Trello e assim por diante. Technical SaaS Por fim, os sistemas SaaS da categoria Technical são aqueles direcionados à realização, ao aprimoramento e à gestão de processos técnicos. Os exemplos são de softwares web que demandam aptidões técnicas para serem utilizados. Isso envolve aplicações como o Google Analytics, usado por profissionais de marketing, pacote Adobe online, usado por designers, Sienge, para gestores do segmento da construção, etc. Características principais do SaaS A maior vantagem das plataformas SaaS certamente é a possibilidade de rodar tudo via web. Ou seja, os usuários não precisam instalar os sistemas localmente e executá-los em seus dispositivos, o que barateia os investimentos iniciais com hardware. Somado a isso, os provedores são responsáveis por todas as demandas de desempenho, disponibilidade e segurança das aplicações. Mais que praticidade, isso também gera economia com questões como licenciamento e suporte. Muito além desses benefícios, os projetos e produtos SaaS têm mais características interessantes, que justificam sua atual popularidade. São elas: Arquitetura Multi Tenant A distribuição das plataformas SaaS se baseia em uma arquitetura Multi Tenant direcionada a todos os clientes. Isso significa que os usuários têm o mesmo código fonte e recebem automaticamente novas funcionalidades sempre que elas são adicionadas. Fácil personalização Mesmo com a arquitetura Multi Tenant, a grande maioria dos sistemas SaaS são personalizáveis. A intenção é atender melhor às demandas de cada usuário, sendo que nenhuma personalização afeta a infraestrutura. Fácil acesso Muito além do acesso a qualquer hora, de qualquer lugar e por meio de qualquer dispositivo conectado à nuvem, o SaaS ainda oferece o mesmo grau de funcionalidade dos softwares tradicionais, mas com custos muito menores. SaaS aproveita a Web do consumidor A facilidade que mencionamos acima também passa pelo fato de que as organizações podem acessar as aplicações e começar a utilizá-las imediatamente. Isso porque o acesso é direto pela web do cliente, sendo que o sistema já está prontamente instalado e configurado. Desafios do SaaS Indo além das questões de código, dos benefícios e das possibilidades das plataformas SaaS, é importante ressaltar que elas também possuem certos desafios. Como em qualquer tecnologia, há pontos relevantes de cautela para os profissionais, o que inclui: Questões além do controle do cliente Mesmo que os aplicativos possam ser personalizados, isso só é possível até certo ponto. As funcionalidades e recursos são limitados à arquitetura do sistema. Às vezes, essas ferramentas podem não atender completamente às necessidades específicas de cada empresa. Aumento do lifetime value Os clientes não compram o Software as a Service SaaS uma única vez. As assinaturas precisam ser renovadas para que os recursos continuem disponíveis. Portanto, os fornecedores devem manter os usuários engajados e interessados no valor das funcionalidades. Redução da taxa de churn O aumento do tempo médio que os usuários investem no produto está diretamente relacionado à diminuição da taxa de churn. Inovações surgem a todo momento na internet e, caso você não as acompanhe, o cliente pode não continuar comprando seu SaaS todos os meses ou anos. Aumento do ticket médio A escalabilidade é inerente às plataformas SaaS. Ou seja, os consumidores podem acessar mais ou menos funções de acordo com sua demanda. Nesse sentido, mais que aumentar o LFV e reduzir o churn, é preciso elevar o ticket médio com mais extensões úteis e atraentes. Tendências do mercado SaaS para o futuro Agora que você já conhece todas as características e oportunidades oferecidas pelas plataformas SaaS, é hora de voltar seus olhares para o futuro (que já está bem próximo). Afinal, este é um mercado que evolui rapidamente e que está repleto de novas soluções. Para se destacar perante os consumidores e manter relevância diante de tantas inovações, é fundamental ficar atento às tendências do segmento. Entre aquelas que já estão ditando os novos rumos da área, destacam-se: Modelos de pagamentos baseados em transações Como você pôde ver anteriormente, as plataformas SaaS geralmente são pagas em modelos de assinatura. Ou seja, o desafio é manter os pagamentos mensais e anuais dos clientes pelo maior tempo possível. Como o surgimento de novos sistemas e recursos é crescente, cada vez mais empresas da área procuram destacar-se ao oferecer flexibilidade para os consumidores. Isso significa que os formatos de assinatura estão sendo trocados pelo pay-per-use. Dessa maneira, os usuários devem pagar de acordo com sua demanda. A contrapartida é pelo tempo específico de uso e pelo nível de recursos utilizados. Inclusive, condicionar pagamentos maiores a ferramentas mais robustas aumenta as possibilidades de melhores precificações. Whatsapp e SaaS Ao contrário dos Estados Unidos e dos países da Europa, o Brasil tem entre seus principais meios de comunicação o WhatsApp. De acordo com uma pesquisa divulgada pelo Valor Investe, 80% da população usa o aplicativo para se comunicar com as marcas. Atentas a essa realidade específica do mercado nacional, cada vez mais organizações reconhecem a necessidade de se adaptar a essa preferência dos brasileiros, adequando os seus canais e abordagens. Nesse sentido, as plataformas SaaS já têm um volume crescente de funcionalidades integradas ao aplicativo. Isso inclui ferramentas de atendimento, vendas, prospecção, help desk, entre outras semelhantes. Se você chegou até aqui, provavelmente é porque sabe que todos esses conhecimentos sobre as plataformas SaaS irão somar à sua carreira. A Softplan valoriza profissionais com esse perfil e atua para que eles atinjam sua melhor versão. Quer ser o próximo Tech Writer do nosso time e nos ajudar a transformar a vida das pessoas? Clique aqui e confira nossas vagas!

Metodologias, métodos & processos de design!
Tech Writers Junho 06, 2022

Metodologias, métodos & processos de design!

Diariamente, nos deparamos com alguma atividade composta por etapas. Muitas vezes, não as enxergamos dessa forma por fazerem parte de nossa rotina. Mas pare para pensar por um momento no ato de lavar louças. Isso mesmo, lavar louças! Eu, particularmente, possuo uma ordem muito específica para escolher os itens que lavarei, ensaboarei, enxaguarei e colocarei em um secador para escorrer a água. A minha maneira de executar essa tarefa doméstica é muito diferente, por exemplo, de quem possui um lava louças.  Já conheci uma pessoa que fazia uma pré-lavagem dos pratos antes mesmo de colocá-los na máquina. Observe como esse é um exemplo simples, de uma rotina banal, onde encontramos processos diferentes para executar uma mesma ação.  Com essa simples metáfora, quero te fazer refletir sobre como podemos alcançar um objetivo por meio de diferentes processos. Nesse conteúdo, vamos falar sobre processos de design, suas etapas e particularidades.  Lavar a louça, uma rotina banal onde encontramos processos diferentes para executar uma mesma atividade. Conceito de processos de design Processos, a meu ver, são estratégias para esvaziar a mente e se organizar. São passos que seguimos para programar etapas e ferramentas, a fim de deixar o ambiente ao nosso redor preparado para resolver um problema ou executar uma atividade. Organizar os nossos passos gera clareza sobre o que precisamos fazer.  Processos de Design claros levam a caminhos simples e tranquilos na resolução de questões. Já métodos e técnicas adequados guiam o designer na descoberta da melhor maneira de resolver problemas e, no nosso caso, no desenvolvimento e melhoria de um produto. O processo deve ser um guia para enxergar o caminho onde o design pode seguir. Métodos de design Métodos de design são garantias da efetividade do processo e da entrega da qualidade do design. Ignorando a separação das áreas de atuação do design, seja ele industrial, de produtos ou gráfico, ao olharmos para o processo sempre vamos nos deparar com o “básico que funciona”.  Assim, “podemos fazer uma divisão de etapas formadas por informações, observações e reflexões que decorrem de uma investigação” (GERHARDT e SILVEIRA, 2009, p. 76). Dessa forma, podemos transformar esse conhecimento em um “relato escrito daquilo que o investigador ouve, vê, experiencia e pensa no decurso de um estudo qualitativo” (BOGDAN e BIKLEN, 1991, p. 150). Etapas dos métodos  O primeiro passo vem alinhado com um entendimento muito similar aos conceitos das técnicas de briefings comuns na área do marketing. É quando realizamos um alinhamento e olhamos para técnicas de levantamento de dados, o popular Discovery no mundo dos produtos. Caminhamos para a etapa das descobertas onde buscamos, através de pesquisas, questões importantes em relação ao produto. Dessa maneira, colocamos na balança dados relevantes que entram em contrapeso com todas as hipóteses construídas de forma interna. Logo depois, vem a etapa de análise e ideação. Essa fase é uma das mais desafiadoras, porque precisamos racionalizar tudo aquilo que foi descoberto nas informações levantadas. A partir disso, para resolver o problema levantado, idealizamos os caminhos que seguiremos. A etapa de design ou de desenho das ideias, consiste no desenvolvimento visual que materializa as ideias, com o intuito de torná-las tangíveis e testáveis. O famoso protótipo. No teste, validamos a descoberta junto com as personas construídas ao redor do problema inicial. Aqui, observamos opiniões, comportamentos e compreensão da solução que construímos. Finalmente, chegamos ao acompanhamento de tudo aquilo que foi validado e lançado para enxergarmos o engajamento do que foi produzido. Essa etapa poderia ser muito bem observada como final. No entanto, ela alimenta uma geração de insights para os próximos ciclos da solução desenvolvida. Em resumo, o processo de design é: Entender; Pesquisar; Fazer o design; Analisar; Acompanhar.  No decorrer do seu percurso em design você vai se deparar com diversos modelos de processos que englobam essas mesmas etapas. O que importa, no final, é que essa jornada deve ser simples, direta e estruturada. Adapte-se a metodologia de design Um processo de design claro e completo pode orientar de maneira ordenada, otimizando e simplificando o resultado. O processo determina as etapas do design, enquanto esse requer métodos específicos e estratégias de apoio e orientação.  Os métodos determinam as medidas e o efeitos do design e devem ser adaptados e alterados de acordo com os procedimentos específicos. Dessa forma, os problemas são resolvidos de forma eficiente e criativa. Nesse ponto, é essencial lembrar de que o UX — User experience, ou seja, o estudo da experiência do usuário, não é um processo direto e pré-determinado. Ele necessita de constantes adaptações.  No processo de encontrar o produto e design ideal, é necessário avançar e retroceder até encontrar o ajuste adequado. Por isso, devemos nos adaptar em relação aos problemas que estamos tentando resolver em conjunto com outras áreas e equipes. Padrões dos processos de design Os padrões que compõem métodos do design são uma parte importante da metodologia. É um conceito muito mais amplo que um processo.  Metodologias compreendem um conjunto de princípios e de diretrizes das melhores práticas da aplicação de métodos e processos relacionados a uma disciplina. Metodologia de design é área de conhecimento estudada por designers para pesquisar e ensaiar o caminho pelo qual será possível obter um resultado em um projeto;  Por meio dela, será possível prever, de antemão, um conjunto de procedimentos, regras e técnicas para chegar a uma meta prevista. Um método é uma maneira isolada de fazer as coisas. Ele está relacionado às etapas do projeto, enquanto a metodologia é um conjunto de métodos. Metodologia é toda a execução do projeto. É uma ciência que se ocupa do estudo de métodos, técnicas ou ferramentas, suas aplicações e definições.  Assim, eles são compostas por instrumentos de ordenação, organização e suporte lógico ao desenvolvimento, e na organização de resolução de problemas teóricos e práticos. A metodologia abraça o processo, servindo o designer com métodos e ferramentas. O diálogo entre metodologia e design proporcionou a este último se tornar ensinável, aprendível e comunicável. Isso porque teoria e metodologia do design se desenvolvem com base em hipóteses e suposições que têm como intuito aperfeiçoar métodos, regras e critérios. Conclusão Conhecer a teoria base pode nos dar o poder de aplicá-la e não ser apenas um integrante passivo nos projetos.  Todo designer precisa ter noção da profundidade desse conhecimento e da aplicabilidade disso no dia a dia.  A base nos faz compreender nossas ações diárias para que, mesmo na falha, o suporte da metodologia nos dê uma forma de recuperação através de algum processo. É nossa responsabilidade como designers ir além do operacional. Assim, nossa ação dentro das empresas ocorre de forma ativa e não apenas de forma replicadora, sem entender os porquês existentes em nossos processos. Bonsiepe et al. (1984, p. 34) destaca que a metodologia projetual não deve ser confundida com um livro de receitas de bolo, pois receitas de bolo levam, com certeza, a um determinado resultado, e técnicas projetuais só têm certa “probabilidade de sucesso”. Saiba usar cada peça de equipamento para entregar trabalhos de alto nível valorizando o que você faz, mesmo que seja lavar a louça. Gostou de saber um pouco mais sobre metodologias, métodos e processos em design? Confira mais conteúdos como esse em nosso Blog! Quer ser nosso próximo Tech Writer? Confira nossas vagas na página Carreira! Até a próxima!

Aplicações distribuídas e acoplamento em engenharia de software valem a pena?
Tech Writers Maio 16, 2022

Aplicações distribuídas e acoplamento em engenharia de software valem a pena?

Nos dias de hoje, é muito comum vermos aplicações monolíticas sendo migradas, ou até mesmo nascendo, em uma arquitetura distribuída. Seja ela composta por serviços de domínio com granularidade grossa ou mesmo por refinados microsserviços.  Não vou entrar, neste momento, nos detalhes e riscos envolvidos em uma eventual – e provável – decomposição prematura. Porém, é inegável que aplicações distribuídas são uma tendência absoluta em termos de arquitetura de soluções modernas.  Parte desse movimento foi incentivado pelas grandes empresas de tecnologia. Foi também propulsionado por ferramentas como: Conteinerização de aplicações; IaC (Infrastructure as Code);  Cloud Computing. Essas, por sua vez, acabam resolvendo problemas que há pouco tempo eram obstáculos intransponíveis para qualquer proposta de natureza distribuída. Aplicações distribuídas valem a pena? Para encontrar essa resposta, precisamos começar com um questionamento: qual a razão deste estilo arquitetural ser tão atraente aos olhos das empresas?  É perfeitamente compreensível que desenvolvedores e arquitetos se sintam intrigados pelos desafios técnicos implícitos neste tipo de abordagem. Mas quais justificativas tornam possível a aplicação dessa complexidade adicional em uma solução de software do ponto de vista do negócio? Antes de discutirmos essas vantagens, vale mencionar que uma arquitetura distribuída deve ser aplicada apenas em sistemas cuja complexidade é muito alta. Ou seja, aqueles que são difíceis de evoluir e manter em uma arquitetura monolítica.  Assim, ela não deve ser aplicada apenas pelos desafios técnicos implícitos que costumam motivar a equipe técnica. Não é o foco deste artigo, mas deixo uma boa referência sobre o tema aqui. Dito isso, vamos supor que uma análise considerável dos trade-offs tenha sido feita e que haja uma real necessidade e maturidade que justifique este tipo de abordagem. Algumas das principais vantagens que você poderá obter são:  Manutenibilidade da aplicação;  Código mais testável;  Escalabilidade e elasticidade;  Maior tolerância a falhas;  Disponibilidade dos serviços; Tudo isso permite que nossa solução responda rapidamente às mudanças do negócio. Assim, é possível viabilizar uma melhora considerável no time-to-market do produto, proporcionando grandes vantagens competitivas. O grande vilão das aplicações distribuídas! Para preservar estas vantagens é fundamental que o time esteja ciente sobre a importância de se proteger uma das características mais fundamentais em uma arquitetura distribuída: a independência entre os serviços.  Quando dois ou mais serviços do seu ecossistema estão acoplados e têm sua independência comprometida, as vantagens proporcionadas por este estilo de arquitetura começam a ser sobrepujadas pelas complexidades ditas essenciais. Isso afeta diretamente a capacidade da equipe em responder rapidamente às mudanças do negócio.  Dessa maneira, a vantagem competitiva acaba sendo perdida.  Tipos de acoplamento em engenharia de software Vou explicar de maneira simples dois dos principais tipos de acoplamento em engenharia de software: acoplamento estático e acoplamento dinâmico. Acompanhe: Acoplamento estático É aquele que “amarra” dois componentes de software, fazendo com que as mudanças em um elemento afetem todos os seus dependentes.  Quanto maior o acoplamento eferente do seu serviço, maior será a sua instabilidade e a chance dele ser impactado por mudanças externas.  Quando pensamos nesse tipo de definição, o exemplo mais óbvio são pacotes ou bibliotecas das quais nossa solução depende. Porém, todos os elementos necessários para garantir que o serviço seja inicializado também se enquadram nessa categoria de acoplamento, inclusive banco de dados e message brokers.  Esse tipo de acoplamento em arquitetura de software é um dos principais responsáveis por tornar uma abordagem orientada a serviços de domínio (onde é comum optar em utilizar o banco de dados como ponto de integração da aplicação) menos flexível que uma arquitetura de microsserviços com bases independentes. Uma consequência desse acoplamento, seria a quase inevitável possibilidade de uma alteração em nível de banco, centralizado,  impactar mais de um serviço do ecossistema. Acoplamento dinâmico É o acoplamento em engenharia de software que ocorre durante a comunicação entre dois serviços.  Um exemplo prático: supondo que tenhamos dois serviços que se comuniquem de forma síncrona. Dessa forma, eles estarão dinamicamente acoplados durante a execução dessa comunicação.   Se o serviço que está sendo consumido falhar ou mesmo enfrentar algum problema de performance, esse acoplamento momentâneo afetará, também, as características do consumidor.  Escalar um serviço não garante eficiência se ele estiver dinamicamente acoplado com serviços ineficientes.  Neste cenário, talvez fizesse mais sentido um acoplamento estático com o message broker e uma comunicação assíncrona para evitar o acoplamento dinâmico entre as aplicações. Mas, como tudo em engenharia de software, a resposta sempre depende do contexto e das reais necessidades do negócio. Conclusão Acoplamento estático e dinâmico são inevitáveis em uma arquitetura distribuída. Ao invés de combatê-los, é necessário gerenciá-los.  O time deve ter ciência da importância da independência entre os serviços e dos impactos que cada tipo de acoplamento em engenharia de software pode causar nas características arquiteturais da solução.  Considerar os trade-offs e documentar os porquês constituem uma parte fundamental do trabalho necessário para garantir uma arquitetura de software evolutiva e flexível. Dessa forma, são asseguradas as vantagens competitivas que justificam este estilo arquitetural tão  interessante. Gostou de saber um pouco mais sobre aplicações distribuídas e acoplamento em engenharia de software? Confira mais conteúdos como esse em nosso Blog! Quer ser nosso próximo Tech Writer? Confira nossas vagas na página Carreira! Até a próxima!

Desenvolvimento Ágil de Software no segmento de Construção Civil da Softplan
Tech Writers Maio 02, 2022

Desenvolvimento Ágil de Software no segmento de Construção Civil da Softplan

No ano de 2016, o segmento de Construção Civil da Softplan tomou a decisão estratégica de mudar seu modelo de negócios.  Assim, a empresa substituiu a comercialização de Licenças de Uso Perpétuo de Software (LUs) pela distribuição no modelo de Software como Serviço (Software as a Service – SaaS).  Naquele momento, foi identificado que seria necessário criar e aprimorar competências internas  na nossa área responsável pelas soluções para a Indústria da Construção . Em um modelo tradicional de licenças de uso, é normal que o cliente aguarde meses para receber uma nova versão de seu sistema.  Já um sistema do tipo SaaS libera as atualizações de software constantemente. Seja para corrigir falhas e vulnerabilidades, ou para disponibilizar funções novas ligadas às inovações tecnológicas ou de negócio. No modelo SaaS, com pagamento de assinatura recorrente, o cliente não precisa realizar grandes investimentos iniciais para adquirir as licenças de uso de software. Ao mesmo tempo em que isto facilita a entrada de um cliente, também facilita sua saída.  Isto porque o cliente não desembolsou um grande montante financeiro que ainda precisará gerar Retorno Sobre Investimento (Return Over Investment – ROI).  Portanto, investir nas soluções de software é uma forma de facilitar a retenção de clientes, visto que tem como foco a sua satisfação.   Identificamos dois grandes objetivos. São eles: liberações frequentes de software e garantia de satisfação do cliente a partir da qualidade do mesmo. Para alcançar os objetivos acima, algumas mudanças seriam necessárias. São elas: Melhorias de código; Melhorias na documentação; Modernização de práticas de engenharia de software; Melhoria nos processos que regiam o desenvolvimento do Sienge – sistema especializado de Construção Civil.  A fim de promover essas melhorias, o segmento de Construção Civil da Softplan investiu no Desenvolvimento Ágil de Software.  Nesse conteúdo, vamos explicar o que é o Desenvolvimento Ágil de Software, como realizamos o processo, resultados obtidos e muito mais sobre o tema. Continue a leitura! Desenvolvimento Ágil de Software O Desenvolvimento Ágil de Software corresponde a comportamentos, processos e práticas utilizadas na criação de software, que tem como objetivo serem mais leves ou ágeis que os processos “tradicionais”.  A maior parte dos “frameworks” de processos para desenvolvimento ágil de software considera a entrega de pequenos incrementos do sistema em períodos curtos e delimitados de tempo.  Este período compreende todas as etapas do ciclo de vida de um software necessárias à entrega desses incrementos:  Planejamento; Análise; Programação Testes; Documentação.  O objetivo do período em si é realizar esses complementos graduais no sistema.  O Desenvolvimento Ágil de Software é um processo empírico: entregas curtas visam viabilizar ciclos curtos de obtenção de feedback, aprendizado e adaptação (dos requisitos, do design da solução e do planejamento). Dessa maneira, a solução que está sendo desenvolvida surge durante o desenvolvimento a partir desses ciclos. Outra característica é a ocorrência mais direta e constante de comunicação e colaboração entre o desenvolvimento e o negócio/cliente no entendimento, validação e desenvolvimento da solução. As práticas ágeis de desenvolvimento ágil de software  As práticas ágeis de desenvolvimento de software evoluíram a partir dos anos de 1990, identificadas inicialmente como métodos “leves”, em oposição aos métodos tradicionais e “pesados”. Na primavera do ano 2000, líderes da comunidade de Extreme Programming (XP) se reuniram para discutir as práticas desta metodologia.  Também discutiram a relação do XP com os demais métodos “leves”. Estes métodos incluíam o Scrum, DSDM, Adaptive Software Development, Crystal, Feature-Driven Development, Pragmatic Programming e outros. Eles foram discutidos em conjunto porque eram entendidos como uma alternativa aos métodos pesados. A partir deste momento, Robert Cecil Martin resolveu criar um encontro com pessoas interessadas em Métodos Leves. O evento ocorreu em fevereiro de 2001, em Utah, nos Estados Unidos. Nele, 17 profissionais de programação e especialistas em tecnologia se reuniram e criaram o que hoje conhecemos como Manifesto Ágil. Os métodos ágeis compartilham algumas características, como o desenvolvimento interativo. Eles são mais adequados quando os requisitos de um produto mudam com frequência. Recomenda-se também para projetos com times pequenos, pois, com o aumento de tamanho, a comunicação face a face se torna mais difícil.  Além disso, é necessário que alguns fatores chave de sucesso sejam garantidos:  Uma cultura organizacional que suporte os métodos;  A confiança das pessoas;  Autonomia e apoio às decisões tomadas pelos times técnicos; A presença de um ambiente que facilite a comunicação entre os membros. Desenvolvimentos de Software para a Construção Civil em 2016 na Softplan Em 2016, a solução de software produzida pelo segmento de Construção Civil da Softplan – o Sienge – liberava versões a cada 45 dias para entrega de funcionalidades novas, e versões menores para correção de bugs.  O ciclo de vida de desenvolvimento de um software adotava uma abordagem mais tradicional, do tipo cascata.  Os times de desenvolvimento eram grandes, tendo em média 20 integrantes. Estes times eram compostos por papéis especializados, citados a seguir. Gerente de Desenvolvimento: Responsável pela gestão funcional dos times e pela gestão técnica / evolutiva do produto; Coordenador de Desenvolvimento: Responsável por auxiliar o gerente de desenvolvimento na gestão funcional dos times; Analista de Requisitos: Responsável pela escrita detalhada da especificação dos requisitos das funcionalidades a serem implementadas; Programador: responsável pela codificação do sistema; Testador: responsável pela condução dos testes em suas diferentes camadas. À época, a maior parte dos testes era conduzida de forma manual. Também havia uma boa cobertura de testes automatizados na camada da interface gráfica do sistema. A evolução do produto era guiada principalmente a partir das solicitações dos clientes e dos prospects. O projeto Jano A primeira tentativa de adoção de agilidade na área de soluções para a Indústria da Construção ocorreu em 2010, com o framework Scrum.  Naquela situação, times pequenos que desenvolviam funcionalidades do sistema, como os times de Engenharia e de Suprimentos, foram unificados para estarem mais aderentes à proposta Scrum. O papel de PO havia sido introduzido em uma adoção anterior do Scrum no ano de 2010, mas acabou sendo esquecido ao longo do tempo. Na prática, o coordenador de desenvolvimento junto ao cliente decidia as funcionalidades do produto.  Como dito anteriormente, as equipes possuíam papéis especializados. Havia um atrito entre os papéis do analista de requisitos e do programador.  Os programadores reclamavam de não possuírem qualquer autonomia sobre a especificação das funcionalidades, visto que recebiam o Use Case completo e pronto dos Analistas de Requisito.  Visando minimizar este atrito, além de atingir outros objetivos, o projeto “JANO” substituiu os Use Cases por User Stories. O projeto HAT Em 2016, uma nova iniciativa de agilidade foi lançada, com total patrocínio da gestão da unidade. Este projeto foi denominado HAT.  O sucesso do projeto HAT seria crucial para o êxito da mudança no modelo de negócio da unidade, passando da modalidade de venda de licenças perpétuas (LUs) para o modelo SaaS. Assim, um comitê de agilidade foi formado. Este comitê era composto principalmente por profissionais técnicos de desenvolvimento de software, mas incluía até o diretor de operações da área, com participação ativa nas discussões. O grupo atuava no papel de coach para adoção de agilidade. Os grandes times foram divididos, adequando-se aos padrões de tamanho sugeridos pelos frameworks ágeis. Cada time era responsável por um módulo principal do Sienge e também por alguns módulos secundários.  Times não funcionais e funcionais Também foram estabelecidos dois times não funcionais, que atuavam dando suporte aos demais: os times de infraestrutura e arquitetura. Cada time funcional passou a contar com um Scrum Master, que era também um integrante do comitê de agilidade.  Acreditava-se que o papel de Scrum Master seria temporário, pois seu objetivo era ensinar o time a ser ágil, tornando sua própria existência dispensável no futuro. Os coordenadores de desenvolvimento passaram a desempenhar o papel de Product Owner, migrando de um cargo de gestão funcional para um cargo mais técnico.  Os papéis especializados de Analista de Requisitos, Programador e Testador deixaram de existir.  T-shaped professional A partir da diretriz de tecnologia de garantir a perenidade do Sienge como sistema SaaS, o papel de Desenvolvedor de Software passou a adotar um perfil conhecido no mercado como “T-shaped professional”.  É esperado que este profissional apresente desempenho avançado em uma área de competência e, também, desempenho básico ou médio em áreas de competência complementares.  As áreas de competência estabelecidas para o Desenvolvedor de Software (Software Developer) do Sienge foram as seguintes: Análise e projeto: envolve a capacidade analítica sobre a necessidade (requisito) a ser implementada no sistema; Programação: envolve a codificação de software que atenderá os requisitos levantados pela Análise e projeto; Qualidade/Testes: incentiva a correta adoção das diferentes camadas da pirâmide de testes na entrega de cada funcionalidade; Times e Processos: envolve conhecimentos e habilidades para potencializar o trabalho em time (condução de cerimônias, técnicas de facilitação, técnicas estruturadas de feedback) e domínio de frameworks para auxílio na organização e produtividade (Scrum, Kanban, XP, etc); DevOps: inclui conhecimentos técnicos relacionados ao movimento DevOps e também a preocupação com os aspectos não funcionais do código a ser produzido: segurança, capacidade, alta disponibilidade, recuperação de desastres, etc. Esta alteração do perfil do desenvolvedor foi explicada a todos os integrantes da área de tecnologia.  Os perfis especializados deixariam de existir e as pessoas precisariam buscar os conhecimentos esperados para o “perfil em T”.  O maior desafio, em geral, recaiu sobre aqueles que não programavam. Existiam então duas opções: o profissional precisaria aprender a programar, contando com o auxílio da empresa, ou optar por deixá-la.  Ambos os casos ocorreram, mas a maioria optou por permanecer na organização, aprendendo programação. Horizontalização na hierarquia de tecnologia da unidade Durante o projeto HAT, o Gerente de Desenvolvimento deixou de conduzir a gestão funcional dos colaboradores. Ele ficou focado na gestão técnica e de evolução do produto.  Ocorreu, por consequência, um achatamento, ou horizontalização, na hierarquia de tecnologia da unidade.  Onde antes existia um diretor, um gerente, coordenadores e os times, restaram apenas os times ligados diretamente ao diretor. O achatamento da hierarquia deu mais autonomia aos times de desenvolvimento. Entre as mudanças, todos passaram a contar muito mais com o feedback dos pares e não somente com o feedback da gestão. Essa autonomia dos times podia ser observada em diferentes situações: Durante um processo de contratação Existe uma fase de entrevista do candidato pelo time o qual ele fará parte. A gestão do segmento de Construção Civil acredita que o “team building” deve iniciar pela oportunidade de o time escolher seu novo integrante. Assim, a equipe tem autonomia e poder de veto ou aprovação do candidato. Desligamentos Desde 2017, a empresa desligou três colaboradores. Destes três desligamentos, o próprio time decidiu por dois, por não enxergar mais cooperação dos profissionais desligados. Escolha de processos e metodologias  Os times têm autonomia e liberdade na escolha das metodologias de desenvolvimento que adotam. Alguns times respeitam mais fielmente o framework Scrum, alguns optam pelo Scrumban, e alguns trabalham em um modelo de esteira contínua, característico do Kanban.  Até mesmo o período de interação não é padronizado e varia entre os times. Alguns adotam interações de uma semana, outros de duas semanas. A partir de um processo de avaliação 180º (entre pares), os desenvolvedores promovem as ações salariais de seus colegas. Este processo, denominado Apex Dev, será tema de outro artigo. Acompanhe o blog para conferir! Os resultados obtidos com as inovações tecnológicas na construção civil Além da adoção de práticas de agilidade na readequação dos times, as práticas técnicas também evoluíram. A união das práticas processuais e técnicas permitiu alcançar uma grande mudança na frequência de liberações do Sienge.  Desde o ano de 2017, o Sienge passou a liberar versões novas quase que diariamente. No ano de 2020, que possuiu 253 dias úteis, 207 versões do Sienge foram liberadas. Aplica-se cada uma dessas versões a todo o datacenter Sienge, gerando a atualização de milhares de clientes. Elas são também disponibilizadas para que clientes on premise possam aplicá-las. O novo modelo de negócios baseado em SaaS atingiu seus objetivos estratégicos. Além disso, a transição da Cultura Tradicional para a Cultura Ágil alcançou seu objetivo ao suportar este novo modelo de negócios. Gostou de conhecer a Adoção de Agilidade no segmento de Construção Civil da Softplan? Confira mais conteúdos como esse em nosso Blog! Quer ser nosso próximo Tech Writer? Confira nossas vagas na página Carreira! Até a próxima!

Conheça um dos princípios SOLID mais importantes: Single Responsibility Principle
Tech Writers Abril 21, 2022

Conheça um dos princípios SOLID mais importantes: Single Responsibility Principle

Um dos princípios SOLID mais importantes é o Single Responsibility Principle (SRP), ou Princípio da Responsabilidade Única (em português).  De acordo com Robert C. Martin (Uncle Bob) em seu livro Clean Code, uma função deve ter apenas uma responsabilidade. Durante a leitura do livro, me deparei com um caso onde o autor aplicou técnicas de refatoração em um código legado, deixando uma função o mais enxuta possível.  Para o autor, aquela função, após ser refatorada, passou a fazer apenas uma ação. Veja: A questão é que, analisando a função, identifiquei que ela executa três ações: Verifica se é uma página de teste;  Caso seja uma página de teste, inclui setups e teardowns;  Retorna o html da página. Níveis de abstração A partir desse momento, o autor passa a discutir os  “níveis de abstração” do Single Responsibility Principle (SRP). Ele afirma que: “Uma função faz apenas uma única coisa se todas as instruções dentro dela estão no mesmo nível de abstração”. Confesso que, mesmo após ter lido várias vezes essa frase, não compreendi como aquela função fazia apenas uma coisa. Até que decidi colocar a mão na massa. Foi aí que tudo fez sentido! Para explorar um pouco mais o SRP, vamos utilizar um exemplo fictício: Considere que, em uma das classes do nosso sistema, existe uma função responsável por processar a aprovação de alunos. O processamento da aprovação consiste em atualizar os dados do aluno e enviar um e-mail notificando que o estudante foi aprovado. Abaixo, o código que representa essa função: Conforme podemos conferir na imagem, a função acima executa mais do que uma ação. Para evidenciar isso, separei elas por comentários: Nessa etapa, ficou muito óbvio que a nossa função faz mais de uma coisa. Porém, a pergunta é: será que a função consegue perceber os diferentes níveis de abstração que ela possui? O objetivo dessa função é processar a aprovação. “O processamento de aprovação consiste em atualizar os dados do aluno e enviar um email notificando que o aluno foi aprovado”. Ou seja, enviar e-mail faz parte das responsabilidades da nossa função. Porém, colocar a frase “Bom dia” no corpo do e-mail já é um detalhe que a função não precisa saber. Ou melhor, ela não precisa saber se o e-mail deve começar com “Bom dia” ou “Olá”. Isso está em um nível mais baixo de abstração. Separação dos níveis A ideia, agora, é separar cada nível de abstração por uma nova função. Aplicando a técnica de extração de métodos, podemos extrair a atualização dos dados do nosso aluno para outra função: Aplicando a mesma técnica, podemos extrair também o envio do e-mail por diferentes níveis de abstração: Perceba que criei uma função para montar o e-mail colocando os destinatários e o conteúdo do mesmo e outra função somente para montar esse conteúdo. Isso porque as duas “tarefas” estão em níveis diferentes de abstração. Com isso, a nossa função principal ficou da seguinte forma: Agora, se eu te perguntar “quantas coisas essa função faz?”, é provável que você responda: “duas coisas: ela atualiza os dados do aluno e envia o e-mail”.  Se essa for sua a resposta, você não está errado, mas também não está certo. Vou te explicar o porquê. Lembra dos requisitos da nossa função? “O processamento da aprovação consiste em atualizar os dados do aluno e enviar um e-mail notificando que o aluno foi aprovado”. Ou seja, atualizar os dados e enviar o e-mail estão no mesmo nível de abstração. Portanto, podemos concluir que a nossa função faz apenas uma única coisa: processa aprovação de alunos. Gostou de aprender um pouquinho mais sobre Single Responsibility Principle? Confira mais conteúdos como esse em nosso Blog! Quer ser nosso próximo Tech Writer? Confira nossas vagas!

Slow Query: entendendo os seus limites!
Tech Writers Abril 18, 2022

Slow Query: entendendo os seus limites!

No conteúdo de hoje vamos falar sobre um assunto muito relevante para otimizar o trabalho dos desenvolvedores: Slow Query. Há muito tempo existe a preocupação com otimização de consultas nas aplicações. Mas você sabe dizer quais são os limites aceitáveis?  Nesse artigo, vamos te explicar como determinar o que é uma consulta lenta (Slow Query)  e quando otimizá-la. Como base, vamos usar o livro de Jakob Nielsen sobre Engenharia de Usabilidade. Fique com a gente  até o fim do conteúdo e entenda tudo sobre o tema.  Percepção Humana em Slow Query Existem três limites de tempo principais, determinados de acordo com as habilidades de percepção humana. Eles devem ser mantidos em mente na hora de otimizar o desempenho. O conselho básico sobre os tempos de resposta se divide da seguinte maneira: 0,1 segundo é o limite para que o usuário sinta que o sistema está reagindo instantaneamente, o que significa que nenhum feedback especial é necessário, exceto para exibir o resultado; 1,0 segundo é o limite para o fluxo de pensamento do usuário permanecer ininterrupto, mesmo que o usuário perceba o atraso. Normalmente, nenhum feedback especial é necessário durante atrasos de mais de 0,1 mas menos de 1,0 segundo. O usuário perde a sensação de operar diretamente os dados; 10 segundos é o limite para manter a atenção do usuário focada. Para atrasos maiores, os usuários vão querer realizar outras tarefas enquanto esperam o computador terminar. Dito isso, vamos determinar o Tempo de Resposta do Servidor (SRT) e iniciar boas práticas e processos para melhor experiência da aplicação. Determinando o tempo de resposta em Slow Query Embora o embasamento teórico para as diretrizes de tempo de resposta feitas por Nielsen seja antigo e a partir de aplicações baseadas na WEB, essas orientações ainda são recomendadas para qualquer aplicação desenvolvida nos dias atuais.  Portanto, independente da tecnologia que venha a ser implementada ao longo dos anos, a diretriz será a mesma. Desta forma, quando encontrar uma situação na qual  precise definir os tempos de respostas das Slow Queries, procure algum especialista para otimização de sua arquitetura e desempenho.  A sugestão a seguir demonstra boas referências de tempo: 1000 ms ou menos – Bom desempenho; 1000-2000 ms – Otimização é recomendada; Mais de 2000 ms – Baixo desempenho, a otimização é necessária. É muito importante a definição desta “régua” de tempo como requisito não funcional. Estes números foram determinados de acordo com as indicativas e diretrizes especificadas por Nielsen. Para ajudar, você pode monitorar sua estrutura baseado nas coletas de tempos de resposta recebidos ao longo do tempo. A partir disso, pode realizar ajustes.  Isso tudo implica em diversas melhorias para o ambiente como um todo, como por exemplo: Diminuição dos custos do Data Center; Melhoria da experiência do usuário Final; Maior sustentabilidade ao seu projeto ao longo dos anos. E então? Conseguiu entender os limites do Slow Query e como utilizá-lo? Continue acompanhando o nosso blog. Nos próximos artigos, traremos mais dicas de otimização que são importantes, mas muito esquecidas, até  mesmo por profissionais experientes.  Fonte: NNGROUP  Gostou de aprender um pouquinho mais sobre Slow Query? Confira mais conteúdos como esse em nosso Blog! Quer ser nosso próximo Tech Writer? Confira nossas vagas na página Carreira! Até a próxima!