Apesar de atualmente o mercado de desenvolvimento de software ser um dos mais pujantes, com elevada demanda, muitas empresas ainda encontram dificuldades no desenvolvimento rápido de novos sistemas, com tecnologias modernas.

Diante das necessidades de softwares cada vez mais funcionais e sofisticados, os desenvolvedores precisam encontrar soluções para superar os obstáculos e atender a demanda de um público cada vez mais exigente, incluindo as grandes corporações.

Tendo isso em vista, confira agora quais são os maiores desafios e barreiras para o desenvolvimento de software!

Recurso financeiro restrito

Certamente, as questões financeiras devem encabeçar essa lista de maiores desafios no desenvolvimento de software, afinal de contas, planejar e produzir um bom software envolve gastos com recursos que nem sempre estão disponíveis na empresa.

Com efeito, a estrutura financeira no Brasil está monopolizada, fazendo com que muitas empresas fiquem dependentes de algumas instituições financeiras, fato que contribui para restringir as ofertas de crédito a estruturas de dívidas bem mais simples e a desconto de recebíveis, concedidos sob condição de garantias por parte da empresa.

Assim, os produtos mais modernizados e baratos são restritos às empresas de grande porte, que apresentam faturamento em muitos milhões de reais.

Recentemente (no dia 25 de abril de 2017), o Panorama Softsul realizou um debate sobre capitalização das empresas de TI por meio de Private Equity. Dessa maneira, é possível que empresas que atuam no setor de TI possam captar recursos para o desenvolvimento de software por meio de uma fonte muito valiosa: os fundos da Private Equity (ativo privado).

Custos de infraestrutura

Para entender melhor como o desenvolvimento de software afeta os custos de uma empresa, é preciso considerar que eles aumentam com o suporte a sistemas de TI que necessitam estar disponíveis no regime 7X24 horas. De fato, serviços de TI disponíveis de forma contínua necessitam de um investimento elevado em tecnologia e processos.

Sobretudo, os serviços de disponibilidade em TI envolvem a alta disponibilidade, a operação contínua e a disponibilidade contínua em diversas sedes. Quando é necessário fazer revisão de arquitetura, os custos naturalmente aumentam ainda mais.

Para ter alta disponibilidade, um serviço de TI precisa funcionar em torno de 99,3% do tempo de operação programada, mesmo considerando as interrupções não previstas, como alterações inadequadas na configuração, problemas no hardware ou bugs de software. Nesse caso, devido às interrupções, é perdido um total de 61 horas anuais (considerando 24 horas diárias durante os 7 dias da semana).

Por esse motivo, a alta disponibilidade costuma incorporar técnicas de software e hardware duplicado.  O desenvolvimento de software contempla elementos como servidores, dispositivos de rede e de armazenamento e componentes de software que entregam os serviços de TI, junto com mecanismos que transferem o fluxo de trabalho no caso de falhas ou erros de backup.

Buscam-se sempre reparos que não envolvam interrupções muito prolongadas, mas ainda assim, são frequentes as interrupções curtas e os minutos interrompidos entram no cálculo de disponibilidade do serviço do software. Um serviço de TI só pode ser considerado operável de forma contínua, portanto, caso não seja necessário suspendê-lo e reiniciá-lo para manutenção.

Por sua vez, os custos com a infraestrutura de múltiplas sedes e sistemas contínuos podem alcançar um valor oito vezes maior que os custos com os serviços de TI comuns. Esse total se refere somente aos custos de infraestrutura de hardware e software, mas é necessário lembrar que ainda é preciso empregar capital financeiro em recursos humanos e nos processos.

Necessidade de retrabalho

Os retrabalhos também são desafios a serem enfrentados no desenvolvimento de software, pois eles provocam incrementos relevantes nos custos do projeto.

Entre os principais motivos que geram retrabalho estão:

  • falta de planejamento;
  • falha em requisitos de projeto;
  • ausência de controle de qualidade;
  • determinações mal feitas ou incompletas;
  • inexistência de critérios que determinam a aceitação e a qualidade;
  • falta de padronização e/ou metodologias (ou padronização e metodologias  insuficientes);
  • estimativas equivocadas;
  • falta de inspeções.

A pressão para o cumprimento de prazos apertados, a existência de pouca documentação e o volume elevado de entregas também acabam criando situações que levam a erros de execução e à necessidade retrabalho.

Vale ressaltar que os custos com retificação de bugs aumentam dez vezes mais para cada etapa que o projeto avança.

Dificuldade de suporte com os fornecedores

A maior parte das empresas tem um setor de suporte técnico que presta atendimento aos usuários finais do produto. Uma vez que otimiza o relacionamento com o cliente, o suporte técnico é um diferencial competitivo para a empresa.

Ainda que tenha se iniciado dentro da área de desenvolvimento de software, o suporte acabou conquistando mais autonomia em função de sua importância e da necessidade de os desenvolvedores terem mais tempo para ações voltadas ao desenvolvimento propriamente dito do software.

Para o cliente, os custos com atendimento técnico eram muito altos, já que os próprios profissionais desenvolvedores encarregavam-se dele. Assim, as empresas de softwares criaram setores destinados especificamente ao suporte técnico.

Para se ter ideia da sua importância, valores entre 20% e 30% do pagamento mensal dos clientes (receita recorrente) correspondem exatamente ao atendimento técnico contratado. Ou seja, sendo responsável por um percentual relevante da receita empresarial, o suporte precisa ser considerado realmente como parte do negócio e não simplesmente como um centro de custos.

Além de integrar a receita recorrente, o suporte pode ampliar as possibilidades de rentabilizar a empresa, por meio de contratos de SLAs (níveis de atendimento), customizações, configurações extras, consultorias à distância e assim por diante.

Ainda que muitos gestores não interpretem assim, o suporte é um setor que deve ser usado de forma estratégica, tendo um importante papel no processo de fidelização dos clientes e no sucesso da organização. Por isso, as empresas que investem e fortalecem o atendimento técnico tendem a apresentar um maior potencial competitivo.

Por outro lado, aquelas que o consideram apenas um custo necessário, geralmente sofrem com a insatisfação dos funcionários e dos clientes.

Assim, é fundamental considerar o suporte como um prolongamento do desenvolvimento de software, tão importante quanto ele. Infelizmente, ainda não existe um plano de carreiras e salários bem delineado nesse setor, sendo poucas as políticas de gratificações por reconhecimento e desempenho do profissional.

De qualquer forma, não tenha dúvida: é necessário capacitar bem os profissionais da área para que o cliente deposite confiança nele e, por associação, na empresa. Também se recomenda investir em ferramentas de autoatendimento, que concedem mais autonomia ao cliente e fortalecem a relação entre cliente e organização.

Análise de requisitos

Esse é um fator fundamental no desenvolvimento de software. Afinal, análises realizadas de maneira incorreta provocam resultados finais insatisfatórios. Contudo, para ser feita corretamente, a análise de requisitos depende tanto dos desenvolvedores quanto dos clientes.

Os clientes podem passar de forma errada o que desejam, pois talvez não compreendam realmente o que querem. Diante dessa possibilidade, o analista, o gerente de projetos ou o desenvolvedor do software deverá, portanto, manter um contato permanente com o cliente.

Acima de tudo, tendo em mente que para planejar e executar um sistema completamente adequado é preciso ir além da relação com o cliente — apenas uma conversa breve, acompanhada de uma breve explanação, não é o bastante.

Tempo

O tempo é um fator que envolve disciplina, organização e o uso de ferramentas corretas. O descontrole de tempo geralmente conduz a atrasos, desrespeitando os prazos definidos nos cronogramas. Consequentemente, projetos entregues fora do prazo resultam na insatisfação do cliente, que perde a confiança na empresa.

Para respeitar o prazo de entrega, alguns desenvolvedores não efetuam um trabalho bem feito, pulando fases e precipitando o resultado final, além de deixar de realizar os testes necessários, que são essenciais para garantir a segurança do produto.

É clássica a afirmação: “pense o todo, entregue uma pequena parte, o mais rápido possível”. Esse é um mantra praticado especialmente entre as startups.

Por outro lado, há que se considerar sempre que tempo é o recurso mais escasso em qualquer negócio. Pode-se conseguir mais dinheiro, mais recursos humanos, mais insumos… Mas, não há como conseguir mais tempo.

Complexidade e eficiência

Como já destacado, os clientes exigem cada vez mais dos desenvolvedores, solicitando softwares mais estratégicos e com níveis de complexidade maiores. Sobretudo, eles priorizam o imediatismo nas respostas, o atendimento integral a todos as suas necessidades e a segurança que evite falhas e vulnerabilidades de qualquer espécie.

Mudanças durante o desenvolvimento de software

Todo projeto é passível de mudanças ou remodelações integrais ou parciais. Essas alterações são decorrentes da falta de informações suficientes sobre o que o cliente realmente almeja. Trata-se, assim, do tipo de problema que compromete uma análise de requisitos eficiente.

Como todas as informações não são passadas no tempo certo, é necessário ficar realizando modificações durante o desenvolvimento de software para ajustar o produto às expectativas do cliente.

O ideal, por outro lado, seria que as informações básicas fossem passadas durante a análise de requisitos. Adicionalmente, na etapa pós-análise, o contato com o cliente deveria se manter firme, mas sem a necessidade de efetuar modificações muito significativas, que resultam em retrabalhos, custos e comprometem o prazo de entrega.

Por outro lado, deve-se ter sempre em mente que o ambiente de negócios muda com frequencia. Portanto, um sistema bem projetado deve ter a robustez necessária para evoluir conforme as demandas vão aumentando. Isso faz com que todo investimento em arquitetura robusta de software se pague com facilidade.

Dificuldades na utilização do produto

O desenvolvimento de software deve priorizar a usabilidade prática do produto que está desenvolvendo. Desse modo, o software pode até ser complexo em sua produção, mas jamais deve ser difícil de ser usado pelo cliente.

Afinal de contas, um dos diferenciais mais consideráveis atualmente — e aquele que confere maior potencial competitivo para fornecedoras de sistemas de TI — é justamente a boa funcionalidade aliada à praticidade de uso.

Em outras palavras, o usuário precisa manter com o software uma interação satisfatória, seu aprendizado na utilização do produto deve ser rápido e a comunicação entre ambos deve ser simples e transparente.

Como existem inúmeros softwares à venda no mercado — sem contar os aplicativos gratuitos e disponíveis por meio da internet —, fica bem fácil para o cliente mudar de um produto para outro assim que percebe muitas dificuldades em usar o produto que adquiriu.

Soluções

Para contornar as barreiras e superar os desafios que envolvem o desenvolvimento de software, podem ser sugeridas diferentes soluções, contemplando cada caso. De modo geral, é fundamental focar nos clientes, em engenharia, em processos enxutos e nos funcionários.

É fundamental avaliar bem as necessidades dos clientes na etapa de análise de requisitos, usando todos os meios disponíveis, como redes sociais, kiwis, grupos de discussão, questionários online e outros. Eles precisam participar efetivamente das equipes de projetos, acompanhando as etapas de execução. Veja mais detalhes a seguir:

Curva de aprendizado da plataforma/linguagem/Tecnologia

Investir em pessoal, ou seja, nos próprios funcionários, significa prepará-los para usar as tecnologias disponíveis e compreender bem a linguagem de TI e a plataforma de trabalho.

É bem conhecido no mercado a ampla variação de salários de profissionais de TI em função das tecnologias que dominam. Em geral, tecnologias emergentes pagam salários maiores devido à pouca disponibilidade de profissionais no mercado.

Surge aí um dilema: contratar um profissional já formado, com um salário mais alto ou investir na formação de um profissional que ainda não domina a tecnologia.

Quando se opta pela formação, há que se considerar a curva de aprendizado da tecnologia alvo. Quanto mais complexa a ferramenta ou linguagem, mais longa será a curva de aprendizado.

No caso de desenvolvimento de software, esse aprendizado pode compreender tanto linguagens de programação quanto plataformas de desenvolvimento.

Mas, em qualquer das hipóteses: profissional já formado ou investimento em sua formação, o fundamental é que somente com o domínio das ferramentas é que as equipes conseguirão atuar no desenvolvimento de software com mais produtividade e eficiência, promovendo os melhores resultados e satisfazendo o cliente final do produto. Sem dúvida, o conhecimento é um dos fatores básicos para garantir o engajamento do pessoal no projeto.

Reconhecimento do pessoal

Ao lidar com pessoal, convém ainda ter capacidade para identificar, classificar e distribuir competências. Treinamentos costumam contribuir para essa identificação. Além disso, é fundamental considerar competências no processo de recrutamento e seleção de funcionários para o setor de TI e para o desenvolvimento de software.

Também é importante fazer um reconhecimento do trabalho das equipes, oferecendo recompensas sempre que houver compartilhamento das lições, reutilização de componentes, cooperação, participação na otimização dos processos e assim por diante.

Somente por meio do trabalho em equipe, é possível alcançar metas, cumprir prazos, reduzir custos e entregar o melhor produto.

Inspeção

A inspeção é um procedimento de verificação que ajuda a diminuir as falhas e o retrabalho no desenvolvimento de software. São três as principais operações básicas:

  • definição: refere-se ao que será criado;
  • desenvolvimento: refere-se à criação de códigos, testes, documentos necessários em cada etapa do projeto; e
  • testes: são realizados para identificar inconformidades.

Assim, a inspeção permite identificar erros nas primeiras etapas do desenvolvimento de software, tornando mais fácil corrigir esses erros sem gastar muito. De fato, ela diminui o retrabalho para aproximadamente 10% a 20% do esforço total de desenvolvimento.

Reduzindo o retrabalho, são obtidos processos de software mais maduros, assim como melhorias no gerenciamento de riscos e na arquitetura de softwares.

Necessidade de atualização tecnológica constante

Quando se trata de engenharia, é importante buscar as técnicas mais modernas e sofisticadas, capazes de melhorar a produtividade e a qualidade dos processos, bem como aumentar sua velocidade. É preciso considerar, por exemplo, os padrões de arquitetura, a necessidade de reuso de componentes, a integração contínua, o Desenvolvimento Guiado por Testes (TDD) e assim por diante.

Pode-se permitir ainda que os funcionários levem para o setor de TI seus próprios dispositivos de trabalho (BYOD), pois ajudam a diminuir gastos com equipamentos e a aumentar a produtividade. A tecnologia cloud computing também deve ser aproveitada já que possibilita a utilização de plataforma de testes na nuvem e de servidores virtuais.

Uma vez que a escolha das tecnologias deve ser orientada pelo objetivo de conseguir o maior desempenho do projeto, antes de adotar qualquer ferramenta, é preciso considerar o seu custo-benefício e considerar a curva de aprendizado dos profissionais que vão utilizá-la.

Velocidade do desenvolvimento

Veja agora alguns fatores que devem ser considerados para que os projetos ganhem maior velocidade em sua execução:

Maior autonomia para as equipes

Antes de tudo, para motivar ainda mais o trabalho do pessoal, convém garantir mais autonomia às equipes de desenvolvimento de software, conferindo-lhes uma margem maior de poder de decisão. Essa maior autonomia permite que o projeto caminhe com mais rapidez.

Indicadores para medir o desempenho de equipes e recursos

Outro fator que influi na agilidade dos processos, como visto anteriormente, é a utilização da tecnologia mais atualizada. Também convém medir — por meio de ferramentas automatizadas — os índices de desempenho das equipes, dos recursos e próprio software.

Porém, é melhor ter poucos indicadores mais precisos do que muitos indicadores sem serventia, que não ajudam a extrair informações valiosas.

Organização de um cronograma

Para conferir maior velocidade no desenvolvimento de software, é recomendado ainda organizar um cronograma bem definido e fazer de tudo para cumpri-lo, mas sem pular etapas, nem precipitar os acontecimentos.

Simplificação de processos

Simplificar os processos é outra maneira de otimizar o tempo. Ou seja, ainda que o desenvolvimento de software esteja associado à complexidade, é possível readequar o nível dela para acelerar os processos.

Nesse caso, a simplificação não consiste em rejeitar ou não aplicar os recursos necessários, mas em desenvolver um projeto simples e fácil de entender, podendo gerar um software mais fácil de manter e menos propenso a falhas. Mas a simplificação não é uma coisa mágica e seu sucesso depende de discussões entre as equipes na busca da melhor alternativa.

Uso de abordagens apropriadas para adequar os projetos

O setor deve focar em processos enxutos, usando critérios flexíveis de adaptação para adequar o projeto e as operações ligadas a ele. Nesse sentido, é necessário usar alternadamente abordagens diversas, bem como técnicas e métodos como:

  • Kanban: cartões para controle dos fluxos operacionais;
  • Lean: produção enxuta;
  • EVA: método de avaliação de desempenho que considera a necessidade efetiva de investimentos, evitando gastos supérfluos e aumentando o retorno sobre o capital;
  • SCRUM: para melhorar a gestão e a organização do desenvolvimento de software, entre outros.

Terceirização

Com a terceirização, também fica mais fácil obter mais velocidade no desenvolvimento de software. Isso porque contratando os serviços de uma consultoria especializada em TI, as equipes internas de desenvolvimento poderão se dedicar às atividades mais estratégicas, delegando à equipe externa a incumbência de realizar as atividades mais operacionais.

Além disso, a terceirização oferece a oportunidade de o setor de TI entrar em contato com novas abordagens e metodologias, o que pode ser vantajoso para o projeto.

Com tecnologia atualizada, equipe bem preparada e com mais liberdade de ação, simplificação dos processos e apoio de consultoria externa para o desenvolvimento de software, a tendência é que o projeto seja realizado em tempo mais curto e a menores custos.

Qualidade e robustez do software

É preciso entender que não existe suporte técnico bom para um software de má qualidade. Eis porque o desenvolvimento de software e o atendimento devem ser trabalhados juntos a fim de que sejam entregues produtos de boa qualidade e que tenham suporte adequado por profissionais habilitados quando necessário.

Quanto mais qualidade e robustez o software apresentar, menos propenso a falhas e menos dependente de manutenção e substituição ele será. De fato, essa tem sido uma exigência do público na hora de escolher seus produtos.  Afinal, o cliente não deseja ter custos altos de manutenção e a necessidade de substituição do produto após um tempo curto de uso. Para ele, trata-se de um investimento pouco vantajoso.

Sobretudo, o software deve dispor de atualizações automáticas e ser fácil de usar. Assim, o cliente não terá grandes dificuldades em utilizá-lo, nem correrá riscos de comprometê-lo por uso inadequado.

Já as manutenções em um software devem ser de três tipos:

  • corretivas: correção de defeitos na funcionalidade, implicando em acertos de emergência;
  • adaptativas: adaptação do produto ao ambiente eterno onde ele será inserido;
  • perfectivas: acréscimo de novas funções ao software, resultantes geralmente das solicitações dos clientes.

Para produzir um software de boa qualidade, o desenvolvedor de software e sua equipe podem seguir 7 princípios:

  1. O software deve existir para oferecer valor ao usuário;
  2. Priorizar a simplicidade no planejamento;
  3. Manter o foco por meio de uma visão clara e definida, de um conceito integrado, evitando o surgimento de subprojetos incompatíveis com o projeto original;
  4. O software será consumido por alguém — torne seu código acessível a ele;
  5. Contemple o futuro, pois softwares robustos tendem a permanecer mais tempo na linha de produção;
  6. Planejar com antecedência para o reuso de códigos e de projetos, pois essa é uma forma de otimizar o tempo e reduzir custos;
  7. Pensar: o pensamento metódico deve antecipar a ação.

Os melhores resultados

É necessário focar nos clientes, visando: qualidade, atendimento e prazo. Já os processos devem ser ágeis, produtivos e de boa qualidade. Em relação à equipe de desenvolvimento de software, é preciso considerar: competências, autonomia e colaboração. Por fim, no que se refere aos resultados financeiros, o software deve assegurar: boas vendas, bons lucros e baixos custos.

Ao longo deste conteúdo, você pôde perceber que existem diferentes dificuldades e barreiras a enfrentar, mas elas não são intransponíveis. Assim, é possível identificar quais são os desafios e estudar as melhores formas de solucionar cada um deles.

Para o sucesso das ações preventivas e corretivas, é importante contar com tecnologia atualizada, pessoal preparado e processos que reduzem custos e agregam valor de modo a produzir um software de boa qualidade e robustez, que satisfaça o cliente.

Dessa forma, as estratégias de desenvolvimento de software do setor de TI contribuem para conferir mais potencial competitivo à empresa, destacando-a no mercado e permitindo seu crescimento.

Você já aplica alguma dessas soluções para superar as barreiras comuns no desenvolvimento de software? Gostou deste post? Então, assine a nossa newsletter para continuar tendo acesso às nossas novidades e conteúdos sobre tecnologia.


0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *