[Getting Real] Caindo na Real no Desenvolvimento de Software

sexta-feira, 15 de agosto de 2008

Este ultimo mês, finalmente li o livro da 37signals.com, chamado Getting Real, dos mesmos criadores do framework Ruby on Rails, onde eles criticam de maneira agressiva o desenvolvimento de software tradicional, e expõe os seus pontos de vista, e não dão a mínima importância de ir contra a maioria dos conceitos que aplicamos diariamente em nossos projetos.
É uma leitura no mínimo interessante, e com certeza recomendada, tem vários conceitos que ficam inviáveis de se aplicar na maioria das empresas, mas com certeza ajuda a abrir os olhos para muitas coisas, se você não quiser ler o livro, recomendo pelo menos a leitura do resumo que fiz abaixo, boa leitura !!!!
******************************************************
Caindo na Real.
Quer construir uma aplicação web de sucesso? Então é hora de Cair na Real. Caindo na Real é o menor, mais rápido e melhor caminho para construir software. Veja como:
Construir menos
Desenvolver apenas o arroz com feijão.
  • Menos funcionalidades
  • Menos opções/preferências
  • Menos pessoas e estrutura empresarial
  • Menos reuniões e abstrações
Construir software para você mesmo.
Com paixão, realmente goste do que faz, acredite no seu software, seguindo a filosofia da comunidade open source.
Viva o software que você produz, fale dele, realmente se importe com isso.
Financie você mesmo
Não conte com o dinheiro de fora. Isso pode trazer dor de cabeça, pois um projeto financiado traz consigo prazos, cobranças, expectativa, metas, inchação de saco, e por fim acaba sendo produzido um produto medíocre.
Em projeto sem dinheiro de fora você tem tempo para desenvolver e com isso mais qualidade,
O que você pode fazer em 3 meses ao invés de 6 ?
Prazo fixo, orçamento, flexibilidade no escopo.
Faça o arroz e o feijão, aquilo que será o core do sistema, o que puder ser feito dentro do prazo e do orçamento, ótimo, fora disso a qualidade do produto irá sofrer, sempre diminua o escopo, sempre haverá novas features para serem incluídas no futuro.
Tenha um inimigo
Arrume um inimigo, veja um produto no mercado que seja um concorrente e faça algo inovador no seu produto, sem querer imitir, tome um caminho oposto, e faça uma proposta diferente para abordar o seu produto.
Tendo em mente o seguinte pensamento “Não siga o líder”, conte uma história diferente para os seus clientes. Não tente convencer o seu cliente de que ele fez uma escolha errada, ao invés disso mostre as qualidades do seu software.
Menos massa
Quanto mais robusto você for, mais fácil será se adaptar as mudanças.
Menos massa diminuir o custo de mudança.
Mais massa é:
Contratos de longos termos, excesso de burocracia, decisões permanentes, reuniões sobre outras reuniões, processo moroso, inventário (físico e mental), ficar preso a fornecedores, formatos de dados proprietários, o passado mandando no futuro, roadmaps, políticas de escritórios.
Menos massa é:
Pensamento just-in-time, time com membros multi-tarefa, abraçar as regras ao invés de tentar burlá-las, menos software, menos código, times pequenos, simplicidade, formatos de dados abertos, produtos open source, uma cultura aberta que é fácil de admitir erros.
Abrace as Regras
Permita que as restrições guiem você para soluções criativas. Não reclame sobre a falta de recursos (tempo/dinheiro/equipe). Trabalhe com o que tem e veja o lado bom disto. Em um bom time, limitação traz boas idéias (inovação) e força o foco.
Tenha times pequenos
Times pequenos melhoram o entendimento do grupo, potencializa o fluxo de informação e evita guerra de egos. O ideal em um projeto é ter times de até 3 pessoas.
Seja você mesmo e sinta a dor
Seja diferente dos grandes players, trabalhando o lado pessoal sendo amigável com os clientes, dê um atendimento pessoal sempre que possível, atenda seu cliente, conheça seu cliente, por default, empresas pequenas são mais próximas do cliente, utilize isto como uma vantagem, e conheça seu cliente, que desta maneira você irá ver seu produto por um outro foco.
Sinta a dor que o seu cliente passa, quando ele reclama de alguma coisa, NÃO FAÇA OUTSOURCING DO SAC PARA UM CALL CENTER OU UM OUTRO TERCEIRO, FAÇA ISTO VOCÊ MESMO.
Passe confiança para o cliente, a nível de passar o seu número celular se possível, traga o cliente para perto de você, pois isto inspira confiança.
Mantenha o Foco.
O seu aplicativo deve ter uma identidade, um objetivo, e nunca deve perder o seu propósito, tenha sempre em mente o que ele deve fazer e nunca fuja do foco.
Eleja o cliente/mercado correto e foque somente neste nicho, se você tentar agradar a todos, nunca irá dar certo.
Ignore os detalhes no primeiro momento
Faça o seu produto o mais simples possível, pense no “floreamento” em um segundo momento, ou até mesmo deixe para lá, deixe que o usuário trabalhe como o que tem.
É um problema somente quando é um problema
Não perca seu tempo tentando arrumar bugs que não existem, não faça algo pensando em resolver um problema que não existem.
Por exemplo, porque montar uma aplicação altamente escalável em um primeiro momento, se você não sabe ainda se vai precisar, ou não sabe a quantidade de acessos sua aplicação irá ter... crie sua aplicação e depois se preocupe para resolver isto, quando sua aplicação for um sucesso. Pois se formos pensar, sempre teremos que rever a nossa aplicação, em termos de tunning, dimensionamento, etc...
Meio Produto, não Meia Boca.
Atenha-se ao que é verdadeiramente essencial. Boas idéias podem ser tiradas da gaveta. Pegue tudo que você acha que seu produto deve ser e corte pela metade. Remova funcionalidades até que você obtenha apenas o essencial. E então, repita o processo.
FAÇA ALGO QUE VOCÊ POSSA GERENCIAR.
FAÇA UM SOFTWARE PARA UM PÚBLICO GERAL E FAÇA COM QUE O USUÁRIO ACHE SUAS PRÓPRIAS SOLUÇÕES.
O Não é a resposta,
Uma vez com o produto lançado, prepare-se para uma enxurrada de requisições de usuários, do tipo, porque não colocar isso? Porque não coloca aquilo? etc...
A primeira resposta é sempre NÃO. Nós não precisamos de um milhão de funcionalidades, eu mesmo não utilizo metade das funcionalidades do NetBeans, só altere seu produto, quando começar a pipocar várias vezes a mesma requisição.
Outra coisa, você não precisa de uma lista de backlog, o fórum /lista de discussão é o melhor local, pois aquilo que realmente precisa ser feito, irá sempre aparecer.
O que você não quer?
Busque feedback dos usuários, e pergunte por funcionalidades que eles não utilizam ou coisas que eles não querem, então, tire do seu software, mantenha seu software o mais simples possível.
Coloque seu código para rodar,
Não espere muito tempo para colocar seu software no ar, coloque no ar, e vá incluindo novas funcionalidades aos poucos.
Celebre as pequenas vitórias, uma coisa importante é a motivação, diminua suas iterações, no meio de uma semana atribulada busque algo que foi feito durante a semana, uma funcionalidade, uma melhoria, retirar uma funcionalidade não utilizada e comemore... pois isto irá trazer desejo de mais pequenas vitórias.
ABOMINE REUNIÕES.
Você já parou para pensar, em quanto tempo você já perdeu da sua vida em reuniões inúteis ? Muitas né .. pois é, eu também :(,, no livro o cara detona as reuniões. Nunca faça reuniões, somente em último caso, se não tiver como evitar, faça uma reunião de no máximo 30 minutos, convide o menor número de pessoas possíveis, e procure não perder o foco. Sempre tem aquele que acaba desvirtuando para um assunto totalmente fora do foco.
Não contrate,
Mantenha um número pequeno de pessoas, somente contrate em último caso, se sair alguém, espere por um tempo, e veja se aquela pessoa esta fazendo falta, se estiver fazendo muita falta, contrate, senão, não.
Ações, Não Palavras.
Se for contratar, procure caras que fazem open-source, pois de quebra, você pode analisar a qualidade do código, cultura, nível de paixão, se a pessoa é social. Open source rules !!! Contrate caras que sabem escrever bem, tenham boa comunicação, e que sejam entusiasmadas.
Primeiro a interface,
Faça primeiro a interface, depois codifique, fica muito mais fácil quando você vê o produto.
Depois de iniciar o desenvolvimento, desenvolva de dentro para fora, começando pelo núcleo do seu código.
Trabalhe pensando nos 3 estados, no estado regular, que é quando o usuário vê a tela funcionando normalmente, estado da tela em branco, quando o usuário vê a tela ao utilizar a tela primeira vez, este estado é importante pois marca a primeira impressão. E o estado de erro, que é quando acontece algo de errado na aplicação.
Felicidade Otimizada
Utilize ferramentas que deixe seu time feliz e excitado, pois um desenvolvedor feliz é um desenvolvedor produtivo.
Se desenvolvedores fossem pagos para remover código de seus programas,.
Ao invés de escrever novo código, seu software seria muito melhor, pense nisso.
Abra as portas
Disponibilize para o mundo seu software através de RSS, APIs, Widgets etc..
Isso faz toda a diferença, se possível torne seu software extensível.
Amostra Grátis
Quando lançar seu produto, disponibilizar amostras grátis, deixe o seu cliente em potencial testar seu produto, mas deixe sempre funcionalidades na manga para o produto licenciado, deixe a funcionalidade a mostra, quando o usuário clicar na opções, avise-o esta funcionalidade é para clientes que tem uma assinatura, bla bla bla..
Não tem nada de funcional e uma especificação funcional,
Não escreva especificações funcionais, pois elas não refletem a realidade, isso é feito para fazer as pessoas felizes, ela leva para acordo ilusório, pois cada um pode interpretar de uma maneira um texto.
Especificações funcionais levam você a tomar decisões importantes quando você tem menos informação. Essas especificações não fazem você evoluir, mudar, ou revisar pois você fica preso naquele escopo.
E bata de frente com os bloqueadores, pois vai aparecer várias pessoas querendo todo tipo de documentação, o que com certeza vai atrasar todo o processo. O melhor a fazer é ter os conceitos bem formados na cabeça, iniciar um protótipo estático, isto dará uma idéia muito madura do que deve ser feito.
Mais uma vez, NÃO FAÇA DOCUMENTAÇÃO QUE NINGUÉM IRÁ LER.
Escreva estórias, não detalhes.
Lembra do user stories, então, é isso aí.
Fácil para entrar, fácil para sair,
No site, torne fácil o processo de adesão do produto e o de cancelamento, pois é mais difícil um cliente que não teve problemas ao cancelar a assinatura de voltar a assinar do que o cliente que ficou nervoso ao tentar cancelar e não conseguiu.
Evite contratos de longo termo, taxas de assinatura, etc... não tente enganar seu cliente para ganhar mais dinheiro, seja HONESTO sempre.
Luva de Pelica
Precisa dar uma má notícia como aumento de preço, faça de uma maneira que não vá agredir, ou seja, vá avisando aos poucos, enviando emails comentando de melhorias, de novas aquisições (de hardware), etc... e por isso nós próximos meses teremos um pequeno reajuste, bla bla bla.. isso dói muito menos, do que chegar na hora H e pegar o cliente desavisado, é pedir para apanhar.
Lançamento estilo Hollywood
Vá do teaser para o trailer para o lançamento.
O esquema é marketing, para o seu produto faça um lançamento no estilo Hollywood.
Teaser
Alguns meses antes, já inicie o projeto, divulgando o produto em sites relacionados, crie um logo, crie um site promocional, com algumas novidades semana a semana, para ir alimentando a curiosidade de seus futuros clientes. Crie uma lista para as pessoas receberem avisos do que está rolando, novidades.
Trailer
Nesta fase, lance um produto beta com preview de algumas funcionalidades, deixe um grupo de pessoas testarem, e colha opiniões, bugs, etc...
Lançamento
Divulgue, faça com que todos voltem a atenção para o seu software, reformule o hot site, coloque blog, tour, um overview, relate cases, Valores, formulários para inscrição, testemunhos,
Blog é o melhor marketing que existe, você não gasta nada (apenas tempo) e as vezes o efeito é melhor do que uma propaganda na mídia.
Promova seu software através da educação, ensine as pessoas a utilizarem seu software, com tutoriais, vídeo aulas, seminários, etc..
E deixe o software o mais fácil possível, utilize FAQs, e help na aplicação, tente deixar um nível próximo de zero a necessidade de um treinamento.
De um nome
Dê um nome fácil das pessoas guardarem, não precisar ser nada muito óbvio com que a sua aplicação faz.
Resposta Rápida
Responda o mais rápido possível ás dúvidas do seu cliente, o suporte rápido e eficiente deve ser a prioridade no seu negócio, e seja sempre sincero, quando acontecer algum muito errado, por exemplo, deu crash no servidor, seja sincero, e explique o que aconteceu, com certeza ele irá entender.
Mantenha o seu blog atualizado
Um blog parado, passa a impressão que o produto está descontinuado, tirando assim a confiabilidade, atualize sempre, dê uma dica, ensine uma feature, mas mantenha seu blog sempre atualizado
Saiba o que os seus concorrentes estão fazendo.
Se inscreva nos feeds dos seus concorrentes, mas não se aprofunde demais, para o seu produto não perder a personalidade
Siga a maré
Seja sempre aberto para novas possibilidades, e mudanças de direção. Seja um surfista, e não o oceano, tente adivinhar aonde a maré rebenta e se ajuste de acordo ;-).
Aplicando Caindo na Real
Execução.
Todo mundo pode ler um livro, criar um blog, ter uma idéia, todo mundo tem um primo que é web designer.
A diferença entre você e o resto é de como isso será executado. Sucesso se resume a uma grande execução.
Pessoas
Não adianta você aplicar estes conceitos, se você não tem um bom time, com pessoas que realmente gostam do que faz, que se importam com a qualidade do software, pessoas que não guardam informação. Tenha o time certo! Procure os apaixonados.

0 comentários: