do zero a produção em poucas iterações
otimizando o
time to market
time to market
chico sokol
francisco.sokol@caelum.com.br
http://www.caelum.com.br
http://www.casadocodigo.com.br
silveira
silveira
guilherme.silveira@caelum.com.br
http://www.caelum.com.br
http://www.caelum.com.br/online
PARTE 1: Contexto
guj.com.br
guj.com.br
9 anos de código
fs
158 mil usuários
1.5 milhões de mensagens
fs
problema: fórum
fs
assusta novos
usuários
século
20
vantagem: favorece
discussões
desvantagem: dificulta QA
evolução de código pouco
a pouco é possível?
9 anos
PQ É DIFICIL EVOLUIR?
pq é difícil evoluir?
1. funcionalidade distante do foco
2. falta de testes
3. ausência dos criadores
4. mudanças chateiam usuários
5. pq as decisões foram tomadas?
6. gap de anos desde a
última feature nova
fs/
gs
versão nova do ZERO
9 anos => não dava mais
para evoluir aos poucos
fs
Decisão:
Não vale a pena evoluir o código atual
fs
PARTE 2:
COMO FAZER?
COMO FAZER?
Como fazer?
• Compra?
• Adapta um open source que já existe?
• Cria o código do zero?
• Mistura tudo isso?
diminuir o time to market
(e o custo de entrada)
(e o custo de entrada)
fs
1. buy it “off the shelf”
mythical man month
procuramos
um software pago
um software pago
MUITO CARO!
proposta de
internacionalização
internacionalização
MUITO CARO!
2. diversos + adaptaropen source
fs
3 pessoas + novas
e 1 mais experiente
Tentamos
3 meses
Encontramos
diversos problemas
fs
fs
internacionalização
espalhado
por
todo
canto
espalhado
por
todo
canto
espalhado
por
todo
canto
espalhado
por
todo
canto
espalhado
por
todo
canto
Linguagem (python)
o problema não é
aprender a linguagem
o problema é
aprender as boas práticas
fs
contratar o criador?
Linguagem (python)
curto prazo ok
longo prazo ok
fs
um único autor
1) cowboy (“macho” alpha)
2) forever alone
Problemas de um único autor
suporte e documentação
inexistente
contactamos
não fechou a conta
espagueti fs
código
espagueti!=
problemas
• i18n espalhada
• linguagem desconhecida para a equipe
• código espagueti
• desenvolvido por um único autor
• problemas clássicos de engenharia que não
foram cuidados antes
fs
entregou para users alpha
mas ficou a dúvida
continua a abordagem?
fs
falhar em 3 meses
não é falhar rápido
faltou: a retrospectiva
500 anos sem retrospectiva
a retrospectiva com olhar
do produto no lado técnico
Retrospectiva adicionando uma chance
para mudar o caminho.
$
3. escreve uma
versão nova do ZERO
ZERO
$
$
$
$$
$
$
$
$
$
$ $
pergunta:
- substitui de uma vez
- em paralelo
em paralelo
em paralelo
fs
Feedback zero
infinitas
reclamações
Time to market ruim
Bugs
fs
Feedback
cedo
Time to
market
#win
Bugs
Reclamações
lembrando que já
passaram 3 meses!
fs
fixamos
prazo e escopo
o que acontece nesse caso?
vamos tentar
substituir em paralelo
nossa dúvida é qual das
duas variáveis vai estourar,
e pra qual lado
data+escopo => ~objetivo
pronto!
podemos começar
podemos começar
FASE 1
- escrever do zero
- implementar o *mínimo
viável*
- implementar o *mínimo
viável*
- escrever do zero
- implementar o *mínimo
viável* do minimo viavel
- implementar o *mínimo
viável* do minimo viavel
minimo viavel
- implementar o *mínimo
viável* do minimo viavel do
minimo viavel
além do release planning,
iterações menores
menores
fs
reunião++
Text
discussões a serem
feitas:
- linguagem
- framework
- design e usabilidade
- funcionalidades
minimas
fs
discutimos:
- funcionalidades minimas
- funcionalidades minimas
fs
goela abaixo:
- linguagem escolhida
- framework escolhido
- framework escolhido
- framework escolhido
ditador
benevolente
discussões são aceitáveis
ele tem a palavra final
escolhido um caminho, todos o seguem
design: depois
cores
imagens
responsivo
fs
usabilidade: ok
validações
ajax x não ajax
maneira de interagir
ao clicar, aparece algo
fs
if pronto => continuaríamos
fs
se não ficasse pronto,
voltariamos pro plano
anterior
Gostei do projeto!
desafio
tempo esperado desafiador
tecnologias que dominamos
somos capazes?
fs
ações
muita gente pareando muito tempo
nível de experiência diferente (troca de experiências)
+ da metade tinha - de 1 ano de experiência
fs
bastante revisão de código
produtividade++
pq?
linguagem e tecnologia que a equipe domina
não só a equipe, mas toda a empresa
green field
desafio topado pela equipe
equipe x
ferramentas
a equipe original tinha uma pessoa com mais experiência
o problema não estava na equipe
problemas mostrados até agora
resultados da
fase 1
iterações acabaram mais cedo
2 semanas, tudo ok
sem design
usabilidade implementada
fs
FASE 2
fs
- continuar
- implementar outras features
outras features
fs
lançamento
fechado
usuários convidados
encontra mais bugs
design pronto (vários devs envolvidos)
fs
deploy contínuo
ambiente de produção
teste de end-to-end
scripts de deploy
até hoje: +1 deploy por dia, só 2 bugs graves
fs
lançamento
aberto
usuários que querem se aventurar colaboram
quem não quer se aventurar, não reclama
encontra mais bugs, fica mais estável
feedback rápido
melhora usabilidade
criar usuários fiéis
fs
gs
misc da fase 2
iterações continuaram surpreendendo
prática de deploy contínuo somente quando necessária
menos pareamento
em beta
encontramos problema de performance
otimização de performance somente quando necessária
até esse instante sem testes ligados a performance
há monitoramento (newrelic)
fs
próxima fase
troca
fs
hoje
4000 pessoas
2500 perguntas
3700 respostas
participe!
www.guj.com.br/perguntas
fs
< 2 meses
revisando
fs
gs
continuar o
atual?
adaptar?
criar do
zero?
deploy
em
produção
débito
técnico
m
uito
alto
usuários
alfa
criar do
zero
m
inim
um
viable
product
im
plem
entação
lógica
aprovação
do
cam
inho
design
+pareamento
revisão de código
testes de unidade
testes end-to-end
integração contínua
-pareamento
entrega contínua
usuários
beta
todos
os
usuários
problem
a
de
perform
ance: otim
izações
iterações curtas
ditadura benevolente
FASE
0
FASE
1
FASE
1
FASE
2
FASE
3
Obrigado!
guilherme.silveira@caelum.com.br
http://www.caelum.com.br
http://www.caelum.com.br/online
http://www.casadocodigo.com.br
francisco.sokol@caelum.com.br

Otimizando o time to market - do zero a produção em poucas iterações