Transformando código aberto em um projeto comercial
http://www.locaweb.com.brhttp://spreecommerce.com
Fernando Hamasaki de Amorim a.k.a. Prodishttp://prodis.pro.brhttp://twitter.com/prodis
+
Agenda
• Cenário atual
• O que é o Spree
• Transformação do Spree em WebStore
• Equipe e ambiente de trabalho
• Introdução ao “Mundo do Software Livre”
• O que vem pela frente
Loja Pronta
• Grátis
• Multi-usuário
• Mais de 10.000 instalações
• Desenvolvida em ASP (código de 2006)
• Roda em Windows Server 2003
• Banco de dados SQL Server (8 servidores)
Loja Pronta
• Não possui testes automatizados
• Difícil de dar manutenção
• Cada nova instalação cria uma nova base de dados
• Alto custo de infraestrutura de servidores
• Problemas de escalabilidade (processo ASP)
Necessidade
• Substituir a Loja Pronta por outra solução
• Mais escalável, fácil de dar manutenção, testável
• Menos custos de infraestrutura
• Recursos adicionais
• Oferecer essa solução como um serviço pago (SaaS)
Outros fatores
• Equipe com conhecimento do negócio
• Desenvolvedores experientes com plataforma Windows e .NET
• Desejo de criar uma aplicação na plataforma Unix, preferencialmente utilizando Ruby on Rails
Opções
• Refazer a Loja Pronta em .NET
• Criar uma nova loja do zero em Ruby on Rails
• Utilizar uma plataforma de Comércio Eletrônico já existente (Spree, Magento, OS Commerce)
Spree
• Plataforma completa de Comércio Eletrônico em Ruby on Rails
• Suporte a SEO e internacionalização
• Projeto de código aberto (BSD License)
• Um dos projetos mais forkados no Github
• Extensível através das Spree Extensions
Locaweb Extension
• Uso de meios de pagamentos nacionais
• Integração com Correios (cálculo de frete)
• Alteração dos passos de checkout
• Escolha de temas pré-definidos
• Integração com sistemas da Locaweb
• Outras melhorias
Locaweb Extension
• Toda essa flexibilidade tem um preço
• Maior esforço de análise e desenvolvimento
• Necessário escrever uma quantidade maior de código
• Uso massivo de metaprogramação em Ruby
Gems e Plugins
• Active Merchant
• State Machine
• Resource Controller
• Authlogic
• Paperclip
• Outros
Prós do Spree
• Grande parte do trabalho já está pronto
• Comunidade desenvolvendo para Spree
• Aprendizado com código de outras pessoas
• Extensível sem ser intrusivo
Contras do Spree
• Curva de aprendizado para entender o código
• Tem poucos testes
• Code smells (métodos longos, classes com mais de uma responsabilidade, etc)
• Complexidade desnecessária em alguns pontos
Equipe
• Product Owner (PO)
• Lider Técnico
• Seis Desenvolvedores
• Quality Assurance (QA)
• User Experience (UX)
Equipe
• Equipe inicial experiente em .NET
• Consultoria da Caelum em Ruby on Rails
• Inclusão de dois desenvolvedores com conhecimento em Ruby on Rails
• Aprendizado em grupo (dojos, eventos, etc)
• Muito investimento pessoal em estudo de cada integrante da equipe
Metodologias Ágeis
• Inicialmente utilizamos Scrum
• Atualmente uma variação de Kanban
• Programação Extrema (XP)
• Programação em pares a maior parte do tempo
• Estações de pareamento
A importância de testes
• Test-Driven Development (TDD)
• Behavior-Driven Development (BDD)
• RSpec + Cucumber
• Atualmente PO e QA estão definindo testes de aceitação e casos de testes
• QA aprova as histórias junto com PO
Integração Contínua
• Hudson (http://hudson-ci.org)
• Git (http://git-scm.com)
• RSpec (http://rspec.info)
• Cucumber (http://cukes.info)
• Metric_fu (http://metric-fu.rubyforge.org)
• RPM (http://www.rpm.org)
Introdução ao “Mundo do Software Livre”
• Maior parte da equipe nunca havia se envolvido com um projeto de código aberto
• A equipe tinha uma expectativa que os mantenedores oferecessem soluções para nossos problemas
• Mas então a equipe entendeu que o processo é o inverso
Contribuições em extensions
• Correios (cálculo de frete)
• Meios de pagamentos nacionais
• Proposta para melhorar a maneira de organizar código de extensions
Contribuições diretas no Spree
• Traduções para português
• Correções de bugs
• Customização de layout com temas
• Cálculo de frete no carrinho de compras, antes de informar dados de usuário
Transformando código aberto em um projeto comercial
http://www.locaweb.com.brhttp://spreecommerce.com
Fernando Hamasaki de Amorim a.k.a. Prodishttp://prodis.pro.brhttp://twitter.com/prodis
+