segunda-feira, 12 de maio de 2014

Inovação no Desenvolvimento de Software

Tive a oportunidade de trabalhar em diversas empresas de software (já se vão mais de 30 anos), e a maioria delas tem o mesmo principio no desenvolvimento de seus produtos. O modelo adotado tanto pelas grandes empresas do exterior quanto pelas brasileiras é idêntico. Eles desenvolvem um sistema inicial e com o passar do tempo vão adicionando novas funcionalidades (por força do mercado, por solicitação de clientes, etc) e acabam criando um excesso de funcionalidades. Com isto o sistema se torna mais complexo a cada ciclo de nova versão e atualização.
A maioria das empresas de software mantém praticamente inalterado a fórmula que as trouxe sucesso no passado mas que não garantirá o seu futuro. Porquê ?
As novas funcionalidades adicionadas são acumuladas e nem sempre revistas e periodicamente são enviadas para clientes com contratos de manutenção, obrigando-os a reimplantarem o sistema, mesmo que não tenham necessidade do que está sendo entregue, ou queiram apenas uma parte do todo.
O problema se inicia basicamente ai... 
Como os software rodam nos servidores dos clientes, os fornecedores não tem ideia de quais as funcionalidades os clientes realmente usam e nem imaginam quais as dificuldades reais os clientes passam com o uso do produto.
Por sua vez os fornecedores não tem condições de garantir que todos os clientes migrem simultaneamente para a última versão e acaba ficando com gastos de manutenção não previstos e suporte em diversas versões, o que reduz a rentabilidade da empresa, sem que ela tenha uma alternativa imediata para este problema a não ser insistir para que os clientes migrem para uma nova versão.
O que poderia contribuir com os fornecedores, seria ouvir os clientes, eventualmente, alguns pedidos, sugestões e criticas são formulados. Portanto muitas das novas funcionalidades não se mostram atrativas para muitos clientes. Eles não precisam delas e não deveriam ser incorporadas ao núcleo do sistema.
Uma das soluções seria o modelo SaaS (Software as Service), aonde o fornecedor, por ter o software operando em seus servidores teria maior domínio da situação. Com esta característica o fornecedor tem condições de entender o cenário de uso dos sistemas e pode ser mais responsivo no momento de necessidade de uma atualização massiva.
Para que isto aconteça se faz necessário redesenhar o software atual para o modelo de cloud e desenvolver outros diretamente para este novo modelo. Vale comentar que não é simplesmente operá-lo em uma máquina virtual da mesma forma que o software é operado hoje. Se faz necessário uma nova arquitetura, modular com ampla adoção dos conceitos de SOA, aonde a tônica seriam os mecanismos de rastreamento e capacidade de se configurar automaticamente para que cada usuário tenha as funcionalidades que precisa e pague apenas pelo que utiliza. 
Em função de operar nos servidores do fornecedor em cloud, todos usuários passam a ter a mesma versão.
Um outro ponto importante a citar, diz respeito aos processos de desenvolvimento de software que precisam ser aprimorados para que a entrada em operação de uma nova versão não provoque danos, pois com o modelo de cloud, um erro afeta todos os usuários do sistema e portanto devem implementar mecanismos de retorno imediato a versão anterior. Claro que a divisão da aplicação e bons mecanismos de qualidade podem reduzir estes problemas.
Os bastidores das empresas de software tendem a se modificar muito para atender as sempre constantes novas demandas, mas é de fundamental importância que os fornecedores se adaptem para melhorar a experiência dos clientes. Imagine que toda vez que você tiver que migrar a versão do ERP você precisa fazer uma implantação. Isto não cabe mais neste novo cenário, alguns clientes podem aproveitar para validar o uso do software do concorrente exatamente neste momento, pois o stress do processo é muito parecido. 
O design de interface passa a ter um papel importante no projeto de software, pois com uma interface de fácil utilização reduz a necessidade de treinamento do usuário final. As interfaces atuais merecem ser aprimoradas para se encaixarem no modelo de APPS já consolidado no mundo mobile. Devem ser mais intuitivos e de fácil uso.
Com este novo paradigma, as empresas de software deve sofrer uma grande modificação no processo o desenvolvimento. As adições de novas funcionalidades e as alterações devem ser feitas de  forma contínua, permitindo agilidade na implantação. 
A oportunidade para um novo modelo de negócios está aberta e em processo de consolidação, portanto em vez de receber 500 K no ato da venda que tal receber um milhão em forma de micro pagamentos, um formato totalmente diferente do que é hoje.
O próprio software pode embutir mecanismos de incentivo à aquisição de novas funcionalidades, como a Amazon usa para vender livros tipo “quem comprou este livro, também comprou este outro” pode ser adaptado para “quem usa esta funcionalidade, também usa esta outra”.
O processo de vendas precisa se modificar. Vendemos software como Henry Ford iniciou a venda de carros padronizados em 1908. Parafraseando Ford - "O cliente pode ter o carro que quiser contanto que seja preto". "O cliente pode ter o software que quiser contanto que tenha uma tela azul no inicio!"
O software precisa ser um conjunto de funcionalidades onde o cliente escolhe o seu próprio cardápio e monta o seu próprio aplicativo. A venda deixa de ser produto padronizado para venda consultiva, onde é muito mais importante entender as necessidades e demandas do cliente e de seu negócio do que a tecnologia que está no software. 
O discurso não é mais enlatado, mas individualizado, um para um. 
A industria do software não será a mesma como a conhecemos hoje. Big Data, Plataformas Sociais, Mobildiade e Cloud estão transformando todos os setores e estas ondas também vão afetar todos independente de tamanho. Será que os CIO das industrias de Software estão se preparando para estas mudanças ?