Entregas Contínuas com feature toggles

563 views

Published on

My Agile Brazil 2013 talk on continuos delivery with feature toggles

Published in: Technology, Business
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
563
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • Explicar um pouco o contextoprojetoNãopossofalarnomesnemexemplosreais
  • Explicarporcima a arquiteturaTem váriosserviçosecommerce é o que o usuáriovê
  • Ruby, rails, sinatraPuppet paraprovisionamentoRedisparaconfiguracoesMongo para storage
  • Pessoasespalhadasem 3 lugaresdiferentesQueria-se diminuir o tempo gastofazendo merges de código
  • Time grandeEstóriasemparaleloNo release manager (cherry picking)
  • Where all the people came from
  • Processo de QA lentoEstóriasdemoravam a seraceitospeloclienteBoletos (demoroumuitoparaseraceito)Nãoqueria-se demorarparaintegrar o código.
  • Jáestávamosemprodução.Deployments constantes e/ouemergenciais com bug fixes.Pipeline nãopoderiaficarbloqueadoporalgonãoterminado
  • Resumindo…Varioslugates (tw e cliente)Estavanaproducao (poderiaprecisar de um bugfix a qualquermomento)Processo de qa lentoTime diverso
  • While maintaining one branch
  • E se vocêtivesseumamaneira de sóligaroudesligarcoisasquenãoestivessemprontas. E se vocêsópudessedecidir: “Issonãoestá pronto, o usuárionãodeveutilizar” ou “Issojáestá pronto, mas euqueroexperimentar um pouco”.
  • Decidimosutilizar feature toggles (feature flippers, gatekeepers)Ideiabastante simplesEsconder a funcionalidadeportrás de algoquecontrole
  • Digamosque se estejaadicionando um novo tipo de pagamento (boleto)Demora a implementarMexeemváriosrepositoriosNão se podeirpara prod semtestarbem (muitoscenarios)
  • Implementaçãoqueusa toggles
  • Enfatizarqueéfeitodiretonainterfacetbexiste o cenarioonde o toggle simplesmenteesconde o link parauma nova area q estásendodesenvolvida;
  • Ferramentasutilizadas.Puppet paraconfigurar e redisparaguardar as chavesvalores.Jáeramutilizadasparaoutrasconfiguraçoes da aplicação.Foramadotadastambémpara toggles
  • ImplementaçãoquetornaissopossívelUsa um cache paraevitarbater no redistodahora e sermaisrápidoSóvê se a chaveestánalista de toggles
  • A mudançaparece simples, mas éprecisoalterar a cultura.Tivemosqueadquirirnovoshábitos (o clientetambém).Foipreciso tempo e disciplinaparapoderdeixar o processofluido
  • Healthy code: always deployable.Keep build always green and new functionalities behind a toggle (might need emergency deployments)Parte da estóriaemsi era criar um toggle e deixá-lo desligado.
  • Comunicação e alignementdentro do time: - saber o quedeveriaestarligadoounãoemcadaambiente; - saber qual o toggle de cadaestória; - garantirqueestavaatrás de um toggleAlinhar com o cliente o quedeveriairparaprodução
  • Toggles adicionamcomplexidade no código e nostestestb se devetestarqualquercombinacao de toggles, muitocuidado c/ a explosao combinatorial!Éprecisotestarduassituações: - toggle ligado - toggle desligado
  • No exemplo anterior precisamostestarque se o toggle estádesligado, nãoémostrado a opção de pagar com boleto…Dizerque o hook sohtira o cara da lista e repoe o estado anterior
  • No exemplo anterior precisamostestarque se o toggle estádesligado, nãoémostrado a opção de pagar com boleto…Dizerque o hook sohcoloca o caranalista e voltaaoestado anterior
  • Nãofoitudo um mar de rosas no início
  • Fluxopadrão.Primeiro e o segundopoderiamserinvertidosProblemaspoderiamocorreremváriosdessesestágios
  • Fluxopadrão.Primeiro e o segundopoderiamserinvertidosProblemaspoderiamocorreremváriosdessesestágios
  • Problemaéquenemsemprequemcriava a estóriagerenciava o toggleComo saber o queestáligado?Como saber o queestádisponível?Como trocarestadosfacilmente?
  • Essadificuldade fez degerenciamento fez com quetivéssemoserros (coisasligadasquedeveriamestardesligadas)
  • Decidimosque o processoestavaconfuso (muitacoisapraconfigurar e difícilconhecerestados).Partimosparaumaimplementaçãoqueusayaml e feature groups paraos toggles (agrupavaporestados) e ambientestinhamosestadosquedeveriamestarativados e potencias overrides
  • Toggles foramagrupadosparafacilitar (propriadivisao do yamlfacilitouisso)
  • Toggles agrupadosformam a configuracao de um ambiente
  • Implementaçãoutilizada (groups: tw_qa, custormer_qa, accepted, development). Saber o queestáligadooudisponívelpodeserfacilmentevisto com operaçoes de setMaisfácil o controle de versao e alteracaodiretoem prod
  • EmalgumassituaçoesnaofoifácilMudar um modelo, porexemplo, foicomplicado.Nãopoderíamossimplesmenteesconder a UI parapreencheressescampos. Quando fosse salvar o modelo, dariaproblemaporquealgunscamposseriamnecessarios. Para workaround disso, tivemosqueColocarvalores default paraeeles e esconder o preenchimentojunto do toggle.servicosnaoeramexternos (poderialimitar o toggle aoservico)schemalessQuando se tem muitospontos de entradatambémnãoérecommendávelusar toggles.
  • Antes de cada deploy era precisoverificar se todas as estóriasestavamligadas, alinhar com o cliente o quedeveriairligadoounao e colocarisso no código.Quandotirar o toggle do código?
  • Entregas Contínuas com feature toggles

    1. 1. Entregas contínuas com Feature Toggles
    2. 2. Who am I?Solon Aguiar @solonbaneto saguiar@thoughtworks.com www.solonaguiar.com
    3. 3. Once upon a time…
    4. 4. 49 repos!
    5. 5. How to avoid unfinished/unaccepted features to impact UX?
    6. 6. What if… if!
    7. 7. - if toggle_on?(:boleto) li = f.radio_button :type …
    8. 8. Inside the view!
    9. 9. def toggle_on?(key) @toggles ||= @redis.smembers TOGGLE_SET @toggles.include? key.to_s end
    10. 10. toggle_off :boleto it 'does not show boleto as a payment method' do rendered.should_not have_field ‘boleto’ end
    11. 11. toggle_on :boleto it ’shows boleto as a payment method' do rendered.should have_field ‘boleto’ end
    12. 12. Not so easy, mes amis
    13. 13. Develop story Create toggle Manage toggle
    14. 14. declare in puppet set value and description in csv
    15. 15. 1 + 2 = 4
    16. 16. toggles: customer_qa: - payment_with_boleto tw_qa: - payment_with_installments
    17. 17. toggles: active_groups: - accepted - customer_qa overrides: payment_with_installments: on
    18. 18. Toggles Groups Overrides Environments divided activate withinactivate deactivate

    ×