Disse Aristóteles: “Se vi ao longe é porque estava nos ombros dos gigantes”.
Assim me sinto como editor desta obra. Foi com muito orgulho que participei da fundação da ThoughtWorks Brasil em 2009, e é com muita honra que apresento esta antologia da Thoughtworks Brasil.
Este livro contém 18 capítulos independentes, mas complementares, com histórias, ensinamentos e práticas dos meus amigos e colegas de trabalho, gigantes do desenvolvimento de software.
Paulo Caroli, editor
Autores:
Adriano Bonat, Alexandre Klaser, Alexey A. Villas Bôas, Carlos Lopes, Claudia Melo, Daniel Amorim, Émerson Hernandez, Fabio Pereira, Francisco Trindade, Glauber Ramos, Guilherme Froes, Hugo Corbucci, Juraci Vieira, Luiza de Souza, Marcos Brizeno, Mário Areias, Maurício Silveira Sanches, Natalia Arsand, Nicholas Pufal, Paulo Caroli, Roger Almeida, Tainã Caetano
Sumario
Prefácio por Luca Bastos
Foreword por Ronaldo Ferraz
1 Inceptions de uma semana 1
1.1 Inception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Inception de uma semana . . . . . . . . . . . . . . . . . . . . . 2
1.3 Estrutura de uma inception de uma semana . . . . . . . . . . 2
1.4 Quebrando o gelo . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Visao do produto . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 Personas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.9 Historias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.10 Refinamento das historias . . . . . . . . . . . . . . . . . . . . 16
1.11 O mapeamento das historias . . . . . . . . . . . . . . . . . . . 20
1.12 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2 Produtividade e adaptabilidade de times ageis: conceitos e paradoxos
25
2.1 Agil e produtivo? . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2 Conceitos de produtividade . . . . . . . . . . . . . . . . . . . 27
2.3 Agilidade e sobre mudanca de paradigma . . . . . . . . . . . 31
2.4 O que significa produtividade de times ageis? . . . . . . . . . 32
2.5 Paradoxos envolvendo eficiencia e flexibilidade e seu impacto
na produtividade de times ageis . . . . . . . . . . . . . . . . . 35
2.6 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3 Peopleware: entendendo ambientes corporativos 39
3.1 Cargos e estruturas . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2 Empatia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3 Motivadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.1 Motivadores extrinsecos . . . . . . . . . . . . . . . . 43
3.3.2 Motivadores intrinsecos . . . . . . . . . . . . . . . . 44
3.4 Algumas ferramentas . . . . . . . . . . . . . . . . . . . . . . . 44
3.4.1 A escala de necessidades de Maslow . . . . . . . . . 45
3.4.2 Os niveis logicos de pensamento . . . . . . . . . . . 46
3.4.3 Os 10 desejos intrinsecos . . . . . . . . . . . . . . . . 48
3.4.4 Mapas de empatia . . . . . . . . . . . . . . . . . . . . 49
3.5 Como usar tudo isso: seu circulo de influencia . . . . . . . . 51
4 Psicologia cognitiva explicando Agil 55
4.1 Nao somos racionais Ilusoes cognitivas e um cerebro que
pensa de forma relativa . . . . . . . . . . . . . . . . . . . . . . 56
4.2 Ilusoes de optica e ilusoes cognitivas . . . . . . . . . . . . . . 59
4.3 O que as ilusoes cognitivas tem a ver com Desenvolvimento
Agil? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.4 Sindrome do Estudante explicando iteracoes . . . . . . . . . 62
4.5 Cegueira nao intencional . . . . . . . . . . . . . . . . . . . . . 64
4.6 Geladeira ou radiador? . . . . . . . . . . . . . . . . . . . . . . 65
4.7 Um desmaio na rua, a difusao de responsabilidade e os itens
da retrospectiva . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.8 Valorizo, pois tambem sou dono . . . . . . . . . . . . . . . . . 68
4.9 Principio da prioridade relativa . . . . . . . . . . . . . . . . . 69
4.10 Um taco, uma bola, um teste . . . . . . . . . . . . . . . . . . . 72
4.11 Resumo das correlacoes . . . . . . . . . . . . . . . . . . . . . . 73
4.12 A importancia das correlacoes . . . . . . . . . . . . . . . . . . 74
4.13 Psicologo por paixao . . . . . . . . . . . . . . . . . . . . . . . 74
5 Queremos inovar! 75
5.1 Uma historia da (falta de) inovacao . . . . . . . . . . . . . . . 76
5.2 Mudar e necessario . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3 Conheca a Lean Startup . . . . . . . . . . . . . . . . . . . . . . 79
5.4 Entendendo as dificuldades . . . . . . . . . . . . . . . . . . . 81
5.4.1 Inovacao nao e so entregar software . . . . . . . . . . 81
5.4.2 Sucesso nao e apenas fazer o que voce ja faz bem . . 82
5.4.3 Uma pessoa com uma ideia, a unidade de inovacao 82
5.4.4 A regra e fracassar . . . . . . . . . . . . . . . . . . . . 83
5.5 Quebrando a uniformidade . . . . . . . . . . . . . . . . . . . 83
5.6 As fases da inovacao . . . . . . . . . . . . . . . . . . . . . . . . 84
5.6.1 Geracao de insights: como fazer as ideias fluirem? . 85
5.6.2 Modelando ideias: transformando pensamentos aleatorios
em modelos de negocios . . . . . . . . . . . . 86
5.6.3 Executando modelos de negocios: transformando
ideias em atividades lucrativas . . . . . . . . . . . . . 88
5.7 Reflexoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6 Mirebalais Melhorando a sociedade com tecnologia 91
6.1 Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.2 O foco diferenciado . . . . . . . . . . . . . . . . . . . . . . . . 94
6.2.1 Parte tecnica . . . . . . . . . . . . . . . . . . . . . . . 95
6.2.2 Produto Minimo Viavel . . . . . . . . . . . . . . . . . 97
6.2.3 Experiencia de usuario . . . . . . . . . . . . . . . . . 98
6.3 Inovacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.4 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7 Formando novos profissionais: um relato de parceria entre empresa
e universidade 107
7.1 Motivacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.2 Idealizando o programa . . . . . . . . . . . . . . . . . . . . . . 109
7.3 O framework de capacitacao . . . . . . . . . . . . . . . . . . . 111
7.3.1 Captacao de participantes: divulgacao e recrutamento 112
7.3.2 Estrutura: papeis e praticas . . . . . . . . . . . . . . . 116
7.4 Praticas ageis adotadas . . . . . . . . . . . . . . . . . . . . . . 117
7.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.6 Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8 Programacao em par 127
8.1 Definicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.2 Quando parear . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.3 Ilhas de conhecimento . . . . . . . . . . . . . . . . . . . . . . 130
8.4 Ferramental e pareamento remoto . . . . . . . . . . . . . . . . 132
8.5 Tecnicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.6 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
9 Varios projetos, objetivos diferentes, mas o codigo em comum 141
9.1 Problemas com branching . . . . . . . . . . . . . . . . . . . . 142
9.1.1 Merge hell . . . . . . . . . . . . . . . . . . . . . . . . 143
9.1.2 Merge monkey . . . . . . . . . . . . . . . . . . . . . . 144
9.1.3 Integracao promiscua . . . . . . . . . . . . . . . . . . 146
9.2 Trunk Based Development . . . . . . . . . . . . . . . . . . . . 147
9.2.1 Tipos de trunk . . . . . . . . . . . . . . . . . . . . . . 148
9.2.2 Feature toggles . . . . . . . . . . . . . . . . . . . . . . 153
9.3 Branches sao do mal? . . . . . . . . . . . . . . . . . . . . . . . 154
9.4 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10 Dissecando feature toggles 157
10.1 Feature toggles na pratica . . . . . . . . . . . . . . . . . . . . . 158
10.2 Precaucoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.3 Tipos de feature toggles . . . . . . . . . . . . . . . . . . . . . . 160
10.3.1 Toggle de desenvolvimento . . . . . . . . . . . . . . . 161
10.3.2 Toggle de operacoes . . . . . . . . . . . . . . . . . . . 161
10.3.3 Toggle de negocio . . . . . . . . . . . . . . . . . . . . 162
10.4 Arquitetura da aplicacao . . . . . . . . . . . . . . . . . . . . . 163
10.4.1 Conteudo estatico . . . . . . . . . . . . . . . . . . . . 164
10.5 Quando remover feature toggles . . . . . . . . . . . . . . . . . 165
10.6 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
11 Estudo de caso: automacao comoprimeiro passo para entrega continua
169
11.1 Em busca da entrega continua . . . . . . . . . . . . . . . . . . 170
11.2 Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
11.3 A iniciativa de melhoria de implantacoes . . . . . . . . . . . . 173
11.3.1 Fase 1 – Automacao . . . . . . . . . . . . . . . . . . . 174
11.3.2 Fase 2 Melhorando a confianca nos scripts . . . . . 177
11.4 Avaliando o resultado . . . . . . . . . . . . . . . . . . . . . . . 179
11.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
12 Explorando padroes de implementacao em Ruby 181
12.1 Padrao State . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
12.2 Padrao Active Record . . . . . . . . . . . . . . . . . . . . . . . 188
12.3 Padroes construtores . . . . . . . . . . . . . . . . . . . . . . . 192
12.4 Padrao Map/Reduce . . . . . . . . . . . . . . . . . . . . . . . . 195
12.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
13 Testando JavaScript com o Protactor: um exemplo de solucao integradora
201
13.1 Press start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
13.2 Entendendo o Protractor mais a fundo . . . . . . . . . . . . . 203
13.3 Por que usar Protractor? . . . . . . . . . . . . . . . . . . . . . 211
14 Melhore seus testes 213
14.1 Trate codigo de teste como codigo de producao . . . . . . . . 213
14.1.1 Repetir ou nao se repetir? . . . . . . . . . . . . . . . 214
14.1.2 Legibilidade vs. repeticao . . . . . . . . . . . . . . . . 215
14.1.3 Qualidade do codigo de testes . . . . . . . . . . . . . 216
14.2 Utilize padroes de testes . . . . . . . . . . . . . . . . . . . . . . 217
14.2.1 Padroes de organizacao de codigo . . . . . . . . . . . 217
14.2.2 Padroes de banco de dados . . . . . . . . . . . . . . . 219
14.2.3 Padroes de verificacao de resultado . . . . . . . . . . 220
14.2.4 Varios outros tipos de padroes . . . . . . . . . . . . . 221
14.3 Evite testes instaveis . . . . . . . . . . . . . . . . . . . . . . . . 221
14.3.1 Testes nao deterministicos . . . . . . . . . . . . . . . 222
14.3.2 Possiveis causas de instabilidade . . . . . . . . . . . . 222
14.3.3 Melhorando a instabilidade . . . . . . . . . . . . . . 224
14.4 Teste no nivel apropriado . . . . . . . . . . . . . . . . . . . . . 225
14.4.1 Custos e niveis de testes . . . . . . . . . . . . . . . . . 225
14.4.2 Piramide de testes . . . . . . . . . . . . . . . . . . . . 226
14.4.3 Antipadroes de balanceamento . . . . . . . . . . . . 228
14.4.4 Como diminuir o problema . . . . . . . . . . . . . . 228
14.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
15 Entendendo e utilizando dubles de teste 231
15.1 Stub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
15.2 Fake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
15.3 Dummy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
15.4 Mocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
15.5 Spy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
15.6 Dubles de teste e TDD . . . . . . . . . . . . . . . . . . . . . . 240
15.7 Utilizar dubles, sim . . . . . . . . . . . . . . . . . . . . . . . . 241
16 Desmistificando o BDD 243
16.1 BDD e geralmente mal compreendido . . . . . . . . . . . . . 244
16.2 Os fundamentos de BDD . . . . . . . . . . . . . . . . . . . . . 244
16.3 O BDD aprimorando o TDD . . . . . . . . . . . . . . . . . . . 245
16.4 Os tres principios do BDD . . . . . . . . . . . . . . . . . . . . 248
16.5 Principais reclamacoes sobre BDD . . . . . . . . . . . . . . . 248
16.5.1 O cliente nao se importa com testes, logo, nao lhe
interessa se o time aplica BDD ou nao . . . . . . . . . 248
16.5.2 O cliente nao quer escrever as especificacoes na ferramenta
destinada a isso . . . . . . . . . . . . . . . . . 249
16.6 Comunicacao e o fluxo de trabalho . . . . . . . . . . . . . . . 252
16.7 Sessao de 3 amigos . . . . . . . . . . . . . . . . . . . . . . . . . 254
16.8 Um caso de sucesso usando BDD . . . . . . . . . . . . . . . . 257
16.9 Consideracoes finais . . . . . . . . . . . . . . . . . . . . . . . . 258
Indice Remissivo 259
Bibliografia 269







![[em BH 14/Set] Treinamento Lean Product Development: guiando a construção do MVP com Scrum e Kanban](https://caroli.org/wp-content/uploads/2019/08/MERRY-CHRISTMAS.jpg)