Fragmental

5/06/2005

Extreme Freelancer : Guia de Guerra para Freelancers

Esses dias tenho conversado via ICQ com um amigo sobre as desventuras dele enquanto freelancer. Tentei dar dicas que aprendi quando me embranhava por essas terras distantes...

Histórico
Eu programo desde muito novo. Não vou me alongar aqui, mas por alguns anos fui ganhando uma graninha dando consultoria básica em ASP, VisualBasic (argh!) e C em listas de discussão, coisa pouca que mal dava para eu comprar um livro de programação traduzido de 50 reais. Não demorou muito e passei a fazer programinhas como freelancer, como todo mundo do meio.

Cheguei a trabalhar "oficialmente" como freelancer por algum tempo, ganhando um salário razoável pela minha experiência formal, em casa, indo duas ou três vezes por semana ter reuniões no escritório do cliente. Esse projeto acabou afundando no meio do curso, e vou tentar explicar o porque e tentar aplicar o que eu já aprendi até hoje nestes problemas.

Organização do Ambiente
Você quer trabalhar de freelancer? Se organize. Não me importa se você é um moleque de quatorze anos que mal sabe fazer um loop (e devia estar estudando, não brincando de trabalhar!) ou um profissional tarimbado e conhecido que faz uns servicinhos de consultoria especializada: você precisa se organizar!

Para começar, onde você trabalha? Poucos freelas têm a disposição um escritório, a maioria trabalha mesmo é no quarto, de madrugada. Se você trabalha nas suas horas de folga, estipule o tempo de trabalho, seja disciplinado com seus horários. Defina as horas por dia que você irá trabalhar normalmente (ocasionalmente você vai ter que fazer "hora-extra", claro), essas horas vão ser úteis também quando você calcular o preço dos seus serviços e suas entregas.

O ambiente de trabalho deve ser organizado. Não é sua casa, é seu trabalho! Claro que você tem muito mais liberdade que num escritório formal, mas não deixe essa informalidade te distrair. A melhor coisa a fazer é providenciar uma porta com tranca para o lugar onde seu computador fica (se você não morar sozinho, claro). Este lugar deve ser silencioso, se você (como eu) mora num lugar onde parece que os carros passam dentro do quarto, arrume uns fones de ouvido e coloque uma música para ouvir (se você não gosta de trabalhar com música é complicado, mas neste caso tente música instrumental - clássica é legal -, geralmente funciona e não te distrai).

Desligue ou coloque em estado Away ou N/A todos os seus Instant Messengers. Se você possui um sócio ou outra pessoa que pode precisar falar com você imediatamente, configure isso (IMs de verdade como o ICQ te deixam fazer isso fácil fácil...), mas desative qualquer alerta que possa te incomodar. Preferencialmente, não use seu e-mail pessoal para assuntos relacionados ao trabalho extra, crie um e-mail próprio e deixe seu e-mail pessoal (cliente de e-mail ou Gmail notifier da vida) desativado. Geralmente o freelancer tem pouquíssimo tempo para trabalhar, este tempo deve ser aproveitado o máximo possível. Bloglines (ou outro agregador RSS/derivados) e fóruns então, nem pensar!

Metodologia de Trabalho
Em empresas (ou em qualquer lugar com mais de uma pessoa trabalhando, às vezes mesmo om uma pessoa só...), você geralmente vai ser obrigado a usar uma metodologia X, com processos definidos por outra pessoa. Muitas empresas pequenas definem apenas um conjunto de procedimentos padrão, mas mesmo assim a liberdade não costuma ser muito alta, mesmo poruqe você está numa equipe.

O fato é que se você está sozinho, não existe ninguém nem para te impôr nada nem para te ajudar a decidir o que fazer e quando. Você vai ter que se virar para desenvolver um conjunto de processos e práticas e aplicá-las.

Quando você não é freelancer profissional, quando geralmente só pega um servicinho aqui e outro ali, você costuma tratar cada projeto de modo diferente. Mesmo nesse caso, um mínimo de organização é esperado. Mesmo que você não tenha uma metodologia de trabalho definida, você deve parecer que tem uma se quiser manter clientes sérios e que acreditem no seu trabalho.

Use sempre boas ferramentas. Sim, eu sei que isso serve para qualquer tipo de trabalho, mas para o freelancer é fundamental você:

  1. Ser Rápido
  2. Ser Produtivo
  3. Ter Qualidade
Ser rápido porque o cliente está em contato direto (veja abaixo) e ele vai te pedir muitas coisas. Se você for rápido o suficiente pode criar protótipos que acabam te dando mais confiança que o sistema atende ao usuário, e pode ainda criar protótipos que resutlem no fechamento de novos negócios, novas funcionalidades... sempre é bom mostrar algo para o cliente em vez de ficar só conversando eternamente sobre o que poderia ser feito.

Ser produtivo é crucial para quem trabalha no tempo vago. Você não pode gastar muito tempo para desenvolver um módulo, você tem poucas horas por dia e elas devem ser bem aproveitadas, com o que interessa. Minha dica aqui é o contrário do normal: fuja de ferramentas RAD de ponta a ponta, use apenas RAD para partes repetitivas do seu sistema, como layout de telas, relatórios e bases de dados. O que você precisa fazer para ser produtivo é ter conhecimento do seu código como um todo e manter ele sempre limpinho, refatorando sempre. Assim, você consegue mudanças rápidas, ao invés de ter que contar com wizards bizarros e GUIs que não te dão controle nenhum.

Qualidade é fundamental para o freelancer, afinal quem vai manter esse código é você! O cliente não quer saber quantos arquivos você vai alterar, ele quer que você implemente a funcionalidade rápido, e num projeto desses funcionalidades mudam a todo instante. Faça tudo pensando que você vai ter que corrigir bugs o tempo todo nesse código, às 3 da manhã, tendo que ir trabalhar em seu emprego formal no outro dia!

Use ferramentas normais de uma empresa, um controle de versões é fundamental mesmo quando se trabalha sozinho. Bugtracking também ajuda, mas sem exageiros (todos os bugs e tarefas vão estar assinalados para você no final).

Seja Compromissado
Meio desnecessário dizer, mas não é porque esse não é seu trabalho formal que você pode fazer um seviço qualquer. Um freelancer deve atender seu cliente exatamente como uma empresa normal, a informalidade da coisa tem que ser uma vantagem para ser mais ágil, não uma desculpa esfarrapada para atender mal.

Qualquer freelancer de verdade sabe que seu nome e reputação valem mais do que ele mesmo pode pagar. Combine coisas verbalmente, mas formalize pelo menos com um e-mail para não ficar no disse-me-disse e discutindo com o cliente coisas que possivelmente tenham sido ditas. Tenha certeza que vocês estão falando a mesma língua.

Se for atrasar, avise. Combine uma reunião periódica frequente para controle do cronograma, pode ser um telefonema, mas tenha um ponto de referência. Se você não pode fazer reuniões com o cliente no horário do expediente, deixe isso claro já no início do projeto e proponha uma alternativa, reuniões por telefone, logo após o expediente ou nos sábados, por exemplo.

Conheça seu Cliente
Como um profissional autônomo, você dificilmente vai pegar grandes projetos (quebrei suas ilusões?). Geralmente quem solicita serviços de freelancers são empresas de micro e pequeno porte que precisam de algo altamente customizado e não têm dinheiro para contratar uma das bigs (mas, na verdade, era isso que eles queriam fazer). Assim, você tem a grande oportunidade de conhecer todo funcionários da empresa cliente (sim, todos os 3 funcionários) , do dono do negócio à menina do caixa. Use isso.

Conhecer o dono do negócio é ótimo, você fica sabendo das espectativas, das necessidades e do que ele pretende fazer (é claro, tudo muito exagerado...), mas não se esqueça dos usuários (sim, todos os dois).

Certa vez trabalhei na migração de uma rede de nove computadores de Windows 98 para GNU/Linux. Tudo meticulosamente planejado, eu contratei um técnico especializado neste tipo de serviço, mas como todo bom moleque de dezenove anos (não que eu seja muito menos moleque aos 22), eu esqueci que quem ia usar o sistema não era a pessoa que eu lidava, dono do negócio.

E lá fui eu para a primeira sessão de treinamento em OpenOffice.org, achando que estava tudo perfeito. Já tinha convertido todos os formulários-padrão para o novo sistema, instalado uma versão customizada e amigável de KDE...quando um dos funcionários me pergutna sobre os 30 e poucos macros que ele fizera no Excel para acelerar um processo interno qualquer. O diretor falou que esqueceu de me avisar, e ninguém além daquele carinha tida consciência que aqueles macros eram super importantes, só ele os utilizava! E lá vai o Phillip converter macros VBA para OO.org... mas eu não entendia as macros, elas eram relativas ao negócio, isso seria praticamente desenvovler um sistema (o que nãoe stava no contrato).

Ficou acertado que o funcionário usaria Excel num Windows XP até que conseguíssemos solucionar este problema...que não era o único. As pessoas da empresa trataram a migração como uma coisa imposta e não-desejada (Afinal, para eles era apenas a empresa economizando em licenças). Considerando que a empresa ficava muito longe da minha casa, acho que se ônibus tivesse programa de milhagem eu poderia viajar paraa Europa de graça de tantas vezes que tive que ir resolver problemas. E não, não eram problemas grandes, eram coisas do tipo:

- Isso aqui (Mozilla) não funciona!
- Não? o que aconteceu?
- Eu tento entrar no site www.abcd.com.br e dá erro na conexão
- Uhm...peraí..esse aqui não é o cabo de rede da sua máquina?
- Não sei, é?
- Você arrancou?
- Ah, acho que esbarrei aí sim... mas deixa disso, esse tal Linux não funciona!
- Por acaso o Windows tinha Internet sem cabo de rede?!?

Evite boicote: aproveite o fato de você ter apenas meia dúzia de usuários e converse com todos eles, tente agradar a todos (mesmo sabendo que quem te paga é o dono do negócio apenas). Isso vai te economizar muita dor de cabeça.

Seja Ágil
Metodologias ágeis são complicadas de aplicar em empresas grandes, mas quando sua empresa é você apenas elas podem ajudar e muito.

Estude um pouco de XP. Você não precisa aplicar todas as práticas (algumas nem vai conseguir, como pair programming), mas se aproveite da situação para aplicar o máximo destes conceitos de agilidade e foco no cliente. Não vou explicar para você os conceitos aqui, procure um livro ou algo do tipo, mas algumas idéias básicas de como isso pode te ajudar seguem.

Pegue os requisitos diretamente com seu cliente. Não importa muito a técnica, mas eu sugiro que você dê uma olahda em User Stories. O importante é que você defina os requisitos com a maior participação do cliente possível.

Como freelancer, você tem que estar pronto para mudanças. O cliente vai mudar tudo toda hora, e como não tem muita burocracia, você tem que se preparar para isso (tirar proveito disso, até). Faça um Plano de Releases pequenos, vá acrescentando funcionalidades ao sistema de pouco em pouco, a cada release. Conforme vai vendo o sistema, o cliente vai mudando (calma, não ache que vai trabalhar de graça, leia abaixo sobre contratos, isso pode ser é muito bom financeiramente) e você vai repriorizando suas entregas.

Tenha seu cliente sempre à mão, celular dele colado com post-it no monitor.

Tenha um Advogado
Isso é sério. Você não precisa ter um advogado contratado, mas tenha pelo menos uma boa indicação de um. Se for amigo ou parente seu melhor, o explore e use para revisar e redigir contratos (pagando apenas uns chopps).

O Luca, amigo de GUJ, me falou uma coisa sobre profilers que se aplica a advogados também:
Você nunca aprende a usar um profiler antes de precisar usar um profiler, mas geralmente quando você for precisar, não vai ter tempo para aprender nada, tem é que consertar os problemas rápido!
Então já tenha pelo menos o telefone de alguém que vai poder te ajudar se as coisas derem muito erradas.

Contratos Abertos
Isso parece meio louco, mas funciona muito bem, principalmente nesse caso.

Para cada módulo de seu sistema, defina um valor em horas (ou defina pontos, é mais XP). Defina um valor por ponto e se comprometa a entregar X pontos por mês, cobrando o equivalente.

Quando você entrega um módulo, o cliente pode querer alterar algo (ele vai querer!), avalie a alteração em pontos, repriorize suas entregas pro próximo mês (ou semana, ou duas semanas...).

Então, crie seu contrato de maneira que o escopo seja aberto. O cliente estaria pagando R$Y por X pontos por mês. Não se iluda em terminar o projeto, um projeto de software só acaba quando o programa é deletado dos computadores definitivamente e sai de uso.

Conclusão e História Triste
Bom, se eu tivesse seguido algumas dessa dicas eu não teria passado por uma situação muito infeliz há alguns anos.

Eu trabalhava então full-time para uma empresa desenvolvendo um sistema de laudos. A idéia era simpels: cinco módulos, pagamento por mês.

Os módulos eram:

  • Gerência de Estoque
  • Gerência de Laudos
  • Gerência de usuários
  • Agenda Coorporativa
  • Geração de um Laudo Especial
Baseado na dificuldade que eu via nas coisas, eu defini a entrega na ordem:
  1. Gerência de usuários
  2. Gerência de Estoque
  3. Agenda Coorporativa
  4. Geração de um Laudo Especial
  5. Gerência de Laudos
O gerenciador de laudos tinha umas customizações muito complicadas...

Começaram as complicações no desenvolver do projeto, no início eu tinha muito tempo para isso, mas depois arrumei um emprego formal, isso acabou com meu tempo (some, é claro, a faculdade). Simplesmente não conseguia arrumar tempo para trabalhar, quando chegava em casa, as 23 horas, dormia. Fins de Semana eu tentava, mas sempre tinha alguém para me encher o saco (ou arrumar um lugar pra sair e não trabalhar...).

Em paralelo, começou uma dificuldade tecnológica. A idéia inicial era desenvovler em Delphi (ugh!), mas o ambiente passou para GNU/Linux e eu tentei o Kylix. Depois de muito tempo xingando o bichinho (injustamente), passei para Java, e tive que me virar para aprender a programar com um JBuilder 5.

O usuário passou a me ligar diariamente cobrando a entrega. Eu propus mostrar uma apresentação sobre o sistema e fiz um bando de telas em um editor GTK WYSIWYG, colei num powerpoint. Foi bom em parte para solucionar algumas duvidas com a interface, mas o cliente reclamou, ele queria ver algo funcionando, mesmo que um protótipo.

Bem, enfim primeira iteração: entreguei o gerenciador de usuários. Enquanto o usuário descobria bugs no sistema, eu tentava preparar o outro módulo. Enquanto isso ele me pedia para ver como estavam os módulos, eu desconversava.

Quando entreguei os 3 primeiros módulos, atrasados claro, o cliente começou a reclamar que estava gastando rios de dinheiro e não via retorno.

- É...a gente paga, paga..e nada... temos que ver isso, heim..
- Como assim? Eu já entreguei três módulos!
- Que não fazem nada de útil pra minha empresa. Na verdade, eu tinha pedido esses módulos como complemento, se eles não funcionarem eu não vou ligar muito.
- Hum...é verdade, mas pelo manos temos alguma coisa...
- Que não me serve para nada.

Pois é. Eu fiz minha agenda de entregas baseado no que era bom para mim, não pro cliente.

No final das contas, o módulo de laudos atrasou mais três meses. Eu já não tinha tempo nem de respirar, tinha que faltar ao trabalho constantemente para tentar trabalhar em casa, mas mesmo assim não adiantava. Ocasionalmente meu computador tinha algum problema e eu perdia um ou dois dias de trabalho.

O final da triste história foi a contratação de uma empresa externa para fazer auditoria. Os caras viram que muita cosia havia sido entregue, e como eles foram tão técnicos quanto eu, acharam normais os atrasos. Acabou com o cliente cancelando o cotnrato e ficando com três módulos que não faziam nada de útil, além do prejuízo de um ano de desenvolvimento mais um mês de auditoria que não deram em nada.

Imaturidade minha, falta de preparação. A minha sorte é que eu tinha meu emprego formal, porque meu moral ficou muito baixo, sem falar no meu bolso vazio. Depois deste, eu já peguei diversos outros projetos como freelancer e acabei descobrindo práticas melhores para resolver o problema ue eu tinha. Elas funcionam comigo, acredito que outras pessoas possam se beneficiar também.

Hoje em dia dificilmente pego um freela, falta de tempo e de paciência não deixam, mas da minha experiência não tão grande, não tão pequena, tirei essas dicas que espero que ajudem.

Update:
Renato Santos da Silva, o meu amigo citado no início do post, está escrevendo (trabalho em andamento!) uma versão compilada e com acréscimos dele aqui. Ele também deu o nome de Extreme Freelancer :)


 
f