O Ciclo da Vida
@luizborba
http://borba.blog.br
1
A Visão
SCRUM
de cabo a rabo
Luiz Borba
borba@pitang.com
Uma empresa
C.E.S.A.R
5/4/14
slide 39
Visão
!  Essência
!  Por que esse projeto está sendo feito?
!  Quais os objetivos
!  Investimentos x Retorno
Exemplos
THE LEAN STARTUP
Luiz%Borba%
@luizborba%
h.p://borba.blog.br%
startup is an organization
formed to search for a
repeatable and scalable
business model
Steve Blank
February 1, 2005
http://amzn.to/lPHq10
Customer)Development!
The!search!for!the!business!model!
The!Search!for!a!Business! The!Growth!of!a!Business!
2
Onde os problemas
começaram
U$ 1.5M
5/4/14
slide 23
Efetividade da Comunicação
The Pragmatic Programmer
Andrew Hunt & David Thomas
Communicate!
•  A good idea is an orphan without effective
communication
–  Know What You Want to Say
–  Know Your Audience
–  Choose Your Moment
–  Choose a Style
–  Make it Look Good
–  Involve Your Audience
–  Be a Listener
–  Get Back to People
Communicate!
•  TIP 10: It’s Both What You Say and the Way You
Say It
–  There’s no point in having a great ideas if you don’t
communicate them effectively
•  Challenge
–  Write an article for a magazine
–  Share your ideas in a Presentation for us
todas&as&coisas&que&todo&
programador&não&pode&
deixar&de&saber&
(parte&1)&
Luiz&Borba&
h;p://borba.blog.br&
@luizborba&
priorização)
escopo&mínimo&
What I don´t know about startups
Luiz Borba
@luizborba
http://borba.blog.br
Minimum Viable Product (MVP)
The minimum set of features
needed to learn
from early
adopters
Tracer Bullets
•  “Ready, fire, aim…”
•  Tracer Bullets leave pyrotechnic trails from the
gun to whatever they hit
–  Immediate Feedback
–  Equivalent to regular ammunition
•  Darkness
–  Vague Requirements
–  Unfamiliar Technologies
–  Unfamiliar Frameworks
–  Changes
Tracer Bullets
•  Code That Glows in the Dark
•  TIP 15: Use Tracer Bullets to Find the Target
–  Tracer Bullets let you home in on your target by trying
things and seeing how close they land
•  Tracer Code is not Disposable
–  But not fully-functional
Speed matters
Reducing time between pivots (fails)
we can increase our odds of success
Minimize the TOTAL time
through the loop
itera&vo)e)incremental)
3
Não me venham com a
problemática que eu tenho
a solucionática
Luiz Borba
@luizborba - http://borba.blog.br
Arquitetura Pragmática
"A arquitetura de software de
um programa ou sistema
computacional é a estrutura
(ou estruturas), a qual
envolve os elementos de
software, as propriedades
desses elementos visíveis
externamente e seus
respectivos inter-
relacionamentos."
Arquitetura
Design
Atributos de Qualidade
• Performance
• Segurança
• Disponibilidade
• Usabilidade
• Confiabilidade
• Manutenibilidade
• Testabilidade
• Portabilidade
• Integrabilidade
• Reusabilidade
• Legibilidade
• Escalabilidade
Visões
Principais fatores para
um bom design
Baixo acomplamento Alta coesão
Melhorando a
qualidade do
seu código
com GRASP
Luiz Borba	

http://borba.blog.br
1
Aula 4
Baixo Acoplamento
Acoplamento é a medida de o quão forte um
elemento está conectado, tem conhecimento
ou depende de outros elementos
Aula 5
Alta Coesão
Coesão é a medida de quão forte estão
relacionadas as responsabilidades de um elemento.
Quanto mais coeso, menor o esforço para realizar
suas responsabilidades. Esta é a razão pela qual o
padrão MVC é considerado uma boa prática.
Reponsabilidades 	

de GUI ficam aqui Mediação entre 	

Model eView
Responsabilidade para	

alterar os modelos
Primeira Lei de Arquitetura
de Software de Borba
(Borba's 1st Software Architecture Law)
Toda arquitetura definida está errada.
Precisa PROVAR!
Segunda Lei de Arquitetura
de Software de Borba
(Borba's 2nd Software Architecture Law)
Toda arquitetura definida que
comprovadamente funciona
estará errada em breve.
As coisas mudam
• Tecnologias mudam
• Requisitos/Planos/Negócios mudam
• Pessoas mudam
• Usuários mudam
• TUDO MUDA. O TEMPO TODO.
O que fazer então?
Design Incremental
TDD
DIRETO DAS TRINCHEIRAS
Luiz Borba
@luizborba
http://borba.blog.br
Separa o quê do como
TDD é mais importante que tudo
"As melhores arquiteturas,
requisitos e design emergem
de times auto organizados"
(manifesto para desenvolvimento de software ágil)
1. Não existe nada de especial
sobre arquitetura
2. Evite arquiteturas torres de
marfim
3. Todo sistema tem uma
arquitetura
4. Arquitetura viabiliza projetos
grandes
4
Merda Acontece
http://borba.blog.br
Merda Acontece
Luiz Borba
Ada Lovelace
“Think of my horror then at just
discovering that the table & diagram
(over which I have been spending
infinite patience & pains) are seriously
wrong, in one or two points”.
1843
Grace Hopper
1952
A-0primeiro compilador já
escrito para um
computador eletrônico
1947
"There is no program that, given a
description of an arbitrary computer
program, can decide whether the program
finishes running or continues to run
forever".
!
(Alan Turing, 1936)
Seja empírica ou
matematicamente, já faz
décadas que descobrimos
que MERDA ACONTECE!
1º Ato
Porque a Merda Acontece?
Onde há catinga, há merda
Martin Fowler’s Code Smells
Duplicated Code
Long Method
Large Class
Long Parameter List
Divergent Change
Shotgun Surgery
Feature Envy
Data Clumps
Primitive Obsession
Switch Statements
Parallel Inheritance Hierarchies
Lazy Class
Speculative Generality
Temporary Field
Message Chains
Middle Man
Inappropriate Intimacy
Alternative Classes with Different Interfaces
Incomplete Class Libraries
Data Class
Refused Bequest
Comments
Merda Acontece porque
deixamos janelas quebradas
O milagre da multiplicação
Cuidado com ORM
Merda Acontece porque
usamos abstrações sem saber
o que acontece por “debaixo
dos panos”
11 HISTÓRIAS E 1 SEGREDO
Luiz Borba	
http://borba.blog.br
“All non-trivial abstractions,
to some degree, are leaky.”
!
- Joel Spolsky
Linguagens de
programação são leaky
abstractions.
Temos obrigação de
conhecer o que a
linguagem que
utilizamos faz por
debaixo dos panos.
“When someone says: ‘I
want a programming
language in which I need
only say what I wish done’,
give him a lollipop.”
!
- Alan J. Perlis
As 2 Leis de Borba
Twitter no Início
Twitter Hoje
Merda Acontece porque não
evoluimos nossos sistemas ao
longo do tempo
2º Ato
Como lidar com a Merda?
O Paradoxo do Deploy
Porque temos
medo do Deploy?
O Deploy de 180 Dias
Deploy Frequente minimiza a
chance de dar Merda e
quando acontece, é mais fácil
de detectar o problema
O Caso Facebook
Qual a frequência de deploy
em produção do Facebook?
2 vezes por dia
E o que acontece quando dá
merda?
"Reverting is for losers!"
!
(Chuck Rossi)
IRC para localizar os
desenvolvedores, resolver a
bronca na hora e fazer um
novo deploy
Desenvolvedores
tem karma
Quanto tempo leva o processo
de deploy? (dezenas de
milhares de servidores e um
pacote de 1.5Gb)
3º Ato
Tendências
Um C seguro
“Rust is a general purpose,
multi-paradigm, compiled
programming language
developed by Mozilla Research”
!
- Wikipedia
Exemplos
Obama não conhecia
as Leis de Borba
U.S. Airforce blows
$1 Billion on failed
Enterprise Software
Fornecedor x Integrador
x Cliente
Hierarquia Militar
(troca constante de
comando)
Informatização do
CAOS
5
Quando Desligar
Exemplos
6
Metamorfose Ambulante
“O Futuro”
luiz borba
o mundo era !
mais simples
mas foi ficando !
mais complexo
e os produtos também
o chave para o futuro é a
redução da complexidade
“Change is the process by which !
the future invades our lives”
Alvin Toffler
Coisas que levei
um tempo para
aprender
Luiz Borba
http://borba.blog.br
Primeiro
emprego
1991
1993
Por que você precisa
(re)aprender linguagens
funcionais?
Luiz Borba
Maio-2010
Software is getting slower faster
than hardware becomes
faster (Nicklaus Wirth)
código existente será
obsoleto
As Coisas Mudam
Luiz Borba
http://borba.blog.br
A gente muda mesmo sem querer...
“Eu vou desdizer
Aquilo tudo que eu lhe disse antes
Eu prefiro ser
Essa metamorfose ambulante
Do que ter aquela velha opinião
Formada sobre tudo”
Coisa 13:
Seja uma
metamorfose
ambulante
what
killed
rup
could
kill
agile,
too
Luiz Borba
COURAGE
Obrigado!
Luiz Borba
http://borba.blog.br

O ciclo da vida