Your SlideShare is downloading. ×
0
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Entregas Contínuas com feature toggles

302

Published on

My Agile Brazil 2013 talk on continuos delivery with feature toggles

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
302
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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?
  • Transcript

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

    ×