locaweb + spree: transformando código aberto em um projeto comercial

60
Transformando código aberto em um projeto comercial http://www.locaweb.com.br http://spreecommerce.com Fernando Hamasaki de Amorim a.k.a. Prodis http://prodis.pro.br http://twitter.com/prodis +

Upload: fernando-hamasaki-de-amorim

Post on 18-Dec-2014

3.170 views

Category:

Technology


2 download

DESCRIPTION

Os desafios, benefícios, dificuldades e lições aprendidas que a equipe de desenvolvimento de SaaS da Locaweb teve na utilização do Spree, uma plataforma de comércio eletrônico de código aberto, como base de seu novo sistema de loja virtual multi-usuário, desenvolvido em Ruby on Rails. O poder e o dinamismo do Ruby tiveram destaque, com grande utilização de metaprogramação nas extensões do Spree.

TRANSCRIPT

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

Cenário Atual

Loja Pronta

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

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

Transformação do Spree em WebStore

Spree Extensions

Locaweb Extension

Locaweb Extension

Locaweb Extension

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

Spree Extensions$ script/generate extension MinhaExtension

Spree Way

Spree Way

Locaweb Way

Locaweb Way

Locaweb Way

Locaweb Way

Locaweb Way

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

Contras do Spree

Equipe e Ambiente de Trabalho

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

Programação Pareada

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

Ciclo BDD

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)

Integração Contínua

Introdução ao “Mundo do Software Livre”

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

Introdução ao “Mundo do Software Livre”

O que vem pela frente

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

Checkout no Spree

Checkout no Spree

Checkout no Spree

Checkout no Spree

Checkout no Spree

Checkout no Spree

Checkout no Spree

Checkout no Spree

Checkout na WebStore

Checkout na WebStore

Checkout na WebStore

Checkout na WebStore

Checkout na WebStore

Perguntas

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

+