<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Desenvolvimento &#193;gil - Blog da Improve It: Onde foram parar aqueles caras da Improve It?</title>
    <link>http://blog.improveit.com.br/articles/2008/03/13/onde-foram-parar-aqueles-caras-da-improve-it</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Onde foram parar aqueles caras da Improve It?</title>
      <description>&lt;p&gt;H&#225; pouco mais de dois meses n&#243;s decidimos &lt;a href="http://blog.improveit.com.br/articles/2007/12/19/novos-rumos-em-2008"&gt;mudar de rumos&lt;/a&gt; e deixar os servi&#231;os de consultoria de lado. De l&#225; para c&#225;, estamos bem quietos. Afinal, o que anda acontecendo por aqui? Resumidamente, resolvemos come&#231;ar nossa jornada resolvendo um problema bem concreto, para ent&#227;o come&#231;ar a trabalhar no nosso primeiro produto. &lt;/p&gt;

&lt;h1&gt;Problema&lt;/h1&gt;

&lt;p&gt;A gente acha que bons produtos s&#227;o extra&#237;dos de projetos reais, que resolvem o problema de algu&#233;m e podem ser re-estruturados para resolver o problema de muitos. Sendo assim, ainda em dezembro, na mesma &#233;poca que anunciamos nossa sa&#237;da do mercado de consultoria, come&#231;amos a trabalhar para um cliente. Trata-se de um neg&#243;cio pequeno, por&#233;m extremamente bem sucedido, que atua em um ramo que movimenta uma boa grana. Ou seja, o neg&#243;cio &#233; pequeno, mas h&#225; dinheiro circulando o tempo todo. Por enquanto, n&#227;o iremos revelar nem quem &#233; o cliente e nem qual &#233; a &#225;rea de neg&#243;cio, mas, para facilitar a hist&#243;ria que vem a seguir, vou dar um nome fict&#237;cio ao nosso cliente. Vamos supor que chama-se J&#250;lia.&lt;/p&gt;

&lt;p&gt;J&#250;lia tinha um site. N&#227;o era dos melhores, mas era toler&#225;vel. Era parecido com muitos outros de pessoas que atuam no mesmo ramo. Este ramo &#233; interessante porque a maioria dos sites &#233; horr&#237;vel e partem de uma premissa que, na nossa opini&#227;o, &#233; profundamente equivocada. Nossa miss&#227;o era dar um novo site &#224; J&#250;lia. Mas, n&#227;o apenas isso. Este site teria que ter algumas funcionalidades que poderiam ajud&#225;-la a acelerar seus processos. Ou seja, h&#225; um aspecto institucional, de apresentar o trabalho e outro funcional muito forte e, tipicamente, mal resolvido. Resolvemos tratar deste &#250;ltimo de maneira inovadora, mas n&#227;o foi s&#243; a&#237; que decidimos inovar. Tamb&#233;m quer&#237;amos quebrar a premissa fundamental que rege a maioria dos sites deste ramo. &lt;/p&gt;

&lt;h1&gt;Primeiro Ato&lt;/h1&gt;

&lt;p&gt;Dividimos o projeto em duas partes, que vou chamar de primeiro ato e segundo ato. O primeiro ato foi implementado em pouco mais de um m&#234;s e colocado no ar por volta do dia 10 de fevereiro de 2008. Na equipe, &lt;a href="http://www.improveit.com.br/vinicius"&gt;eu&lt;/a&gt;, o &lt;a href="http://www.improveit.com.br/tapajos"&gt;Tapaj&#243;s&lt;/a&gt; e o &lt;a href="http://www.improveit.com.br/leandro"&gt;Leandro&lt;/a&gt; trabalhando nisso em torno de trinta horas por semana.&lt;/p&gt;

&lt;p&gt;Durante o desenvolvimento, estivemos pr&#243;ximos da J&#250;lia o tempo todo. Conversamos muito sobre cada aspecto do sistema e fizemos in&#250;meros experimentos, sobretudo com a interface do usu&#225;rio. Al&#233;m disso, tentamos simplificar tudo que pod&#237;amos. A premissa era: pregui&#231;a &#233; bom! Sim, quando se trata de desenvolvimento de software, h&#225; um certo tipo de "pregui&#231;a" que nos alerta quando estamos fazendo algo de forma excessivamente complicada. Foi esta  pregui&#231;a que nos levou, por exemplo, a n&#227;o usar banco de dados para praticamente nada. A &#250;nica exce&#231;&#227;o &#233; o armazenamento de sess&#245;es. Devido a algumas caracter&#237;sticas do aplicativo, n&#227;o dava para usar sess&#245;es baseadas em cookie.&lt;/p&gt;

&lt;p&gt;&#201; poss&#237;vel fazer um software significativo sem banco de dados? Ou melhor, d&#225; para fazer sem persist&#234;ncia? Neste aplicativo, em particular, n&#227;o dava para fazer sem persist&#234;ncia, mas dava para ficar sem banco de dados. Quer dizer que usamos algo tipo preval&#234;ncia de objetos? N&#227;o exatamente. H&#225; muita informa&#231;&#227;o persistida, mas n&#243;s n&#227;o tivemos que cuidar diretamente desta persist&#234;ncia e isso nos poupou muito trabalho. Os detalhes eu vou ficar devendo, lamentavelmente. Mas, posso dar uma id&#233;ia de n&#250;meros para voc&#234;s. Os dados persistidos podem levar o site a ter uma grande quantidade de p&#225;ginas internas. Neste momento, o sitemap cont&#233;m 15.133 p&#225;ginas. Entretanto, este n&#250;mero &#233; menor que o n&#250;mero real de p&#225;ginas que ele possui. Como ficaria muito custoso gerar um sitemap completo, n&#243;s decidimos fazer um corte. Em todo caso, isso d&#225; uma id&#233;ia da quantidade de dados que s&#227;o persistidos e usados no site, por&#233;m, surpreendentemente, n&#227;o h&#225; banco de dados envolvido! :-)&lt;/p&gt;

&lt;p&gt;H&#225; um detalhe interessante nesta quest&#227;o. Se h&#225; tantos dados, como a J&#250;lia faz para cadastrar estes dados e mant&#234;-los? Boa pergunta. N&#227;o d&#225; para explicar aqui como isso &#233; feito, mas basta dizer que sim, h&#225; uma &#225;rea administrativa, onde ela manipula todos os dados com uma interface bacana. Mas, a melhor parte da hist&#243;ria &#233; que n&#243;s n&#227;o tivemos que fazer isso, o que, considerando a sofistica&#231;&#227;o da aplica&#231;&#227;o, explica como fizemos tudo em pouco mais de um m&#234;s.&lt;/p&gt;

&lt;h3&gt;Qualidade&lt;/h3&gt;

&lt;p&gt;Linhas de c&#243;digo n&#227;o indicam quase nada isoladamente, mas, quando usadas em certas compara&#231;&#245;es, servem para dar uma id&#233;ia de caracter&#237;sticas do projeto. At&#233; o momento, temos 742 linhas de c&#243;digo na aplica&#231;&#227;o e 1934 linhas de specs. Isso significa que temos 2.6 linhas de spec para cada linha de c&#243;digo da aplica&#231;&#227;o. Ali&#225;s, n&#227;o h&#225; uma &#250;nica linha de c&#243;digo da aplica&#231;&#227;o que n&#227;o receba a visita de pelo menos um spec. Ou seja, nossa cobertura de c&#243;digo pelos testes &#233; de 100%, como em todos os nossos projetos. Al&#233;m dos specs, temos in&#250;meros testes de aceita&#231;&#227;o no Selenium que totalizam 2136 checagens. Estes &#250;ltimos testes consomem, em m&#233;dia, de 5 a 8 minutos para executar e s&#227;o executados sempre que fazemos uma integra&#231;&#227;o (com o plugin &lt;a href="http://integration.rubyforge.org"&gt;integration&lt;/a&gt;). Estes n&#250;meros mostram que temos uma preocupa&#231;&#227;o significativa com a quest&#227;o da qualidade. &lt;/p&gt;

&lt;p&gt;Al&#233;m dos testes automatizados, n&#243;s tamb&#233;m realizamos testes manuais em cinco navegadores: IE6, IE7, Firefox, Opera e Safari. Estes testes t&#234;m o objetivo de inspecionar visualmente a parte do design, j&#225; que este &#233; um terreno ainda complicado para os testes automatizados. Qualquer mudan&#231;a no site leva, inevitavelmente, a testes manuais nestes navegadores, al&#233;m dos automatizados. Em todo caso, h&#225; um tipo de checagem automatizada que podemos fazer para a parte do design. Trata-se das valida&#231;&#245;es da W3C. O aplicativo passa nas valida&#231;&#245;es da W3C. Desde o in&#237;cio do projeto o &lt;a href="http://www.improveit.com.br/leandro"&gt;Leandro&lt;/a&gt;, sobretudo, tem demonstrado muita preocupa&#231;&#227;o em assegurar que o aplicativo respeite todos os web standards. &lt;/p&gt;

&lt;p&gt;Os n&#250;meros relacionados aos testes s&#227;o elevados, mas, quando o assunto &#233; gest&#227;o de bugs, os n&#250;meros j&#225; n&#227;o s&#227;o t&#227;o expressivos. Para come&#231;o de conversa, n&#227;o temos nem mesmo um sistema de gest&#227;o de bugs. Pois &#233;, que desorganizados n&#243;s somos, n&#233;? Nenhum sistema para gerenciar chamados e controlar os bugs. A sim, agora lembrei o porqu&#234; disso. N&#227;o tivemos nenhum relato de bug desde que o sistema foi ao ar! E n&#227;o foi por falta de uso. Ent&#227;o, acho que d&#225; para continuar sem gest&#227;o de bugs. Mas, garanto que seria imposs&#237;vel fazer isso sem a rela&#231;&#227;o quase paran&#243;ica que n&#243;s temos com os testes.&lt;/p&gt;

&lt;p&gt;Sendo bem honesto, a falta de relatos de bugs n&#227;o significa que eles n&#227;o existam. Significa apenas que n&#227;o foram descobertos ainda. De fato, havia alguns que n&#243;s pr&#243;prios conseguimos detectar depois de colocar o sistema no ar. Nenhum deles era grave e talvez ningu&#233;m nem tenha chegado a passar por eles. Mas, n&#243;s corrigimos assim que identificamos. Em todo caso, j&#225; faz v&#225;rios dias que n&#227;o conseguimos detectar nada novo e continuamos sem nenhum relato de bug, apesar de termos uma utiliza&#231;&#227;o crescente da aplica&#231;&#227;o.&lt;/p&gt;

&lt;h3&gt;Hospedagem e Deployment&lt;/h3&gt;

&lt;p&gt;Estamos usando o VPS de 512MB da &lt;a href="http://www.slicehost.com"&gt;SliceHost&lt;/a&gt;. At&#233; o momento, o servi&#231;o deles tem sido perfeito. A m&#225;quina &#233; muito r&#225;pida e est&#225;vel. De fato, ela &#233; superestimada para as necessidades desta aplica&#231;&#227;o. Mas, preferimos que seja assim. N&#243;s fizemos in&#250;meros testes de desempenho com o &lt;a href="http://www.hpl.hp.com/research/linux/httperf/"&gt;Httperf&lt;/a&gt; antes de lan&#231;ar o site e eles demonstraram que o site tem um tempo de resposta excepcional, mesmo quando a carga &#233; muito elevada. Parte disso, naturalmente, tem a ver com o trabalho cuidadoso que fizemos na parte de caching.&lt;/p&gt;

&lt;p&gt;Este aplicativo tem a propriedade de n&#227;o ter modifica&#231;&#245;es muito freq&#252;entes, embora tenha uma grande quantidade de dados. Em torno de 90% do site pode se beneficiar do cache mais eficaz que temos no &lt;a href="http://www.rubyonrails.org"&gt;Rails&lt;/a&gt;, que &#233; o cache de p&#225;gina. Sendo assim, estamos usando cache de p&#225;gina na maior parte do site e o resultado n&#227;o poderia ser melhor. Os 10% restantes felizmente representam as funcionalidades menos usadas, embora tenham sido as mais trabalhosas para implementar. &lt;/p&gt;

&lt;p&gt;Quanto ao application server, inicialmente pensamos em usar o &lt;a href="http://nginx.net/"&gt;nginx&lt;/a&gt; com o &lt;a href="http://mongrel.rubyforge.org"&gt;Mongrel&lt;/a&gt;. Mas, antes de tentar esta alternativa, lembrei da apresenta&#231;&#227;o que considerei a mais interessante no Minas on Rails e no Rio on Rails. Foi a do Eduardo Rocha, do &lt;a href="http://www.ocurioso.com"&gt;O Curioso&lt;/a&gt;. Uma das coisas que me chamou a aten&#231;&#227;o foi que ele disse que usava um tal de &lt;a href="http://litespeedtech.com"&gt;LiteSpeed&lt;/a&gt; e que recomendava. At&#233; ent&#227;o, eu jamais tinha ouvido falar do &lt;a href="http://litespeedtech.com"&gt;LiteSpeed&lt;/a&gt;. Conversei com o Eduardo antes de colocar a aplica&#231;&#227;o no ar e ele refor&#231;ou a prefer&#234;ncia pelo &lt;a href="http://litespeedtech.com"&gt;LiteSpeed&lt;/a&gt; e a recomenda&#231;&#227;o. Resolvemos experimentar e n&#227;o poder&#237;amos estar mais felizes. O &lt;a href="http://litespeedtech.com"&gt;LiteSpeed&lt;/a&gt; cuida de tudo e &#233; muito f&#225;cil de usar. Atua como WebServer, Application Server e ainda distribui a carga para v&#225;rias inst&#226;ncias do &lt;a href="http://www.rubyonrails.org"&gt;Rails&lt;/a&gt;. No nosso caso, est&#225; configurado para usar at&#233; dez inst&#226;ncias simultaneamente.&lt;/p&gt;

&lt;p&gt;O &lt;a href="http://litespeedtech.com"&gt;LiteSpeed&lt;/a&gt; &#233; muito est&#225;vel, leve e r&#225;pido. No lado web server, &#233; mais r&#225;pido e mais leve que o Apache. A integra&#231;&#227;o com o &lt;a href="http://www.rubyonrails.org"&gt;Rails&lt;/a&gt;, atrav&#233;s do LSAPI gera um desempenho superior ao do &lt;a href="http://mongrel.rubyforge.org"&gt;Mongrel&lt;/a&gt;. A &#250;nica coisa que ainda n&#227;o entendi &#233; por que tanta gente usa o &lt;a href="http://mongrel.rubyforge.org"&gt;Mongrel&lt;/a&gt; quando poderia usar o &lt;a href="http://litespeedtech.com"&gt;LiteSpeed&lt;/a&gt; que &#233; melhor em todos os aspectos que vimos at&#233; o momento. A sim, ele n&#227;o &#233; open source, mas n&#227;o &#233; necess&#225;rio pagar por nenhuma licen&#231;a, a menos que o site tenha que responder a um n&#250;mero superior a 150 requisi&#231;&#245;es por segundo, o que ainda n&#227;o &#233; o nosso caso.&lt;/p&gt;

&lt;p&gt;Fizemos testes de desempenho com &lt;a href="http://www.hpl.hp.com/research/linux/httperf/"&gt;Httperf&lt;/a&gt; e conseguimos simular at&#233; 4000 requisi&#231;&#245;es por segundo para p&#225;ginas em cache. Infelizmente n&#227;o sabemos o limite real que o servidor ag&#252;entaria porque acima deste valor, a m&#225;quina que simula os acessos passa a operar com 100% de consumo de CPU, devido &#224; grande quantidade de threads que s&#227;o criadas para o teste. At&#233; 4000 requisi&#231;&#245;es por segundo, o servidor n&#227;o chegava a consumir sequer 50% da CPU.&lt;/p&gt;

&lt;h1&gt;Segundo ato&lt;/h1&gt;

&lt;p&gt;No momento, estamos trabalhando na segunda parte do projeto que deve ser colocada em produ&#231;&#227;o na pr&#243;xima semana. A partir da&#237;, a J&#250;lia segue seu caminho e n&#243;s seguimos o nosso. Passaremos a trabalhar para generalizar o aplicativo que fizemos para ela. O objetivo, naturalmente, ser&#225; permitir que o outros pequenos neg&#243;cios, no mesmo ramo, possam fazer uso do mesmo aplicativo.&lt;/p&gt;

&lt;h1&gt;Resultados&lt;/h1&gt;

&lt;p&gt;Assim que o novo site da J&#250;lia foi ao ar, ela come&#231;ou a receber in&#250;meros coment&#225;rios de clientes e pessoas do mesmo ramo elogiando o trabalho. Houve pouqu&#237;ssima cr&#237;tica. As apostas que n&#243;s fizemos se revelaram certeiras. Agora, in&#250;meros colegas dela, da mesma &#225;rea de neg&#243;cio e correlatas, perguntam-lhe quem fez o site e querem ter um igual. Que legal! :-) &#201; claro que n&#243;s queremos atender a todos eles, mas ainda n&#227;o &#233; o momento. N&#227;o queremos fazer um site para cada pessoa. Queremos que todos usem um produto bem definido, que seja f&#225;cil para eles usarem e, sobretudo, que nos permita incorporar novos clientes com rapidez e facilidade. Por conta disso, a J&#250;lia tem um acordo de sigilo conosco que a impede de dizer quem fez. Como n&#227;o queremos ningu&#233;m nos fazendo perguntas sobre o site dela antes da hora, nem ela conta quem fez, nem eu conto para voc&#234;s o que n&#243;s fizemos. E assim n&#243;s vamos ficar por mais alguns meses, beleza? :-)&lt;/p&gt;

&lt;p&gt;Uma das coisas que n&#243;s mais gostamos de saber &#233; que o novo site est&#225; rendendo bons frutos para a J&#250;lia. Duas coisas nos chamaram a aten&#231;&#227;o em particular. A primeira &#233; que ela relatou que o n&#250;mero de pedidos di&#225;rios de or&#231;amento para seus servi&#231;os cresceu mais de cinco vezes desde que o site foi colocado no ar. Ela agora gasta muito mais tempo respondendo emails, mas este n&#227;o &#233; um problema assim t&#227;o ruim, n&#233;? :-) A outra coisa legal &#233; que ela disse que agora os clientes j&#225; chegam respeitando-a muito mais. Eles olham o site e concluem que est&#227;o lidando com uma profissional de alt&#237;ssimo n&#237;vel, o que &#233; mais do que verdade. &lt;/p&gt;

&lt;p&gt;Estamos animados e continuamos trabalhando bastante. Por isso que n&#227;o tem dado tempo para escrever muito. Felizmente, ontem conseguimos publicar o plugin &lt;a href="http://integration.rubyforge.org"&gt;integration&lt;/a&gt; e tem um outro que est&#225; no forno. Espero que possamos lan&#231;ar em breve. Tem muita coisa legal vindo por a&#237;.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Mar 2008 08:55:52 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:2c407262-a129-4939-adce-8b99e6d02bea</guid>
      <author>Vinicius Manh&#227;es Teles</author>
      <link>http://blog.improveit.com.br/articles/2008/03/13/onde-foram-parar-aqueles-caras-da-improve-it</link>
      <category>produto</category>
      <category>rails</category>
    </item>
    <item>
      <title>"Onde foram parar aqueles caras da Improve It?" by Igor</title>
      <description>&lt;p&gt;Esse servi&#231;o da SliceHost &#233; mesmo bom assim? n&#226;o achei informa&#231;&#245;es completas dele no site... Voc&#234; pode ter multiplos contextos, rodar varias aplica&#231;&#245;es J2EE? Como funciona?&lt;/p&gt;</description>
      <pubDate>Thu, 03 Apr 2008 11:07:35 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:c99b697d-5b70-4a51-af21-2250e83b8dcc</guid>
      <link>http://blog.improveit.com.br/articles/2008/03/13/onde-foram-parar-aqueles-caras-da-improve-it#comment-1019</link>
    </item>
    <item>
      <title>"Onde foram parar aqueles caras da Improve It?" by Leonardo Fernandes</title>
      <description>&lt;p&gt;Mas Vin&#237;cius...diz uma coisa. Essa J&#250;lia &#233; gata mesmo ?? hehheehehhe...Boa sorte e sucesso.&lt;/p&gt;</description>
      <pubDate>Fri, 14 Mar 2008 08:28:26 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:ac6c2687-ae37-418d-b9db-1e715e5b8664</guid>
      <link>http://blog.improveit.com.br/articles/2008/03/13/onde-foram-parar-aqueles-caras-da-improve-it#comment-1000</link>
    </item>
    <item>
      <title>"Onde foram parar aqueles caras da Improve It?" by Eduardo Rocha</title>
      <description>&lt;p&gt;Fala Vin&#237;cius, que bom que estejam gostando do LiteSpeed. Essa pergunta "por que todo mundo s&#243; fala do Mongrel" tamb&#233;m fiz por muito tempo :)&lt;/p&gt;

&lt;p&gt;Boa sorte e tomara que voc&#234;s lancem o produto o mais r&#225;pido poss&#237;vel, aposto que n&#227;o sou o &#250;nico "Curioso" por aqui!&lt;/p&gt;</description>
      <pubDate>Fri, 14 Mar 2008 00:06:25 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:d4f0721f-9934-4fec-848b-c0e66babd987</guid>
      <link>http://blog.improveit.com.br/articles/2008/03/13/onde-foram-parar-aqueles-caras-da-improve-it#comment-999</link>
    </item>
    <item>
      <title>"Onde foram parar aqueles caras da Improve It?" by Diego Carrion</title>
      <description>&lt;p&gt;Parab&#233;ns Vinicius pelo trabalho e excelente post. Fico aguardando muito curioso ate conhecer o site :P&lt;/p&gt;</description>
      <pubDate>Thu, 13 Mar 2008 19:45:51 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:ada3de8c-44e2-4a2f-81d5-5ba69ecf4471</guid>
      <link>http://blog.improveit.com.br/articles/2008/03/13/onde-foram-parar-aqueles-caras-da-improve-it#comment-998</link>
    </item>
  </channel>
</rss>
