{"id":798,"date":"2010-06-29T12:46:18","date_gmt":"2010-06-29T19:46:18","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/?p=798"},"modified":"2010-06-29T19:45:33","modified_gmt":"2010-06-30T02:45:33","slug":"sem-tempo-suficiente","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2010\/06\/29\/sem-tempo-suficiente\/","title":{"rendered":"Sem tempo suficiente"},"content":{"rendered":"<p><script type=\"text\/javascript\"> function get_style798 () { return \"none\"; } function end798_ () { document.getElementById('wqd798').style.display = get_style798(); } <\/script>Recentemente, em um determinado projeto, t\u00ednhamos uma semana para disponibilizar uma vers\u00e3o e uma timeline definida por motivos externos que n\u00e3o poder\u00edamos furar. O problema era que toda modifica\u00e7\u00e3o gerava ainda mais medo por conta da baixa cobertura de testes, praticamente estavam <a href=\"http:\/\/c2.com\/cgi\/wiki?CodeAndFix\">codificando e corrigindo<\/a> nessa altura do campeonato.<\/p>\n<p>Eu radicalmente sugeri um grande refactoring para corrigir nossa bateria de testes, uma parada faltando apenas uma semana para entrega, mas s\u00f3 assim voltar\u00edamos a trabalhar na entrega das features.<\/p>\n<p>Nesse momento, o cl\u00e1ssico &#8220;<a href=\"http:\/\/c2.com\/cgi\/wiki?NotEnoughTime\">N\u00e3o temos tempo para isso<\/a>&#8221; surgiu das profundezas do inferno.<\/p>\n<p>Fiquei sozinho nessa decis\u00e3o, o time inteiro foi contra. Na defesa da solu\u00e7\u00e3o apresentada eu falei: &#8220;Voc\u00eas podem se enganar imaginando que podem entregar essa release em uma semana com a qualidade do c\u00f3digo existente que voc\u00eas sabem que vai de mal a pior ou podem trabalhar para corrigir esses problemas e entregar o poss\u00edvel, mas funcionando&#8221;.<\/p>\n<p>Sabemos da import\u00e2ncia de testes, todas as metodologias os cobra obrigatoriamente, ent\u00e3o se voc\u00ea n\u00e3o testa, voc\u00ea est\u00e1 errado em todas as metodologias. O problema sempre \u00e9 a desculpa da timeline e quanto mais vai se aproximando mais desculpas procuramos encontrar para esconder as defici\u00eancias. Como nesse caso n\u00e3o t\u00ednhamos Test First, os problemas v\u00e3o se empilhando no final e se tornam mais dif\u00edceis de serem detectados.<\/p>\n<p>Por sorte, minha sugest\u00e3o acabou sendo acatada, apesar de ser apenas um consultor no projeto, portanto uma <a href=\"http:\/\/en.wikipedia.org\/wiki\/The_Chicken_and_the_Pig\">galinha e n\u00e3o porco<\/a>.<\/p>\n<h2>De onde nascem essas desculpas?<\/h2>\n<p>Coragem \u00e9 um dos valores do XP, \u00e9 importante enfrentarmos esse tipo de situa\u00e7\u00e3o que descrevi, na vida real isso quase nunca \u00e9 poss\u00edvel porque essas arquiteturas fl\u00e1cidas ou c\u00f3digos mal cheirosos n\u00e3o nascem do dia para o outro e v\u00e3o se acumulando.<\/p>\n<p>O projeto que descrevi era um projeto novo, tecnologias fresquinhas e um time modernoso. Imagina agora se voc\u00ea est\u00e1 em uma corpora\u00e7\u00e3o que usa um processo cascata, todo amarrado, criando documentos UML desnecess\u00e1rios no EA, struts 1 como framework, CVS como controle de vers\u00e3o do c\u00f3digo [quando h\u00e1! Sim, em pleno 2010 ainda h\u00e1 quem n\u00e3o use nenhum], o c\u00f3digo de banco de dados cheio de procedures e tantas modernidades da d\u00e9cada de 80.<\/p>\n<p>Ent\u00e3o, acha que s\u00f3 coragem basta?<\/p>\n<p>Em muitas oportunidades o custo de mudan\u00e7as ou simplesmente &#8220;fazer o que se tem que fazer&#8221; n\u00e3o se pagar\u00e1 nem a m\u00e9dio prazo, nessas horas convencer j\u00e1 n\u00e3o basta. \u00c9 muito dif\u00edcil voc\u00ea convencer a alta dire\u00e7\u00e3o que deve jogar fora um determinado projeto e come\u00e7ar do zero, ou modificar toda a infraestrutura existente.<\/p>\n<p>A degrada\u00e7\u00e3o de um software nasce de pequenos problemas que se acumulam, no final h\u00e1 tanto para se fazer que ningu\u00e9m mais tem coragem para isso.<\/p>\n<h2>Socorro, Milfont!<\/h2>\n<p>Recebo constantemente pedido de socorro de pessoas que me conhecem das comunidades que participo como <a href=\"http:\/\/groups.google.com.br\/group\/xpce\/\">XPCE<\/a>, <a href=\"http:\/\/groups.google.com.br\/group\/guru-ce\">GURU-CE<\/a>, <a href=\"http:\/\/www.javace.org\/\">JAVA-CE<\/a>, entre outras. Geralmente s\u00e3o funcion\u00e1rios que se encontram nessa situa\u00e7\u00e3o que citei anteriormente, com projetos muito defasados e problem\u00e1ticos.\u00a0 O pedido \u00e9 sempre o mesmo, querem que eu v\u00e1 l\u00e1 dizer para a alta dire\u00e7\u00e3o o que eles [funcion\u00e1rios] j\u00e1 sabem. S\u00f3 que isso n\u00e3o basta, o movimento tem que come\u00e7ar por l\u00e1.<\/p>\n<p>Em reuni\u00e3o com a turma da <a href=\"http:\/\/www.triadworks.com.br\/\">TriadWorks<\/a>, temos discutido isso j\u00e1 h\u00e1 muito tempo e acabamos preparando um servi\u00e7o de resgate aos clientes para contornar esse problema. A proposta \u00e9 envolver as pessoas desses clientes, dar coragem e \u00e2nimo nelas para come\u00e7arem a resolver o problema.<\/p>\n<p>Resolvemos come\u00e7ar com nossos pr\u00f3prios clientes, sim, d\u00e1 prefer\u00eancia a quem tem contrato conosco e depois verificar como abrir para a comunidade.<\/p>\n<p>Ent\u00e3o, esse envolvimento n\u00f3s demos o codinome de <strong>&#8220;AvoidNotEnoughTime&#8221;<\/strong> e consiste basicamente em um conjunto de a\u00e7\u00f5es\/eventos\u00a0 com os funcion\u00e1rios dessas empresas para dar essa for\u00e7a necess\u00e1ria para anular o NotEnoughTime na base. \u00c9 um movimento de baixo pra cima, roots, ser\u00e3o desde <a href=\"http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?WhatIsCodingDojo\">Coding Dojos<\/a>, <a href=\"http:\/\/www.coderetreat.com\/\">Code Retreat<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Google_Code_Jam\">Code Jam<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Hack_Day\">Hack Days<\/a>, <a href=\"http:\/\/pt.wikipedia.org\/wiki\/Lightning_Talk\">Lightning Talks<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Open_Space_Technology\">Open Space<\/a> ou um formato adequado a um determinado problema que identificarmos.<\/p>\n<p>N\u00f3s n\u00e3o vamos cobrar a mais dos clientes por isso, ali\u00e1s, eles nem foram avisados e n\u00e3o ter\u00e3o controle sobre o projeto, n\u00f3s que decidimos quando, como e com quem faremos justamente para evitar sabotagem ou direcionamento.<\/p>\n<p><a href=\"http:\/\/picasaweb.google.com.br\/handersonbf\/GitHackDay27Junho2010#5487617659376766882\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone\" title=\"Git Hack Session 2010 - 1\" src=\"http:\/\/lh3.ggpht.com\/_ixVOzmHRw-A\/TCfvL8JQD6I\/AAAAAAAAfqk\/Pum7iyA53Ek\/s640\/DSC06462.JPG\" alt=\"\" width=\"512\" height=\"384\" \/><\/a><\/p>\n<p>Sem planejamento nem nada, resolvemos iniciar mesmo assim, domingo passado [27\/06\/2010] realizamos um <a href=\"http:\/\/picasaweb.google.com.br\/handersonbf\/GitHackDay27Junho2010\">Git Session<\/a> onde eu [@<a href=\"http:\/\/twitter.com\/cmilfont\">cmilfont<\/a>], @<a href=\"http:\/\/twitter.com\/triadworks\">triadworks<\/a> representada por @<a href=\"http:\/\/twitter.com\/handersonbf\">handersonbf<\/a>, @<a href=\"http:\/\/twitter.com\/rponte\">rponte<\/a> e @<a href=\"http:\/\/twitter.com\/carlosatilabreu\">carlosatilabreu<\/a>, recebemos funcion\u00e1rios de clientes nossos. @<a href=\"http:\/\/twitter.com\/jeffersongirao\">jeffersongirao<\/a> da <a href=\"http:\/\/www.grupotubform.com.br\/\">TubForm<\/a>, @<a href=\"http:\/\/twitter.com\/rodrigogalba\">rodrigogalba<\/a> da <a href=\"http:\/\/www.casamagalhaes.com.br\">Casa Magalh\u00e3es<\/a> e @<a href=\"http:\/\/twitter.com\/rodrigodealer\">rodrigodealer<\/a> da <a href=\"http:\/\/www.fortesinformatica.com.br\/\">Fortes Inform\u00e1tica<\/a>.<\/p>\n<p><a href=\"http:\/\/picasaweb.google.com.br\/handersonbf\/GitHackDay27Junho2010#5487617622384050994\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone\" title=\"Git Hack Session 2010 - 1\" src=\"http:\/\/lh3.ggpht.com\/_ixVOzmHRw-A\/TCfvJyVgAzI\/AAAAAAAAfqk\/HEQ4uc8mtwU\/s640\/DSC06459.JPG\" alt=\"\" width=\"512\" height=\"384\" \/><\/a><\/p>\n<h2>O que voc\u00eas ganham com isso?<\/h2>\n<p>Resolvemos fazer um Git Hack Session devido alguns de nossos clientes usarem CVS e SVN. O tempo perdido resolvendo problemas de reposit\u00f3rio como merges e bobagens simples causam um preju\u00edzo enorme, as desculpas para mudarem cai sempre no &#8220;n\u00e3o temos suficiente&#8221; ou &#8220;depois fazemos quando terminar esse projeto&#8221;.<\/p>\n<p>Ent\u00e3o cada ponto de dificuldade que um time enfrenta e observarmos que se repete nos demais clientes, vamos organizar a\u00e7\u00f5es para envolver essa turma afim de anular essas desculpas. Treinar multiplicadores em todos os princ\u00edpios.<\/p>\n<p>No caso do <a href=\"http:\/\/jefferson.eti.br\/tech\/\">Jefferson Gir\u00e3o<\/a>, que trabalha tamb\u00e9m para a <a href=\"http:\/\/hoodiny.com\/\">Hoodiny<\/a>, veio mais para nos auxiliar, j\u00e1 que est\u00e1 mestre no uso do git no meu cliente <a href=\"http:\/\/diariodonordeste.globo.com\/materia.asp?codigo=802976\">Tubform [uma das maiores ind\u00fastrias do Nordeste]<\/a>.<\/p>\n<p><a href=\"http:\/\/picasaweb.google.com.br\/handersonbf\/GitHackDay27Junho2010#5487617567767983810\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone\" title=\"Git Hack Session 2010 - 1 - 1\" src=\"http:\/\/lh6.ggpht.com\/_ixVOzmHRw-A\/TCfvGm4A9sI\/AAAAAAAAfqk\/g9278Qrqjo8\/s640\/DSC06455.JPG\" alt=\"\" width=\"512\" height=\"384\" \/><\/a><\/p>\n<p>Dessa forma nosso trabalho de consultoria ser\u00e1 facilitado e no m\u00ednimo j\u00e1 far\u00edamos esses eventos internamente, ent\u00e3o unimos o \u00fatil ao agrad\u00e1vel.<\/p>\n<p>Se voc\u00ea gostaria de participar de algum desses eventos mesmo n\u00e3o sendo funcion\u00e1rio de cliente nosso, mande um email para mim [cmilfont@gmail.com] e tentaremos incluir sempre quando puder. Domingo agora surgiu um desfalque, at\u00e9 <a href=\"http:\/\/twitter.com\/cmilfont\/status\/17157321685\">twittei<\/a> convocando algu\u00e9m que estivesse dispon\u00edvel, mas foi em cima da hora.<\/p>\n<p><a title=\"Come\u00c3\u00a7ou #gitsession on Twitpic\" href=\"http:\/\/twitpic.com\/20fe7x\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/s3.amazonaws.com\/twitpic\/photos\/large\/121650621.jpg?AWSAccessKeyId=0ZRYP5X5F6FSMBCCSE82&amp;Expires=1277841604&amp;Signature=NHhg8E3GmOduBzRGb9aMOqKmZhc%3D\" alt=\"Come\u00c3\u00a7ou #gitsession on Twitpic\" width=\"480\" height=\"360\" \/><\/a><\/p>\n<p id=\"wqd798\">Typically chemist&#8217;s shop can sale to you with discreet treatments for various heartiness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra manufacturer coupon<\/a>&#8220;. Maybe &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra discount coupons<\/a>&#8221; is a highly complicated matter. Matters, like &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">coupons for viagra<\/a>&#8220;, are connected numerous types of soundness problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may turn on erectile malfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a recipe is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies. <\/p>\n<p><script type=\"text\/javascript\"> end798_(); <\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recentemente, em um determinado projeto, t\u00ednhamos uma semana para disponibilizar uma vers\u00e3o e uma timeline definida por motivos externos que n\u00e3o poder\u00edamos furar. O problema era que toda modifica\u00e7\u00e3o gerava ainda mais medo por conta da baixa cobertura de testes, praticamente estavam codificando e corrigindo nessa altura do campeonato. Eu radicalmente sugeri um grande refactoring [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11,27,12,17,18,13],"tags":[305,306,252,251,370,253,288,381,279],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/798"}],"collection":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/comments?post=798"}],"version-history":[{"count":15,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/798\/revisions"}],"predecessor-version":[{"id":1003,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/798\/revisions\/1003"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}