Desenvolvimento de Software: Velocidade ou Qualidade?

O que é mais importante para você? O que é mais importante para sua empresa? O que seu superior responsável valoriza no desenvolvimento de software?

Entregar rápido ou entregar com qualidade?

Na teoria a maioria valoriza a qualidade, mas na prática, muitos poucos fazem acontecer. Existem empresas, desenvolvedores e vários gestores que nem questionam isso, sendo uma questão totalmente inexistente, ignorada e deixada a sorte do destino. Cada desenvolver, seja júnior, sênior e pleno faz o quem bem quer.

Doa a quem doer, hoje vou te contar a verdade desse descaso, te mostrando os efeitos colaterais desse fato em três esferas:

  1. na gestão do projeto
  2. na equipe de desenvolvimento
  3. nos clientes da da solução

1º Gestão

Vou te apresentar os números da gestão de uma empresa anonima que desenvolve software e que se enquadra nesse caso:

O gráfico acima mostra o números de desenvolvedores usadas para desenvolver 8 versões de um sistema. Começou com menos de 10 e terminou com 1.200 desenvolvedores. Tenho certeza que você vai concordar que esse crescimento deve ser uma indicação de sucesso significativo!

Agora, vamos analisar a produtividade da equipe no mesmo período de tempo, medido por linhas simples de código.

Claramente existe algo errado aqui. Mesmo que cada lançamento seja apoiado por um número cada vez maior de desenvolvedores, o crescimento do código parou na faixa de 7 mil.

Agora, segue um gráfico realmente assustador, a próxima figura mostra o custo de linha de código e sua mudança ao longo do tempo.

O que causou essa mudança notável na produtividade? Por que o código esta 40 vezes mais caro para produzir na versão 8 em oposição ao lançamento 1?

Do ponto de vista dos desenvolvedores, isso é tremendamente frustrante, porque todo mundo está trabalhando duro. Ninguém diminuiu seu esforço. E, no entanto, apesar de todos os seus heroísmos, horas extras e dedicação, sábados e domingos, a coisa simplesmente não acontece. Todo o esforço da equipe é consumido com o “gerenciamento da bagunça”. O trabalho é praticamente o mover a bagunça de um lugar para outro, e o próximo, e o próximo, para que possam adicionar mais um pequeno recurso.

Não se esqueça que, o mais importante nessa empresa é entregar a próxima nova funcionalidade…

Se você acha que é ruim, imagine o que esta imagem parece para quem esta bancando a conta:

A figura acima mostra dados da folha de pagamento no mesmo período. Esses números não são sustentáveis. Não importa quão rentável a empresa seja: essas curvas drenam catastroficamente o lucro do modelo de negócio e levar a empresa a um colapso financeiro. Qualquer gestor financeiro examinaria esses dois gráficos e saberia que a ação é necessária para evitar o desastre.

Mas que ação pode ser tomada? O que deu errado? O que causou esse declínio incrível na produtividade? O que os executivos podem fazer, além de culpar sua equipe de  desenvolvimento?

É isso que acontece quando as empresas valorizam mais a entrega do que a qualidade.

Chega um ponto no ciclo de vida da gestão do projeto de software que o custo da mudança fica bem mais caro que o beneficio ou ROI da manutenção.

O pior de tudo é ver que muitas empresas estão nesse patamar e não tem nem a capacidade de identificar isso, vivendo no prejuízo constante.

Você já viu uma “fabrica de software” quebrar? Ou um setor de desenvolvimento “in-house” ser totalmente desfeito? Eu já!

A medida da qualidade de um software é simplesmente a medida do esforço necessário para atender às mudanças da necessidades do cliente. Se esse esforço é baixo, e permanece baixo em todo a vida útil do sistema, a qualidade é boa. Se esse esforço cresce com cada nova versão, a qualidade é ruim. É simples assim.

2º Equipe

Mas mudando de assunto, você já deu manutenção em um sistema que foi feito sem qualidade? Gostou? Foi uma boa experiência?

  • Não se acha nada.
  • Não da para alterar partes internas.
  • Não da para mover estruturas.
  • Não da para substituir partes internas.
  • Quando se tenta alterar um parte, quebra outra.
  • O desenvolver fica cansado, estressado e infeliz.
  • Nenhum desenvolvedor quer assumir uma mudança ou mexer no sistema.
  • Não existe controle, confiança ou segurança.
  • Alguns desenvolvedores preferem sair da empresa a viver nesse ambiente.
  • Alguns desenvolvedores preferem desistir de um novo emprego quando veem que vão entrar nesse barco.

A pior coisa que existe no desenvolvimento de software é você dar manutenção em um sistema tudo bagunçado que não foi você que fez.

Você já passou por isso? Já sentiu na pele esses efeitos?

3º Cliente

Você sabe a opinião de usuários finais que fazem uso desse tipo de sistema?

  • O sistema não atende as mudanças de negócios.
  • A solução não é competitiva.
  • A solução não é estratégica pois sempre chega atrasada.
  • Novas versões são um terror, por que já sabem que vai gerar erros ou quebrar partes não relacionadas.
  • O sistema não presta…
  • A equipe responsável é incompetente.
  • O setor de desenvolvimento é considerado como “despesa” e não como “estratégico” para negócio.

Conclusão

Qualquer um pode fazer um software, um adolescente, um estagiário, um universitário e etc. Mas fazer um bom sistema não!

Fazer um sistema de qualidade é outra questão. É difícil, precisa de conhecimento e habilidades que a maioria dos programadores não tem tempo de desenvolver. Requer um nível de disciplina e dedicação que a maioria da empresas não valorizam em fazer. Principalmente, é preciso uma paixão pelo artesanato e o desejo de ser profissional. E quando você faz um software com qualidade, algo mágico acontece:

  • Você não precisa de centenas de programadores para mantê-lo funcionando.
  • Você não precisa de documentos massivos de requisitos e enormes sistemas de rastreamento de problemas.
  • Você não precisa de equipes de programação 24/7.
  • Quando o software é feito corretamente, requer uma fração dos recursos humanos para criar e manter.
  • As mudanças são simples e rápidas. Os defeitos são poucos e distantes entre.
  • O esforço é minimizado e a funcionalidade e a flexibilidade são maximizadas.

Mudança de Paradigma

O que eu tenho que fazer para entregar um software com qualidade?

Mude o paradigma: para de focar só na entrega e coloque a qualidade no mesmo patamar como premissa de projeto!

Na prática, como eu faço isso?

Na engenharia de software: Qualidade = Organização = Práticas, Diretrizes, Valores tem um único nome = ARQUITETURA DE SOFTWARE!

O objetivo da arquitetura de software é minimizar os recursos humanos necessários para construir e manter o sistema requerido.

Arquiteto de Software

Esse é o principal papel do arquiteto de software nas empresas, lutar com todas as forças e recursos possíveis para não deixar isso acontecer. Gostaria de entrar nessa luta comigo? Segue sugestões de cursos:

Vamos que vamos, boa semana!

“Abrão creu em Deus, o SENHOR, e por isso o SENHOR o aceitou.” Gênesis 15:6

Anúncios

Usando SDK paralelas com jEnv

Com essa flexibilidade de poder usar varias JDK de diferentes provedores, estamos vivendo um terror nos ambientes de desenvolvimento, aonde a mesma estação de programação precisar ter N JDK instaladas, cada uma sendo usada para um projeto. Manualmente nas IDE, é possível gerenciar a troca dessas versões, mas é algo chato, demorado e manualzão.

Existe alguma forma mas automática e dinâmica de fazer isso?

Sim, veja a ferramenta jEnv feita exclusivamente esse proposito. Se na sua empresa ta complicada trabalhar assim, tente usar o jEnv e veja se melhora. Até a próxima 🙂 !

“Não fique pensando que você é sábio; tema o SENHOR e não faça nada que seja errado.” Provérbios 3:7

Arquitetura Hexagonal com Java – Curso Presencial Londrina

Objetivo

Objetivo desse curso é oferecer aos participantes conhecimentos teóricos e práticos relacionados ao uso do padrão de projeto arquitetural conhecido como “Hexagonal Architecture”.

O curso aborda toda a teoria, valores, conceitos e metáforas, fazendo a implementação um estudo de caso funcional 100% prático em Java usando: JDK, IntelliJ, TDD, JUnit, Java 12, Java Module, Spring Framework, JavaFX e banco de dados relacional HSQDB, aplicando e provando os conceitos ministrados.

1º Turma

Em Londrina-PR, as segundas feiras dia 24/06, 01/07, 08/07 e 15/07 das 18:45 as 22:30. Valor R$ 300,00, boleto bancário ou cartão de crédito, em até 3 x. O aluno é responsável por trazer seu notebook pessoal compatível com o curso. Duvidas entre em contato comigo via WhatsApp: 43 98407-4007. Vagas limitadas!

Brinde

Todos os alunos dessa primeira turma presencial ganharão ao mesmo curso na Udemy grátis após lançamentos.

Conteúdo programático:

Módulo 1 – Teoria e Fundamentos

Introdução

  • O que é?
  • Para que serve?
  • Quando surgiu?
  • Qual o objetivo?

Isolamento

  • SoC
  • Centro como hexágono.
  • Lado superior esquerdo.
  • Lado inferior direito.

Atores

  • O que é?
  • Para que serve?
  • Ator Primário Condutor (Driver)
  • Ator Secundário Conduzido (Driven)

Dependências

  • O que é?
  • Para que serve?
  • Centro como hexágono.
  • Lado superior esquerdo.
  • Lado inferior direito.

Portas

  • O que é?
  • Para que serve?
  • Porta Primária Condutor (Driver)
  • Porta Secundária Dirigida (Driven)

Adaptadores

  • O que é?
  • Para que serve?
  • Adaptador Condutor (Driver)
  • Adaptador Dirigido (Driven)

Adaptadores Simulados (Mock)

  • O que é?
  • Para que serve?

Fluxo de Execução

  • O que é?
  • Como funciona?

Inversão de Controle – IoC

  • O que é?
  • Como funciona?

Dependências Configuráveis

  • O que é?
  • Para que serve?
  • Lado superior esquerdo.
  • Lado inferior direito.

Exemplo Real

  • Aplicativo de Gerenciador de tarefas
  • Diagrama

Conclusão

  • Pontos Positivos
  • Pontos Negativos
  • Quando usar ou não usar?
  • Leitura Complementar
  • Fechamento

Módulo 2 – Decisões de Design

Opções de Design

  • Organização de IDE/Projeto
  • Organização de Pacotes
  • Padrões de Regras de Negócios
  • Organização de Portas Primárias
  • Transferência de Dados
  • Dependências para Objetos de Backservices

Classes e Serviços Dentro do Hexágono

  • Modelo de Domínio
  • Serviço de Domínio
  • Portas Dirigidas
  • Portas Condutoras

Serviços Fora do Hexágono – Lado Inferior Direito

  • Adaptadores Dirigidos

Serviços Fora do Hexágono – Lado Superior Esquerdo

  • Adaptadores Condutores.

Fluxo de Execução

  • O que é?
  • Como funciona?
  • Digrama de execução

Sequência de Desenvolvimento

  • O que é?
  • Como funciona?

Módulo 3 – Projeto e Implementação com Java

Caso de uso: Transferência Bancária

  • O que é?
  • Como funciona?
  • Protótipo
  • Tecnologias: JDK, IntelliJ, TDD, JUnit, Java 12, Java Module, Spring Framework, JavaFX e banco de dados relacional HSQDB.
  • Decisões de Design de projeto
  • Montagem do ambiente de desenvolvimento

Implementação

  • Parte 1
  • Parte 2
  • Parte 3
  • Parte 4
  • Fechamento

Para os interessados nesse curso on-line, aguarde o lançamento na Udemy. Estarei disponibilizando com um preço promocional de lançamento.

“Deus, que vive no seu santo Templo, cuida dos órfãos e protege as viúvas.” Salmos 68:5

Curso Presencial Londrina-PR: Arquitetura Hexagonal com Java

Objetivo

Objetivo desse curso é oferecer aos participantes conhecimentos teóricos e práticos relacionados ao uso do padrão de projeto arquitetural conhecido como “Hexagonal Architecture”.

O curso aborda toda a teoria, valores, conceitos e metáforas, fazendo a implementação um estudo de caso funcional 100% prático em Java usando: JDK, IntelliJ, TDD, JUnit, Java 12, Java Module, Spring Framework, JavaFX e banco de dados relacional HSQDB, aplicando e provando os conceitos ministrados.

1º Turma

Em Londrina-PR, as segundas feiras dia 24/06, 01/07, 08/07 e 15/07 das 18:45 as 22:30. Valor R$ 300,00, boleto bancário ou cartão de crédito, em até 3 x. O aluno é responsável por trazer seu notebook pessoal compatível com o curso. Duvidas entre em contato comigo via WhatsApp: 43 98407-4007. Vagas limitadas!

Brinde

Todos os alunos dessa primeira turma presencial ganharão ao mesmo curso na Udemy grátis após lançamentos.

Conteúdo programático:

Módulo 1 – Teoria e Fundamentos

Introdução

  • O que é?
  • Para que serve?
  • Quando surgiu?
  • Qual o objetivo?

Isolamento

  • SoC
  • Centro como hexágono.
  • Lado superior esquerdo.
  • Lado inferior direito.

Atores

  • O que é?
  • Para que serve?
  • Ator Primário Condutor (Driver)
  • Ator Secundário Conduzido (Driven)

Dependências

  • O que é?
  • Para que serve?
  • Centro como hexágono.
  • Lado superior esquerdo.
  • Lado inferior direito.

Portas

  • O que é?
  • Para que serve?
  • Porta Primária Condutor (Driver)
  • Porta Secundária Dirigida (Driven)

Adaptadores

  • O que é?
  • Para que serve?
  • Adaptador Condutor (Driver)
  • Adaptador Dirigido (Driven)

Adaptadores Simulados (Mock)

  • O que é?
  • Para que serve?

Fluxo de Execução

  • O que é?
  • Como funciona?

Inversão de Controle – IoC

  • O que é?
  • Como funciona?

Dependências Configuráveis

  • O que é?
  • Para que serve?
  • Lado superior esquerdo.
  • Lado inferior direito.

Exemplo Real

  • Aplicativo de Gerenciador de tarefas
  • Diagrama

Conclusão

  • Pontos Positivos
  • Pontos Negativos
  • Quando usar ou não usar?
  • Leitura Complementar
  • Fechamento

Módulo 2 – Decisões de Design

Opções de Design

  • Organização de IDE/Projeto
  • Organização de Pacotes
  • Padrões de Regras de Negócios
  • Organização de Portas Primárias
  • Transferência de Dados
  • Dependências para Objetos de Backservices

Classes e Serviços Dentro do Hexágono

  • Modelo de Domínio
  • Serviço de Domínio
  • Portas Dirigidas
  • Portas Condutoras

Serviços Fora do Hexágono – Lado Inferior Direito

  • Adaptadores Dirigidos

Serviços Fora do Hexágono – Lado Superior Esquerdo

  • Adaptadores Condutores.

Fluxo de Execução

  • O que é?
  • Como funciona?
  • Digrama de execução

Sequência de Desenvolvimento

  • O que é?
  • Como funciona?

Módulo 3 – Projeto e Implementação com Java

Caso de uso: Transferência Bancária

  • O que é?
  • Como funciona?
  • Protótipo
  • Tecnologias: JDK, IntelliJ, TDD, JUnit, Java 12, Java Module, Spring Framework, JavaFX e banco de dados relacional HSQDB.
  • Decisões de Design de projeto
  • Montagem do ambiente de desenvolvimento

Implementação

  • Parte 1
  • Parte 2
  • Parte 3
  • Parte 4
  • Fechamento

Para os interessados nesse curso on-line, aguarde o lançamento na Udemy. Estarei disponibilizando com um preço promocional de lançamento.

“Deus, que vive no seu santo Templo, cuida dos órfãos e protege as viúvas.” Salmos 68:5