/Blog

Sustentação de sistemas: custos e modelos de trabalho

O que você vai encontrar neste artigo:

Imagine que o principal software de sua empresa parou de funcionar. Muitos setores e operações são interrompidos, certo? Agora pense no quanto um problema como esse leva tempo e dinheiro para ser resolvido. É justamente por conta disso que a sustentação de sistemas é tão importante, pois garante a estabilidade e disponibilidade contínua dos softwares ao longo do tempo. Mas, como tudo o que é vital e necessita de cuidados, a sustentação tem o seu custo, o qual varia de acordo com os modelos de manutenção existentes. Continue lendo esse artigo para saber quais são eles e os fatores que influenciam no preço deste serviço.

Softwares de baixa qualidade causaram um prejuízo de mais de US$ 2 trilhões para empresas dos Estados Unidos em 2020, segundo a Consortium for Information & Software Quality (CISQ).

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

O que é sustentação de sistemas?

Da mesma forma como um carro precisa de trocas de óleo, alinhamento de pneus ou até mesmo uma reconstrução do motor, um produto de software precisa de correções semelhantes para garantir o desempenho ideal.

Assim, a sustentação de sistemas é o trabalho de monitoramento e manutenção que permite a continuidade, disponibilidade e qualidade tecnológica do software após sua entrega. Esse processo previne e corrige falhas, melhora o desempenho e outros atributos ou adapta o produto a um ambiente modificado.

Em resumo, as principais atividades de sustentação abrangem:

• Atualização de sistemas para atender ao feedback de usuários.

• Ajustes e garantia de funcionamento de integrações que o sistema possui.

• Correções de falhas e bugs

• Manutenção preventiva ou corretiva em componentes, bibliotecas ou frameworks

• Monitoramento de incidente

Seguindo com a comparação mecânica, quanto mais você dirige seu carro, mais as coisas se desgastam e precisam ser substituídas. Logo, quanto mais complexo ou antigo for o software, mais ele necessita de manutenção. É aí que entram também os custos e os modelos de sustentação, que veremos a seguir.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Quais são os modelos de sustentação de sistemas?

Antes de estimar o custo de sustentação de software, primeiro precisamos entender quais são os modelos de trabalho empregados neste processo. A escolha por determinado modelo depende das necessidades de cada empresa.

Existem 4 tipos de manutenção: corretiva, adaptativa, perfectiva e preventiva. Veja a seguir em que consiste cada uma delas.

1. Manutenção Corretiva

Esse serviço elimina os problemas que o programa ou software pode enfrentar após sua entrega.

Por exemplo, o usuário não consegue entrar no sistema usando redes sociais após iniciar o programa. Acontece que existe um código de autenticação que está conectado a esta rede social. Este código tem um defeito e precisa ser atualizado para funcionar corretamente.

2. Manutenção Adaptável

É aplicada diante da necessidade de adaptar o produto para um ambiente que foi modificado

Esse é o caso de um software que precisa ser executado em uma nova plataforma ou sistema operacional, atender a novos requisitos de hardware, adaptar-se a algumas novidades em seu ambiente ou combater novas ameaças à segurança.

Por exemplo, os usuários se conectam com sucesso ao sistema por meio de uma rede social, mas depois de alguns dias o problema de login voltou. Depois de analisar o problema, verifica-se que a rede social mudou a forma como eles se autenticam usando sua API; então, o software precisa ser atualizado para corrigir o problema. Este exemplo apresenta uma alteração em um sistema de terceiros, portanto pertence especificamente ao grupo de serviços adaptativos.

3. Manutenção Evolutiva

Esse tipo de serviço geralmente é baseado no feedback do usuário e visa melhorar o software com a adição de novas funcionalidades, melhorar seu desempenho ou até mesmo pela modificação do seu código-fonte, buscando obter melhor legibilidade ou adequação a alguns paradigmas de programação. 

Por exemplo, imagine que não há mais problemas em fazer login usando uma rede social; no entanto, os usuários passam a dizer que surgiu outro problema ou que alguma funcionalidade poderia ser melhorada. Depois de discutir o feedback com os desenvolvedores, o erro é corrigido ou a funcionalidade é melhorada.

4. Manutenção Preventiva

Este conjunto de serviços visa identificar e eliminar possíveis problemas ou defeitos antes mesmo que eles apareçam. O trabalho pode incluir otimização de código em prol da eficiência ou facilidade de manutenção ou manter toda a documentação atualizada. 

Por exemplo, os desenvolvedores fizeram alterações no software para suportar um aumento no número de usuários. Para que o servidor aguente a carga e não trave no pico de acessos, você precisa garantir que ele aguente esse fluxo de usuários com medidas preventivas para evitar falhas e interrupções.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Afinal, quanto custa a sustentação?

Agora que sabemos o que envolve a sustentação de sistemas, você pode presumir que podemos realizar a exata estimativa de custos. Infelizmente, não é tão fácil principalmente por dois motivos:

• Não há dois projetos de software totalmente iguais.

• Não há cálculo-padrão da indústria ou uma linha de base para determinar um orçamento de manutenção de software adequado.

Especialistas de TI costumam estabelecer o orçamento com base em uma amostra representativa de escopo e complexidade variados, mas ninguém de fato chega a um consenso, mesmo em um nível macro, sobre quanto custa uma manutenção típica.

Mas é possível determinar uma estimativa com base em alguns fatores gerais que impactam no orçamento de um serviço de manutenção, como:

– O tipo de manutenção de software (corretiva, adaptativa, preventiva, perfectiva).

– O tipo de software, sua complexidade, integrações e customizações, etc.

– Os requisitos de disponibilidade de software.

– Composição, competências e carga de trabalho da equipe de manutenção.

– Tempo de trabalho.

– O número de usuários de software.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

8 fatores que afetam o custo de manutenção de software

#1. Linguagens de programação

Alguns softwares são desenvolvidos em linguagens de programação de alto nível que são mais fáceis de entender e exigem menos manutenção. Por exemplo, C#, Java, Python, C++, JavaScript, PHP e Ruby requerem menos sustentação do que outras. Logo, a linguagem utilizada no seu software impacta muito no seu custo.


#2. Qualidade de código

Você pode se surpreender, mas poucas coisas são tão difíceis quanto desenrolar um colar cheio de nós. E por que ele enrola? Simplesmente porque foi guardado de qualquer jeito, sem seguir a prática básica de ser pendurado quando fora de uso. Acredite, o trabalho de retirada de nós é tão árduo que muitas vezes as pessoas levam a jóia a um ourives.

 

A mesma coisa acontece com um código sujo e bagunçado, cheio de cópias e trechos desnecessários. Será muito mais trabalhoso limpá-lo e mantê-lo (ou até mesmo compreendê-lo).

Veja a seguir como manter a qualidade de código 

Clean Code

Um código simples e limpo facilita a sua compreensão e leitura para que outros desenvolvedores possam atualizá-lo e torná-lo escalável. O movimento de simplicidade de código anda de mãos dadas com outros princípios de software, como KISS (“Keep It Simple, Stupid!”), DRY (“Don’t Repeat Yourself”) e YAGNI (“You Aren’t Gonna Need It”).

Teste contínuo de ponta a ponta

O Test Driven Development (TDD) dá mais confiança em relação à qualidade do código. Por outro lado, o Behavior Driven Development (BDD) permite que você aprenda os recursos e requisitos diretamente do cliente e esse alinhamento se traduz em código mais próximo das necessidades dos usuários. O teste de integração total garante que todos os componentes funcionem juntos conforme o esperado e aumenta a cobertura do código.

◾ Guia de estilo

Ao trabalhar em equipe, é importante ter um guia de estilo de escrita consistente para sua base de código. Se você não sabe dizer quem escreveu o código em um arquivo específico, não há consistência entre os autores. As inconsistências têm impactos negativos na qualidade do sistema e são caras para corrigir.

Revisão do código

Revisões de código ajudam a reduzir bugs no produto. Reconhecer a possibilidade de imperfeições é o primeiro passo para aceitar a importância da revisão de código por outro colega, que pode ajudar a “pescar” erros e imperfeições e garantir a qualidade final do código. Afinal, todo mundo comete erros.

Leia também:
Boas práticas em arquitetura de software

Desempenho e qualidade 

Nossa equipe monitora o desempenho e a qualidade do seu aplicativo em cada etapa do desenvolvimento, verificando a usabilidade e velocidade através de ferramentas de análise durante o processo de compilação. Sem uma abordagem eficiente de otimização, não haverá desempenho e qualidade, aspectos críticos para nós.

#3. Qualidade da Arquitetura do Software

A qualidade deve ser a prioridade número um durante todo o processo de desenvolvimento. Quanto mais cedo se determinar os erros, mais rápido, mais fácil e mais barato será para corrigi-los.

Em outras palavras, o custo para reparar falhas nos sistemas vai aumentando conforme o ciclo de desenvolvimento do software vai atingindo seu final. Portanto, a avaliação qualitativa da arquitetura pode prever problemas no software antes dele ser finalizado, o que tende a diminuir o custo de adequação do sistema aos padrões de qualidade.

Por isso, a padronização de um processo para a avaliação arquitetural pode reduzir o custo na produção, pois é possível detectar e reparar problemas em fases iniciais do ciclo de vida.

Há uma série de processos e infraestruturas que caracterizam uma arquitetura de software bem feita, tais como microsserviços, serverless, codeless, IaaS, TDD (Test-Driven Development, Desenvolvimento Orientado a Testes), BDD (Behavior Driven Development, Desenvolvimento Orientado a Comportamento), Integration Patterns, Arquitetura Evolutiva, Design System e outras boas práticas.

#4. Documentação

É fácil perceber que ter os requisitos do software detalhados faz com que as pessoas saibam como ele deve funcionar, sem precisar perder tempo vasculhando o código-fonte. Assim, a documentação é uma forma de evitar retrabalho e conseguir fazer mais em menos tempo, facilitando a manutenção e a evolução do software. 

Embora isso pareça óbvio, é fato que uma das maiores dores dos desenvolvedores são as documentações incompletas, desatualizadas e com pouca legibilidade.

Em síntese, uma boa documentação:

É a fonte de informação do software, com todas as operações e informações necessárias, trechos de código, diagramas, definições de requisitos, bugs, especificações do sistema, componentes, plano de testes, tudo o que se julgar necessário.

• Deve ter informações corretas e atualizadas sobre o sistema de software e seus processos relacionados, para que possa apoiar o time nas etapas de desenvolvimento, compreensão e manutenção de código.

• Ser o histórico de desenvolvimento do software, que servirá de base para novos desenvolvedores se situarem, ver o que já foi feito e evoluir a partir disso.

Contém um Repositório de Design System, uma coleção de componentes e referências sobre front-end/UI padronizados e reutilizáveis para determinado produto, site ou sistema. Geralmente, ele contém um guia de estilo, uma biblioteca de componentes e uma biblioteca de padrões e diretrizes visuais. 

Com tudo isso definido e documentado, é muito mais fácil compor novas features ou alterações, o que acelera exponencialmente o processo de manutenção, aumenta a coesão do software e evita que novas funcionalidades sejam desenvolvidas fora dos padrões estabelecidos.

☝️ Você pagará menos custos de manutenção se a documentação de software for clara e correta. Mas, se a documentação não for adequada, haverá muitas falhas e isso afetará ainda mais o custo de sustentação do software.

☝️ Ter os requisitos do software detalhados faz com que as pessoas saibam como ele deve funcionar sem precisar perder tempo examinando o código-fonte.

#5. Plataformas e tecnologias utilizadas

Quanto mais baixa é a complexidade de plataformas e tecnologias utilizadas, mais a manutenção do software é mais barata e fácil. Por exemplo, um software web simples certamente tem um custo de manutenção menor que um ecossistema com back-office e necessidade de integrações. Quando a manutenção precisa ser feita em diferentes lugares, e eventualmente esses ambientes são desenvolvidos em diferentes tecnologias (exigindo diferentes tipos de profissionais, tais complexidades aumentam o custo do serviço.

Leia também: 

Gestão de riscos em projetos de Desenvolvimento de Software
As 5 boas práticas de desenvolvimento de software
11 Erros no projeto de software que devem ser evitados

#6. Equipe

É aconselhável contratar desenvolvedores de software em período parcial ou por hora, que possam ajudá-lo com a manutenção oportuna do software, ou uma empresa especializada em desenvolvimento. Lembrando que o tamanho da equipe contratada vai variar de acordo com as tecnologias necessárias e a quantidade de atividades.

Outsourcing de TI UDS.

#7. Escopo de atividades

Um bom escopo /backlog inicial se reflete em pouca manutenção, pois haverá menos necessidade de alterações. Esse escopo das atividades de suporte e manutenção leva em conta fatores como: infraestrutura relacionada ao software, novos recursos, correções e evoluções do software, entre outras ações que já vimos aqui. Quanto menos atividades, menos esforço de tempo e trabalho, logo, menor será o custo.

#8. Estabilidade de hardware

Se você escolheu um hardware estável que não mudará tão cedo (embarcado ou em dispositivos de IoT, por exemplo), o custo de manutenção será reduzido a zero. 

Normalmente, a maioria dos softwares que está em cloud é estável. Mas a regra geral diz que, quando o software fica desatualizado, é preciso trocar o hardware original, e essa conversão vai demandar custos de manutenção do software.

Dicas para ajudar a estimar os custos de manutenção

• Defina o escopo / backlog inicial de sustentação, ou seja: quais atividades precisam ser desempenhadas?

• Identifique em quais plataformas e tecnologias as atividades devem ser realizadas, por exemplo, caso seja um aplicativo integrado a um sistema web, é necessário saber em quais linguagens de programação ambos estão desenvolvidos.. Isso ajudará o fornecedor da manutenção de software a identificar quais profissionais devem fazer o trabalho.

• Identifique junto a seu fornecedor qual será a equipe necessária para sustentar o software considerando o escopo que foi levantado e as linguagens de programação nas quais ele está desenvolvido.

• Certifique-se de qual será a disponibilidade dos profissionais da sustentação: integral ou parcial. Ou seja, se tais profissionais farão a manutenção do seu software em tempo integral ou se atuarão em diferentes projetos do fornecedor, sem dedicação total ao seu sistema.

• Combine o modelo de trabalho, ou seja, quais serão as etapas da prestação do serviço e quem será responsável por solicitar, detalhar e aprovar atividades realizadas pela equipe.

• Faça um acordo sobre o tipo de precificação do fornecedor da manutenção. Neste outro artigo explicamos as diferentes formas de contratar desenvolvimento de software, incluindo valor por hora de trabalho e squad fee. 

• Saiba quais serão os processos e ferramentas que o fornecedor adotará para garantir estimativas de trabalho, cumprimento de prazos e garantia de qualidade do seu software.

• Mantenha uma comunicação transparente e com feedbacks junto ao seu fornecedor. É natural que equipes de tecnologia tenham uma curva de aprendizado para lidar com a manutenção de um software. Um bom fornecedor trabalhará com melhoria contínua para garantir que tal equipe seja mais produtiva a cada nova atividade que realizar. Por isso, é fundamental ter uma comunicação clara e transparente visando garantir um time engajado na manutenção do seu software.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Calculando o custo aproximado de profissionais para a sustentação

Até mesmo empresas com estrutura tecnológica robusta têm dificuldades em sustentar seus sistemas, já que isso pode demandar uma equipe dedicada.

É por isso que alocar squads de profissionais especializados pode ser uma boa saída para garantir a sustentação de um software de maneira inteligente.

Mas quanto custam esses profissionais? Veja a seguir.


Como são calculados os custos de alocação de Squad de TI?

Normalmente, a alocação da squad de TI é calculada de duas formas:
1. Por hora trabalhada:

• Cada profissional da squad tem um valor por hora trabalhada, levando em conta sua área de atuação e experiência (senioridade).

• As horas trabalhadas em cada tarefa são contabilizadas com a ajuda de ferramentas.

• Ao final de cada sprint ou de cada mês, o total de horas contabilizadas de cada profissional é multiplicado pelo valor da sua hora de trabalho.

• O total será o valor a ser pago pelo cliente.

• A alocação de um profissional sênior pode variar de R$ 159 a R$ 195 a hora.

Esse modelo de contratação permite que o cliente contrate mais ou menos horas de cada profissional de acordo com a sua necessidade, pagando apenas por aquilo que realmente utilizou.


2. Squad fee ou fee mensal

• A squad tem um valor fixo a ser pago pelo cliente mensalmente ou a cada sprint.

• Esse valor é baseado na quantidade de profissionais e experiência, assim como o tempo em que esses profissionais vão trabalhar na squad.

• Tempo integral (180h mensais) ou tempo parcial (de 44h a 88h mensais).A vantagem desse modelo é que, caso alguns profissionais trabalhem algumas horas a mais ou a menos, essa diferença não será computada. O cliente paga para ter o time disponível em tempo integral, independente das horas trabalhadas em cada tarefa.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Papéis específicos mais comuns em equipes de sustentação de software:

Scrum Master: certifica-se de que a equipe esteja trabalhando bem em conjunto e siga as práticas do Agile, zelando pelo cumprimento de cerimônias e desimpedimento do time. 

Team Leader: lidera e gerencia a equipe, incluindo a atribuição de tarefas, acompanhamento de desempenho e avaliação de resultados. É quem fornece orientação, feedback e soluções para problemas que possam surgir.

Tech Lead: responsável pelo trabalho da equipe técnica. Ele remove impedimentos, aloca especialistas de um sistema para outro (quando necessário), coordena e esclarece quem são os responsáveis por qual sistema no período.

DevOps: a sua função é criar um ambiente de colaboração mais eficiente entre as equipes de desenvolvimento e operações, para que os aplicativos possam ser desenvolvidos, testados e implantados de forma rápida, segura e confiável.

Desenvolvedores: são responsáveis por  desenvolver as funcionalidades  do produto conforme previsto pelo Product Owner e UX Designer, utilizando as linguagens de programação definidas para o projeto de acordo com o seu escopo.

Analista de Qualidade (QA): é o responsável pela execução de testes no produto que será entregue ao cliente e pelas demais atividades e procedimentos que ajudem a garantir a qualidade deste.

UX e UI Designers: compreende os perfis, comportamentos e necessidades dos usuários para projetar as melhores interfaces e experiências de uso.

Analista de Requisitos: é a pessoa responsável por coletar, analisar, documentar e validar os requisitos de um sistema, software ou projeto. O objetivo é entender as necessidades do cliente e transformá-las em requisitos claros, concisos e específicos que possam ser compreendidos pelos desenvolvedores e equipes envolvidas no projeto.

Product Owner (PO): é dele o papel de decisão sobre a seleção dos itens que serão priorizados. Desse modo, o PO tem um papel de forte comunicação e resolução de conflitos entre clientes e também entre a equipe técnica.

Nem todos estes papéis desempenham funções em todos os sistemas e nem todos eles precisam ser executados exclusivamente por uma pessoa. Isso depende do contexto e da quantidade de pessoas na equipe.

Vamos fazer uma simulação?

580h de capacidade produtiva mensal.
↪ Valor variável entre R$ 75 mil e R$ 83 mil (de acordo com a senioridade).

No final de cada mês, o total de horas contabilizadas de cada profissional é multiplicado pelo valor da sua hora de trabalho. O total será o valor fixo a ser pago pelo cliente.

O atributo alt desta imagem está vazio. O nome do arquivo é traco-ok.png

Investir na manutenção de sistemas é vital para a satisfação dos clientes

A sustentação de sistemas é um processo essencial para o sucesso do seu negócio. É por meio dela que você garante a qualidade do seu produto e mantém os clientes satisfeitos. Mas, mesmo com todos os cuidados, com o tempo, falhas e problemas de desempenho podem começar a ocorrer.

Por todos esses desafios, terceirizar a sustentação de software tem sido uma das saídas adotadas por empresas de diferentes portes. Empresas especializadas em desenvolvimento e sustentação de sistemas oferecem apoio do início ao fim para cumprir as demandas e necessidades de um projeto mesmo após o lançamento do produto.

Se você deseja evitar o desperdício de recursos e garantir que a manutenção do seu software atenda ao máximo às necessidades de seus usuários e negócios, considere o suporte de uma empresa confiável.

Quer saber como a UDS pode te ajudar? Preencha o formulário abaixo e fale com um especialista.

Malu

Publicitária apaixonada por Inbound Marketing.

Posts Relacionados

Inscreva-se no nosso blog

Receba em primeira mão os conteúdos mais quentes da área de Tecnologia.