Mais uma vez vejo alguém propondo um projeto para a construção de software livre sobre um tema qualquer para um fim qualquer. Eu mesmo já o fiz várias vezes, a grande maioria das vezes acaba em… nada. Por que? Porque gerenciar projeto de software é uma coisa complicada e gerenciar software livre é muito mais complicado.
A intenção é quase sempre boa. Quase. Conheço casos de pessoas que sugeriram um projeto super empolgadas, juntaram e acolheram interessados e só depois de algum progresso as pessoas começam a perceber que o líder apenas queria um bando de programadores trabalhando de graça. Geralmente este “líder” nem sabe programar direito, apenas vendeu a idéia para um cliente e precisa de algo pronto, e rápido.
Também tem o caso da prostituição do termo Open Source. Como eu já falei aqui antes (e é algo perceptível para quem prestar um pouco de atenção) tem muita empresa no Brasil e lá fora que simplesmente pega um monte de projetos livres, empacota e vende num CD com instalador bonitinho e meia dúzia de manuais e customizações. Nada volta para a comunidade. Nem mesmo para os autores originais visto que quando você contrata uma empresa desta o “suporte” que eles te dão geralmente é pegar sua dúvida e postar no fórum ou lista de discussão do projeto. Já vi casos assim também. Nem mesmo o suporte eles pagam e (como boa parte dos programadores) têm medo de olhar o código fonte do software que estão usando. Eu acho que é medo de não entender e se sentir burro, mas isso é assunto para outro post nonsense, este é sobre gerenciar projetos.
Faça Você Mesmo
Minha primeira dica é simples: comece. Agora. Não espere.
É, eu sei. Você posta algo num fórum de discussão e logo aparecem milhares de interessados no seu jogo, sua locadora ou seu sei-lá-o-que. E logo começam a discutir qual framework web utilizar. Ou banco de dados, com uma briga cheia de emoções se vai ser MySQL ou PostgreSQL. Ou se vai ser web. Ou linguagem. O problema é que na maioria das vezes passam horas, dias, semanas ou meses de discussões e nenhum código.
Da última vez que topei entrar numa dessa fiz uma experiência. Enquanto as pessoas discutiam sobre frameworks, bancos de dados, cronogramas e requisitos peguei um PDF com os casos de uso iniciais e os implementei em POJOs, todos com testes unitários, script ant para criar um JAR… tudo bonitinho, até arquivo de projeto Eclipse tinha.
Resultado? O projeto morreu sem que nenhuma alma acrescentasse meia linha de código à que eu enviei. O que deu nas pessoas? Não tinham tempo, não sabiam, não queria, estavam ali só observando, só queriam usar, só queriam vender… povo cheio de problemas.
Por isso o melhor conselho e mais importante é: comece. Não importa se você não é muito bom no algoritmo tal, ou se uma pessoa com mais experiência seria legal para fazer aquele componente. Faça do seu jeito e se seu projeto realmente for relevante alguém com as características que você procura pode te ajudar, seja com código ou com uma consultoriazinha.
Planeje
Tenha em mente o que você vai fazer antes de começar a fazer algo. Não precisa ser nada concreto, na verdade pode ser melhor que não seja.
Se você está fazendo uma experiência com o desenvolvimento de uma biblioteca, framework, componente, bicho-da-seda transgênico ou qualquer outra coisa mas que nem mesmo você sabe no que vai dar, apenas rabisque umas idéias.
Se você está apenas construindo uma aplicação normal, uma ferramenta ou algo do tipo, mas algo que você sabe exatamente porque deve ser feito, siga o processo de desenvolvimento que se sentir mais confortável. Uma boa coisa é poder experimentar novas técnicas como metodologias ágeis sem compromisso. Só cuidado para não experimentar demais caso o projeto seja algo que você realmente queira fazer.
Não Planeje Demais
Lembre-se: o projeto não é obrigação sua nem de seus colegas.
Se você estiver trabalhando com mais de uma pessoa, esqueça prazos e tarefas assinaladas por um “project leader”. Isso até funciona em projetos maiores mas nos mais comuns apenas atrapalha e cria discórdia.
Tenha em algum lugar (Bugzilla, Trac, Cyclomatic, planilha OpenOffice Calc, sei lá) uma lista de bugs e funcionalidades que precisam ser implementadas e deixe que os seus desenvolvedores peguem as que desejam implementar. Este é seu backlog.
Sim, a tendência é eles pegarem as mais legais e deixarem as tarefas menos gloriosas na lista. Quem se dedica a um projeto deste tipo geralmente é um programador que durante o dia tem que fazer as tarefas mais chatas do mundo, enquanto tem tempo de programar por prazer o que você acha que ele quer fazer? Uma equipe madura e um bom líder ajudam a ter as tarefas mais banais e chatas concluídas por alguém.
Uma coisa que já vi funcionar é marcar com você mesmo e os desenvolvedores mais ativos do seu projeto um sprint de fim de semana.
Os melhores e mais promissores projetos livres surgem de um estalo que alguém tem e estes precisam de algo pronto rápido, uma prova de conceito que seja. Evite planejar demais nestes casos também, mesmo porque dificilmente deste sai um software de verdade, as vezes sai apenas uma experiência, um artigo, um post no seu blog ou apenas uma conversa com algum outro programador. Neste caso o que eu costumo fazer é me mandar e-mails (esquizofrênico eu?).
Quando tenho uma idéia eu abro o Gmail e digito tudo que vem na minha cabeça sobre o assunto. Vou fazendo isso durante o dia e de noite ou quando possa parar eu junto as peças.
Tenha uma Iteração Zero
Isso vale para qualquer projeto de software e merece um extenso texto porém já vale uma menção aqui. Se você é terrivelmente preguiçoso e procrastinador como a maioria das pessoas (eu incluso), não tem nada mais chato que montar um ambiente de programação. Então faça da sua primeira tarefa real, quando você ainda é só empolgação com o projeto,criar uma árvore de diretórios e um script de build(seja make, rake, ant ou maven) que gere um aplicativo, um EXE, JAR, EAR, WAR ou qualquer outra coisa que valha no seu caso (você entendeu a idéia!). Sim, este aplicativo vai estar vazio e não faz nada visto que o projeto não tem código, mas é importante você já ter essa parte chata
pronta.
Documente!
História clássica do WebWork. Provavelmente o melhor framework MVC de sua época (hoje em dia a briga tá complicada…), ganhando do Struts em praticamente tudo, menos um aspecto: documentação. Resultado? Nunca chegou a arranhar de verdade a base instalada do concorrente mesmo sendo tão superior que foi integrado como a base para novas versões do próprio Struts! A versão mais recente se orgulha de conter 900 e tantas páginas de documentação.
Um exemplo contrário é o Spring Framework. Também muito bom e revolucionário na sua época, porém com muita documentação online. Mesmo virando pelo avesso o desenvolvimento Java EE como era conhecido (e por incrível que apreça usuário de Java consegue ser mais tapado e conservador que usuário COBOL ou C++) a base instalada só cresce e ninguém sabe ao certo se além de praticamente afunda o barco do EJB 2.1 o Spring vai atrapalhar os planos do EJB 3.0.
Não faça seus usuários lerem código se você quer mantê-los como usuários. Não importa se você está fazendo uma biblioteca ou framework que tem como usuários programadores da linguagem que você está usando, mesmo se seu código for muito pequeno usuários não gostam de ler código. Se forem obrigados a fazê-lo para entender seu framework eles vão procurar alternativas. E provavelmente vão achar.
Tenha em Mente que Provavelmente Não Vai dar em Nada
É triste dizer isso mas é bem realista. A enorme maioria dos projetos livres acaba muito antes de lançar uma versão 1.0.
E se acabar? Acabou, ué. Bola pra frente. Se você aprender uma coisa a mais sobre projeto de software, sobre programação, bancos de dados, sobre gerenciar pessoas, sobre como conectar com a internet via provedor gratuito por linha discada no domingo é impossível, ou sobre qualquer outra coisa o projeto provavelmente já valeu a pena. Que venha o próximo.
Muitas vezes você recebe apenas perguntas de alguém que foi contratado para mexer no seu sistema para um cliente. Sim, a empresa poderia ter contratado você para isso, mas ela preferiu contratar outra pessoa. Por que?
Sei lá, mas é bom você procurar saber se deseja entrar nessas oportunidades. Vai ver a empresa não sabia que havia um suporte disponível, vai ver quem escolheu o seu sistema foi o próprio cara que está mexendo nele e a empresa cliente nem sabe do que se trata. Vai ver acharam que você ia ser caro demais. Ou vai ver acharam que você é um moleque de doze anos que nem contratar direito eles podem. Vai ver você é um moleque de doze anos.
Uma coisa muito chata é ver alguém fazendo dinheiro com seu projeto se não foi sua intenção. Tenha em mente o que você quer da vida antes de escolher a licença do seu produto, isso é muito importante. Software livre não precisa ser caridade, pode ser um negócio como qualquer outro mas você precisa ter um rumo e uma posição quanto a isso.
Tenha em Mente que Pode dar em Algo
Meu primeiro emprego numa grande empresa surgiu do fato de eu estar envolvido com um software livre que era muito parecido com uma implementação que a empresa tinha. Detalhe que eu nem tinha idéia disso (a implementação da empresa é fechada e desconhecida fora dela) e só soube depois que eu entrei. Meu entrevistador fez muitas perguntas sobre o sistema para saber se realmente eu o conhecia. Muitos amigos e conhecidos meus conseguiram empregos assim. Esse é o benefício indireto mais importante e frequente.
Outros são mais felizes em seu trabalho e conseguem consultorias pagas. Sim, as pessoas pagam para você consertar um bug mais rápido ou adaptar seu software à realidade deles.
Como mencionado acima, se você pretende ganhar alguma coisa com este sistema, seja dinheiro, respeito ou reconhecimento no mercado, saiba desde o início e se planeje para isso. Se você tocar o projeto como uma empresa haja como uma empresa, seja profissional e tenha um plano de negócios.
Não sou especialista neste tema mas após participar de alguns projetos e conversar muito com pessoas que já participaram de muitos outros, cheguei a esta breve lista. Sinceramente: se você só puder seguir uma dica, siga a primeira. Não prive o mundo e você mesmo de algo legal que pode sair de um projeto livre com essa idéia maluca que você está na cabeça.