A regra de três

Todo programador que já nasceu pensa que a ideia que acabou de sair de sua cabeça para o editor é a solução mais generalizada, mais flexível e mais adequada para todos os casos que já foi concebida. Nós pensamos que criamos um software que é uma solução de propósito geral para algum conjunto de problemas, mas quase sempre estamos errados. Temos a ilusão da reutilização. Não se sinta mal. Essa é uma doença endêmica entre os desenvolvedores de software. Um risco ocupacional, na verdade.

Se aprendi alguma coisa em minha carreira de programador, foi isto: criar software reutilizável, verdadeiramente software reutilizável, é um problema incrivelmente difícil – bem próximo do nomear coisas e invalidação de cache.

Minhas ideias sobre isso se cristalizaram em 2004, quando li Facts and Fallacies of Software Engineering (Fatos e Falácias da Engenharia de Software) pela primeira vez. No geral, é um livro de acertos ou erros, mas há algumas joias nele, como o fato nº 18:

Há duas “regras de três” no [software] reutilização:

  • É três vezes mais difícil criar componentes reutilizáveis do que componentes de uso único, e
  • um componente reutilizável deve ser testado em três aplicativos diferentes antes de ser suficientemente geral para ser aceito em uma biblioteca de reutilização.

Sim, essa é apenas uma regra prática de um artesão, mas a Regra de Três é uma regra prática incrivelmente poderosa e eficaz na qual passei a acreditar profundamente. É semelhante à admoestação de ter pelo menos uma outra pessoa revise seu código, outra regra de ouro é que comprovadamente funciona. Para criar algo realmente reutilizável, o senhor precisa primeiro convencer três públicos diferentes a usá-lo completamente.

OK, então o senhor criou uma solução que risca seu mas será que mais alguém se importa? Quantas outras pessoas têm o problema que seu software ou site resolve? Quantas outras soluções concorrentes existem para o senhor escolher? Fora do seu caso pessoal de paciente zero, o senhor consegue convencer alguém a adotar sua solução de bom grado, ou mesmo com entusiasmo? Esse é seu primeiro obstáculo. O senhor consegue chegar ao número um?

Até que ponto acredito profundamente na Regra de Três? Tão profundamente que criei duas empresas inteiras com base nesse conceito.

Com a Stack OverflowNa verdade, não nos propusemos a criar um mecanismo de Q&A para fins gerais. Queríamos apenas resolver o problema dos programadores que procuravam respostas técnicas rápidas e sólidas para seus problemas de programação, em vez das páginas intermináveis de opiniões e argumentos que normalmente recebiam. Ah, sim, e também para lidar com o aquele site com hífen. Um dos maiores prazeres da minha vida é conhecer programadores que nunca ouviram falar desse site hifenizado. Espero que o senhor me perdoe, mas eu mentalmente sobreponho uma faixa gigante no estilo Dubya de “Missão Cumprida” sobre suas cabeças quando eles dizem isso. Sempre dou um sorriso de um quilômetro de largura.

Lançamos o Stack Overflow para o público em agosto de 2008. O sucesso inicial foi tão grande que comecei a ficar curioso para saber se ele realmente seria funcionar para públicos diferentes, embora essa nunca tenha sido a ideia original. Mas decidimos tocar o seis graus de Kevin Bacon e dar alguns passos de bebê para descobrir. Menos de um ano depois, tínhamos Stack Overflow para programadores, Falha no servidor para administradores de sistemas, e Super Usuário para usuários avançados de computadores – a trilogia completa. Três sites com três públicos distintos, todos em pleno funcionamento.

Um cliente, usuário ou público pode ser um acaso. Dois lhe dão confiança de que talvez, apenas talvez, o senhor não esteja tendo sorte desta vez. E três? Bem, três é um número mágico. Sim, é.

Depois que provamos que o mecanismo do Stack Overflow poderia ser dimensionado para essas três comunidades distintas, senti-me à vontade para prosseguir com o Stack Exchange, que agora é uma rede de mais de 100 sites de perguntas e respostas voltados para a comunidade. As suposições derivadas do público-alvo de programação para as quais o mecanismo foi originalmente projetado significam que ele nunca poderá ser dimensionado para todos os mas para comunidades baseadas em tópicos que podem ser compreendidos por meio de perguntas sobre ciência, fatos e dados, não há mecanismo melhor no mundo. Não que eu seja tendencioso ou algo assim, mas é a pura verdade. O senhor não acredita em mim? Pergunte ao Google.

Quando nós lançado Discurso em fevereiro, eu não tinha nenhuma ilusão de que havíamos realmente criado um software de fórum de propósito geral funcional, mesmo após oito meses de trabalho árduo. É por isso que o a página “buy it” ainda tem este texto na parte superior:

Infelizmente, o senhor não pode comprar o Discourse… ainda.

Nosso plano imediato é encontrar três grandes parceiros dispostos a viver no limite do beta e administrar fóruns conoscoO senhor pode ter certeza de que criamos uma plataforma de discussão que funciona para uma variedade de comunidades diferentes. Prometemos fazer tudo o que pudermos para hospedar seu fórum e torná-lo incrível por dois anos. Em troca, o senhor promete trabalhar conosco para corrigir todas as arestas do Discourse e garantir que ele seja dimensionado com sucesso – tanto social quanto tecnologicamente – para esses três públicos muito diferentes.

Ei, lá está aquele número mágico de novo!

Mesmo agora, meses depois, não estamos nem mesmo fingindo que temos um software de discussão de código aberto que funciona para a maioria das comunidades. Que diabo, o FAQ literalmente diz ao senhor não para usar o Discourse. Em vez disso, estamos gastando todo o nosso esforço lenta e metodicamente conduzindo o software através desses três parceiros selecionados, um por um, ajustando-o e adaptando-o para cada comunidade ao longo do caminho, certificando-nos de que cada um de nossos parceiros não esteja apenas satisfeito com nosso software de discussão, mas em êxtase felizes, antes de continuarmos a recomendar o Discourse, mesmo que provisoriamente, como qualquer tipo de solução de discussão de propósito geral.

Como eu adoro o altar da Regra de Três, nos últimos seis meses, meu trabalho em tempo integral tem sido praticamente dizer “não” às pessoas todos os dias:

Ei, o Discourse parece ótimo, o senhor pode hospedar uma instância para nós?

Desculpe, ainda não. Provavelmente em 2014!

Precisamos desesperadamente de um ótimo software de fórum para nossa comunidade! O senhor pode nos ajudar a configurar o Discourse?

Desculpe, mas não posso. Estamos concentrados na criação do software. É o 100% de código abertoe temos um guia de instalação muito bom se o senhor quiser pegar o código e configurá-lo!

Pagaremos ao senhor para hospedar o Discourse para nós! O senhor se cala e pega meu dinheiro!

Desculpe, eu gostaria de poder. Ainda não está completo o suficiente, e a última pessoa que quero desapontar é um cliente pagante, e nem sequer temos um sistema de faturamento! Planejamos começar a hospedar no início de 2014.

Então, sim, não vou mentir para os senhores – sou basicamente um grande chato. Mas sou um grande chato com uma plano.

A solução que construímos no Discourse foi um bom começo, mas lamentavelmente incompleta e até errada em algumas áreas. A única maneira de descobrirmos isso é por meio do executando lentamente a solução com nossos três parceiros, para viver na mesma casa de software que eles, como colegas de quarto, para caminhar ao lado deles à medida que desenvolvem suas comunidades de discussão e fazer tudo o que pudermos para ajudar a transformá-la em uma comunidade nós desfrutamos tanto quanto todos os outros. E quando havia apenas um par de passos na areia, bem… é porque estávamos carregando o senhor.

Ainda não passamos por todo esse processo. Estamos apenas no parceiro nº 2; leva o tempo que for preciso. Mas, graças à Regra de Três, estou confiante de que, quando terminarmos com o parceiro nº 3, finalmente teremos um software de discussão de código aberto de uso geral verdadeiramente reutilizável para compartilhar com o mundo – um software que posso recomendar sem hesitação a (quase) qualquer pessoa, porque provavelmente também funcionará para sua comunidade.

Portanto, da próxima vez que o senhor pensar “Construí uma coisa reutilizável!”, pare e pense “como posso encontrar três usuários, clientes ou públicos para provar que construí algo reutilizável?”. em vez disso.