< Return to Video

Spotify Engineering Culture - Part 1

  • 0:00 - 0:02
    Cultura de Engenharia do Spotify
  • 0:02 - 0:03
    Parte 1 de 2
  • 0:06 - 0:08
    Um dos maiores fatores de sucesso aqui no Spotify
  • 0:08 - 0:10
    é a nossa Cultura de Engenharia Ágil
  • 0:10 - 0:14
    "Cultura" tende a ser invisível, não a notamos
    pois ela está lá o tempo todo,
  • 0:14 - 0:16
    mais ou menos igual ao ar que respiramos.
  • 0:16 - 0:18
    Mas, quando todo mundo entende esta Cultura,
  • 0:18 - 0:20
    há mais chances de mantê-la e até fortalecê-la conforme evoluimos.
  • 0:20 - 0:22
    E este é o propósito deste vídeo.
  • 0:23 - 0:27
    Quando o nosso primeiro player de música foi lançado, em 2008,
    nós eramos basicamente uma empresa SCRUM.
  • 0:27 - 0:30
    SCRUM é uma bem estabelecida solução de desenvolvimento ágil
  • 0:30 - 0:32
    e nos deu uma "Cultura de Time" bem legal.
  • 0:32 - 0:35
    Porém, alguns anos mais tarde, nós crescemos
    com uma boa quantidade de times
  • 0:35 - 0:39
    e percebemos que algumas das práticas padrão do
    SCRUM estavam na verdade atrapalhando.
  • 0:39 - 0:42
    Então decidimos fazer com que elas fossem opcionais.
  • 0:42 - 0:44
    "Regras são um bom começo, mas quebre-as quando necessário."
  • 0:44 - 0:47
    Decidimos que ser ágil importava mais do que o SCRUM e
  • 0:47 - 0:50
    que princípios ágeis importam mais do que
    quaisquer práticas específicas.
  • 0:50 - 0:52
    Então renomeamos o termo "Scrum Master"
    para "Agile Coach" (treinador ágil),
  • 0:52 - 0:55
    pois queríamos "líderes servidores"
    mais do que "mestres em processos".
  • 0:55 - 0:58
    Também começamos a usar o termo
    Squad (pelotão) ao invés de Time SCRUM.
  • 0:58 - 1:01
    Nosso lema principal se tornou "Autonomia".
  • 1:01 - 1:03
    Mas, o que seria uma Squad autônoma?
  • 1:03 - 1:09
    Uma Squad é um Time pequeno, multifuncional e auto-gerenciado.
    Normalmente tem menos que 8 pessoas.
  • 1:09 - 1:13
    Eles trabalham juntos e tem responsabilidade completa
    de ponta a ponta para com as coisas que constroem,
  • 1:13 - 1:17
    Design, "Commit", Entrega, Manutenção,
    Operações... enfim, tudo mesmo.
  • 1:17 - 1:21
    Cada Squad tem uma missão de longo prazo,
    como "Fazer do Spotify o melhor lugar para descobrir música".
  • 1:21 - 1:25
    Ou coisas internas, como "Infraestrutura para testes A/B"
    (testes controlados)
  • 1:25 - 1:31
    "Autonomia" basicamente significa que a Squad decide
    o que construir, como construir e como trabalhar juntos para construir.
  • 1:31 - 1:35
    Existem, claro, alguns limites para isto,
    como por exemplo a própria missão da Squad,
  • 1:35 - 1:39
    a estratégia geral definida para o produto,
    seja qual for a área em que estejam trabalhando,
  • 1:39 - 1:42
    e objetivos de curto prazo, que são
    negociados a cada trimestre.
  • 1:43 - 1:45
    Nosso escritório é otimizado para colaboração.
  • 1:45 - 1:47
    Aqui está uma típica área de trabalho de uma Squad.
  • 1:47 - 1:52
    Os membros trabalham juntos aqui, com mesas
    ajustáveis e fácil acesso às telas uns dos outros.
  • 1:52 - 1:56
    Se juntam aqui no salão para coisas
    como "planejamentos" e "restrospectivas".
  • 1:56 - 2:01
    E lá atrás temos uma pequena sala para pequenas
    reuniões ou apenas pra ficar tranquilo por algum tempo.
  • 2:01 - 2:03
    Quase todas as paredes são lousas.
  • 2:03 - 2:05
    Mas por que autonomia é tão importante?
  • 2:05 - 2:09
    Bem... porque é motivante! E pessoas
    motivadas constroem coisas melhores!
  • 2:09 - 2:11
    E também, porque autonomia nos deixa mais rápidos,
  • 2:11 - 2:16
    deixando que decisões aconteçam localmente nas Squads,
    ao invés terem que vir de gerentes, comitês e tal.
  • 2:16 - 2:20
    Ajuda-nos a minimizar "handoffs" e espera,
    e então conseguimos escalar o trabalho sem precisar
  • 2:20 - 2:24
    se preocupar com dependências e coordenação.
    Apesar de cada Squad ter sua própria missão,
  • 2:24 - 2:29
    elas precisam estar alinhadas com estratégias de produtos,
    prioridades da empresa e outras Squads.
  • 2:29 - 2:31
    Basicamente, ser um bom cidadão no ecossistema do Spotify.
  • 2:31 - 2:35
    A missão geral do Spotify é mais importante
    do que qualquer Squad individualmente.
  • 2:35 - 2:39
    Assim sendo, o princípio chave é
    "Ter autonomia, mas não subotimizar".
  • 2:39 - 2:44
    Mais ou menos como uma banda de Jazz, onde, apesar de
    cada músico ser autônomo e tocar seu próprio instrumento,
  • 2:44 - 2:47
    eles ouvem uns aos outros e focam na música completa como um todo.
  • 2:47 - 2:49
    É assim que se faz música de qualidade!
  • 2:49 - 2:53
    Então nosso objetivo é ter Squads
    "pouco acopladas mas altamente alinhadas".
  • 2:53 - 2:58
    Nós ainda não chegamos completamente lá ainda, mas
    fazemos várias experiências para tentar chegar cada vez mais perto.
  • 2:58 - 3:00
    Aliás, isto se aplica a quase tudo neste vídeo.
  • 3:00 - 3:05
    Esta descrição de Cultura é na verdade uma mistura
    do que somos hoje e o que queremos nos tornar no futuro.
  • 3:06 - 3:12
    "Alinhamento" e "Autonomia" podem parecer dois pontos distantes em uma escala,
    do tipo "mais autonomia" é igual à "menos alinhamento".
  • 3:13 - 3:15
    Porém, nós pensamos nisso mais como
    se fossem duas diferentes dimensões.
  • 3:15 - 3:20
    Aqui embaixo, temos pouca autonomia e pouco alinhamento,
    uma cultura de micro-gerenciamento,
  • 3:20 - 3:24
    sem propósitos elevados, apenas "cale a boca e siga ordens".
  • 3:24 - 3:28
    Aqui em cima temos bastante alinhamento, mas ainda
    pouca autonomia, onde os líderes são bons em dizer
  • 3:28 - 3:30
    quais os problemas que devem ser solucionados,
    ("Precisamos atravessar o rio")
  • 3:30 - 3:33
    mas também estão dizendo COMO eles devem ser solucionados.
    ("Construa uma ponte!")
  • 3:33 - 3:37
    Alto alinhamento com bastante autonomia
    significa que os líderes se focam
  • 3:37 - 3:41
    no que deve ser solucionado,
    mas deixam os times decidirem como fazer.
  • 3:41 - 3:46
    E aqui embaixo? Pouco alinhamento e bastante
    autonomia significa que os times fazem o que bem entender,
  • 3:46 - 3:50
    cada um indo em uma direção
    diferente, os líderes ficam desamparados
  • 3:50 - 3:52
    e o produto se transforma em um Frankenstein.
    ("Espero que alguém esteja trabalhando no problema do rio")
  • 3:52 - 3:54
    Nós damos duro para tentar ficar aqui em cima.
  • 3:54 - 3:55
    "Autonomia Alinhada".
  • 3:55 - 3:58
    E continuamente experimentamos
    diferentes maneira de fazer isto.
  • 3:59 - 4:01
    Então, Alinhamento permite Autonomia.
  • 4:01 - 4:05
    Quanto mais forte for o nosso alinhamento,
    mais autonomia podemos permitir.
  • 4:05 - 4:10
    Isso significa que o papel do líder é comunicar quais
    problemas precisam ser solucionados, e por quê.
  • 4:10 - 4:13
    E as Squads colaboram entre si
    para encontrar a melhor solução.
  • 4:14 - 4:18
    Uma consequência da autonomia é que
    temos muito pouca padronização.
  • 4:18 - 4:21
    Quando pessoas perguntam coisas como
    "Qual editor de código vocês usam?"
  • 4:21 - 4:25
    ou "Como fazem planejamento?", a reposta é,
    na maior parte das vezes, "depende da Squad"
  • 4:25 - 4:30
    Algumas fazem sprints de SCRUM, outras fazem Kanban,
    algumas estimam estórias e medem velocidade, outras não...
  • 4:30 - 4:32
    Realmente depende de cada Squad.
  • 4:32 - 4:36
    Ao invés de padrões formalizados, temos
    uma forte cultura multi-polinização.
  • 4:36 - 4:40
    Quando um certo número de Squads usam certa
    prática ou ferramenta, como por exemplo "Git",
  • 4:40 - 4:45
    este se torna o "caminho de menor resistência" e
    outras Squads tendem a usar a mesma ferramenta.
  • 4:45 - 4:50
    As Squads começam a dar suporte àquela ferramenta
    e ajudar umas às outras e acaba virando um padrão por si só.
  • 4:50 - 4:56
    Esta abordagem informal nos dá um
    equilíbrio saudável entre consistência e flexibilidade.
  • 4:56 - 5:01
    Nossa arquitetura é baseada em mais de 100
    sistemas separados, codificados e entregues de forma independente.
  • 5:01 - 5:05
    Há bastante interação, mas cada sistema
    se foca em uma necessidade específica,
  • 5:05 - 5:08
    como "gerenciamento de playlists",
    "busca" ou "monitoramento".
  • 5:08 - 5:12
    Tentamos mantê-los pequenos e
    desacoplados, com interfaces claras e protocolos.
  • 5:12 - 5:16
    Tecnicamente, cada sistema pertence a uma Squad,
    na verdade, a maioria das Squads possuem vários,
  • 5:16 - 5:21
    mas temos um modelo interno open-source,
    e nossa cultura é mais voltada para compartilhar do que possuir.
  • 5:21 - 5:27
    Suponha que esta Squad 1 aqui precisa que algo seja feito no sistema B
    e a Squad 2 conheça melhor este código.
  • 5:27 - 5:31
    Tipicamente, eles vão pedir para a Squad 2 fazê-lo,
    porém se a Squad 2 não tiver tempo,
  • 5:31 - 5:35
    ou tiver outras prioridades, então a Squad 1
    não precisa necessariamente esperar.
  • 5:35 - 5:36
    Detestamos esperar.
  • 5:36 - 5:41
    Ao invés disso, são bem vindos a editar o código eles
    mesmos e pedir para a Squad 2 revisar as alterações.
  • 5:41 - 5:45

    Então qualquer pessoa pode editar qualquer código,
    mas temos uma cultura de revisão de código.
  • 5:45 - 5:49
    Isto aumenta a qualidade e, principalmente,
    espalha conhecimento.
  • 5:49 - 5:53
    Ao longo do tempo, nós evoluímos
    guidelines, padrões de código e outras
  • 5:53 - 5:56
    coisas para reduzir atritos de engenharia,
    mas apenas quando muito necessário.
  • 5:56 - 6:01
    Então, em uma escala de Autoritarismo para Liberalismo,
    definitivamente estamos mais do lado liberal.
  • 6:01 - 6:05
    Agora, nada disso funcionaria
    se não fosse pelas pessoas.
  • 6:05 - 6:08
    Temos uma cultura realmente
    forte de respeito mútuo.
  • 6:08 - 6:11
    Vivo ouvindo comentários sobre
    "Meus colegas são demais!"
  • 6:11 - 6:14
    As pessoas dão crédito umas às outras o
    tempo todo pelo trabalho bem feito
  • 6:14 - 6:16
    e raramente ficam com o crédito só para si.
  • 6:16 - 6:20
    Considerando a quantidade de talento
    que temos por aqui, há surpreendentemente pouco ego.
  • 6:20 - 6:24
    Um grande choque para novatos é que ter
    autonomia é um pouco assustador no começo.
  • 6:24 - 6:29
    Você e sua Squad devem encontrar suas próprias soluções.
    Ninguém irá lhe dizer o que fazer.
  • 6:29 - 6:33
    Mas, acontece que, se você pedir
    ajuda, você recebe muita, e rápido!
  • 6:33 - 6:38
    Existe um respeito genuíno pelo fato de que estamos
    todos juntos neste barco e precisamos nos ajudar para ter sucesso.
  • 6:38 - 6:40
    Focamos bastante em motivação.
  • 6:40 - 6:44
    Aqui um exemplo, um e-mail real
    enviado pelo chefe dos "recursos humanos".
  • 6:44 - 6:51
    "Olá a todos, nossa pesquisa de satisfação diz que
    91% das pessoas gosta de trabalhar aqui, e que 4% não."
  • 6:51 - 6:55
    Isto pode parecer uma taxa alta de satisfação,
    especialmente considerando nosso crescimento.
  • 6:55 - 7:02
    Entre 2006 e 2013, nós dobramos a cada ano,
    e atualmente temos mais de 1200 pessoas.
  • 7:02 - 7:07
    Mas então ele continua:
    "Isto, claramente, não é satisfatório, e queremos melhorar."
  • 7:07 - 7:13
    "Se você for um destes 4%, por favor, entre em contato.
    Estamos aqui por vocês, e nada mais."
  • 7:13 - 7:15
    Portanto, "bom o suficiente"
    NÃO é bom o suficiente.
  • 7:15 - 7:19
    Seis meses depois, já houve melhoras,
    e a taxa subiu para 94%.
  • 7:19 - 7:25
    Com esse forte foco em motivação, não é coincidência
    que temos uma super reputação como ambiente de trabalho.
  • 7:25 - 7:30
    Mesmo assim, temos vários problemas com os
    quais lidar, e precisamos continuar melhorando.
  • 7:30 - 7:34
    Então, temos mais de 50 Squads,
    espalhadas entre 4 cidades.
  • 7:34 - 7:36
    Algum tipo de estrutura é necessário.
  • 7:36 - 7:41
    Atualmente, as Squads são agrupadas em Tribes.
    Uma tribe é uma pequena matriz.
  • 7:41 - 7:44
    Cada pessoa é membro de uma Squad
    e também de um Chapter.
  • 7:44 - 7:48
    A Squad é a dimensão primária,
    focada em entregas e qualidades,
  • 7:48 - 7:54
    enquanto que um chapter é uma área de competência,
    como "QA", "treinamento ágil" ou "desenvovimento web".
  • 7:54 - 7:58
    Enquanto membro de uma Squad, o meu líder
    de chapter é o meu gerente formal,
  • 7:58 - 8:01
    um líder servidor, focado em me treinar
    e ser meu mentor como engenheiro.
  • 8:01 - 8:04
    Então eu posso mudar de Squads,
    sem alterar meu gerente.
  • 8:04 - 8:07
    É uma bela figura, exceto que,
    não é bem assim.
  • 8:07 - 8:11
    Na realidade, as linhas não são tão
    retas e certinhas, e coisas vivem mudando.
  • 8:11 - 8:17
    Aqui um exemplo, de uma tribe em um determinado período.
    E claro, já está tudo diferente hoje.
  • 8:17 - 8:22
    E tudo bem!
    A comunicação mais valiosa acontece por meios informais e imprevisíveis.
  • 8:22 - 8:28
    Para dar suporte a isto, também temos Guilds.
    Uma guild é uma pequena comunidade de interesses,
  • 8:28 - 8:32
    onde pessoas de toda a empresa se reúnem e
    compartilham conhecimento sobre uma área específica.
  • 8:32 - 8:36
    Por exemplo, "liderança", "desenvolvimento
    web" ou "entregas contínuas".
  • 8:36 - 8:38
    As pessoas podem entrar ou
    sair das guilds como quiserem.
  • 8:38 - 8:44
    As guilds normalmente tem uma lista de e-mails,
    conferências bianuais e outros métodos informais de comunicação.
  • 8:44 - 8:46
    A maioria dos organogramas
    organizacionais são uma ilusão.
  • 8:46 - 8:50
    Portanto, nosso foco principal vai para
    "comunidade" ao invés de "estrutura hierárquica".
  • 8:50 - 8:55
    Descobrimos que uma comunidade forte o
    suficiente consegue se dar bem com uma estrutura informal e volátil.
  • 8:55 - 9:00
    Se você sempre precisa saber exatamente quem
    está tomando decisões, você está no lugar errado.
  • 9:00 - 9:06
    Uma coisa que importa bastante para autonomia:
    "quão fácil é colocar nossas coisas em produção?"
  • 9:06 - 9:11
    Se entregar for difícil, seremos tentados
    a entregar menos, para evitar a dor de cabeça.
  • 9:11 - 9:16
    Isto faz com que cada entrega seja maior, e, portanto, mais difícil.
    É um ciclo vicioso.
  • 9:16 - 9:22
    Mas, se entregar for fácil, podemos entregar continuamente,
    fazendo com que as entregas sejam pequenas e, portanto, mais fáceis.
  • 9:22 - 9:27
    Para ficarmos neste ciclo, e evitar este aqui,
    encorajamos entregas pequenas e frequentes.
  • 9:27 - 9:32
    E investimos pesadamente em AUTOMAÇÃO DE TESTES
    e infraestrutura para entregas contínuas.
  • 9:32 - 9:35
    Entregas deveriam ser rotina,
    e não um drama.
  • 9:35 - 9:38
    Algumas vezes fazemos grandes
    investimentos para facilitar as entregas.
  • 9:38 - 9:43
    Por exemplo, o client desktop original do
    Spotify, era uma aplicação única e monolítica.
  • 9:43 - 9:47
    No começo, com apenas um punhado
    de desenvolvedores, isso era aceitável.
  • 9:47 - 9:50
    Mas, conforme crescemos, se tornou
    um grande problema.
  • 9:50 - 9:53
    Várias Squads tinham que ficar
    sincronizadas para cada entrega.
  • 9:53 - 9:56
    E podia levar meses até chegarmos em uma versão estável.
  • 9:56 - 9:59
    Ao invés de criar vários processos,
    regras e coisas para gerenciar isto tudo,
  • 9:59 - 10:03
    alteramos nossa arquitetura para
    permitir entregas desacopladas.
  • 10:03 - 10:07
    Usando o framework embutido do Chromium,
    o client é agora um WebBrowser disfarçado.
  • 10:07 - 10:12
    Cada seção é como um frame em um website, e as
    Squads podem entregar suas próprias coisas diretamente.
  • 10:12 - 10:18
    Como parte desta mudança de arquitetura, passamos
    a enxergar cada plataforma como se fosse um App.
  • 10:18 - 10:25
    E evoluímos três tipos diferentes de Squads:
    Client App Squads, Feature Squads e Squads de infraestrutura.
  • 10:25 - 10:29
    Uma Feature Squad se foca em uma
    área de funcionalidade, como "busca",
  • 10:29 - 10:34
    esta squad vai construir, entregar e manter
    funcionalidades relacionadas à "busca" em todas plataformas.
  • 10:34 - 10:38
    Uma Client App Squad, se foca em fazer
    com que as entregas sejam fáceis em uma
  • 10:38 - 10:41
    determinada plataforma,
    como desktop, iOS e Android.
  • 10:41 - 10:45
    As Squads de infraestrutura se focam em fazer
    com que as demais squads fiquem mais eficientes.
  • 10:45 - 10:51
    Elas provêm ferramentas e rotinas para coisas como
    "entregas contínuas", "testes A/B", "monitoramento" e "operações".
  • 10:52 - 10:56
    Independente da estrutura atual, sempre
    tentamos aplicar um modelo Self-service,
  • 10:56 - 11:02
    parecido com um buffet, onde os funcionários não
    te servem diretamente, mas permitem com que você se sirva.
  • 11:02 - 11:06
    Então evitamos "handoffs" (passar de mão em mão)
    como se fosse uma praga.
  • 11:06 - 11:08
    Por exemplo uma squad de
    operações ou uma client app squad,
  • 11:08 - 11:11
    não coloca código em
    produção propriamente dito.
  • 11:11 - 11:13
    Ao invés disso, seu trabalho é
    fazer com que fique fácil para
  • 11:13 - 11:16
    as feature squads colacarem
    seus códigos em produção.
  • 11:16 - 11:22
    Apesar deste modelo, as vezes precisamos de
    um pouco de sincronia entre as squads para fazer entregas.
  • 11:22 - 11:25
    Gerenciamos isto usando "Trens de entrega"
    e "Ativação de funções".
  • 11:25 - 11:33
    Cada App tem seu trem de entrega que parte regularmente,
    tipicamente a cada 1 ou 3 semanas, dependendo do client.
  • 11:33 - 11:37
    Assim como no mundo real, se um trem
    parte frequente e confiavelmente,
  • 11:37 - 11:41
    você não precisa se planejar muito,
    apenas apareça e pegue o próximo trem.
  • 11:41 - 11:45
    Suponha que estas 3 squads estão fazendo
    coisas e, quando o trem chega,
  • 11:45 - 11:51
    as features A, B e C estão prontas,
    mas a D ainda está em progresso.
  • 11:51 - 11:54
    O trem de entrega irá conter todas
    as 4 features, mas a que não
  • 11:54 - 11:57
    está pronta ainda será escondida,
    usando um "ativador de função".
  • 11:57 - 12:01
    Pode parecer estranho entregar features
    não concluídas, mas é legal pois
  • 12:01 - 12:05
    expõe problemas de integração precocemente
    e minimiza a necessidade de "branches" no código.
  • 12:05 - 12:09
    Código isolado (sem commit) esconde
    problemas, e é uma forma de débito técnico.
  • 12:09 - 12:11
    Ativadores de função nos permitem
    mostrar e esconder funcionalidades
  • 12:11 - 12:14
    de forma dinâmica, tanto para
    testes quanto em produção.
  • 12:14 - 12:20
    Adicionalmente, usamos isso para que os testes
    A/B possam gradualmente validar as funcionalidades.
  • 12:20 - 12:23
    No quadro geral, nosso processo de
    entrega está melhor do que costumava ser,
  • 12:23 - 12:27
    mas ainda vemos vários pontos onde melhorar,
    portanto continuaremos experimentando.
  • 12:27 - 12:33
    Isto pode parecer um modelo assustador, deixar cada
    squad colocar suas coisas em produção,
  • 12:33 - 12:36
    sem um controle formal centralizado,
    e as vezes cometemos erros,
  • 12:36 - 12:40
    mas aprendemos que "confiança"
    é mais importante que "controle".
  • 12:40 - 12:43
    Porque contrataríamos
    alguém que não confiamos?
  • 12:43 - 12:46
    Ser ágil em escala, requer
    que confiemos em escala.
  • 12:46 - 12:50
    Isto significa: "sem política",
    e também "sem medo",
  • 12:50 - 12:54
    pois medo não apenas mata a confiança,
    mas também mata inovações.
  • 12:54 - 12:57
    Se uma falha é punida, as pessoas
    não se atreverão a fazer coisas novas.
  • 12:57 - 13:01
    Então, vamos conversar sobre
    falhas... na verdade, não..
  • 13:01 - 13:04
    Vamos fazer um break, levanta um
    pouco, pega um café,
  • 13:04 - 13:09
    deixa você mesmo se acostumar com essa coisa
    toda e volte quando estiver pronto para a parte 2, ok?
Title:
Spotify Engineering Culture - Part 1
Description:

more » « less
Video Language:
English
Duration:
13:12

Portuguese, Brazilian subtitles

Revisions