Como desenvolvedor de software, sua principal tarefa é melhorar processos. Eu tinha um professor de análise de sistemas que dizia que programar é a menor parte do trabalho de quem desenvolve software. A principal função do analista é entender os processos de negócios do cliente e otimizá-los. Geralmente, para melhorar a maioria dos processos, livramos o cliente do papel e tornamos o workflow digital. Mas adianta pouco tomar um processo ruim no papel e torná-lo digital, sem antes melhorar o próprio processo.
E como é o nosso próprio método de desenvolvimento de software? Será que nos preocupamos em otimizar os processos envolvidos na venda, desenvolvimento, entrega e acompanhamento de nossos produtos de software, afim de nos tornar mais eficientes e lucrativos? Será que, se você vende soluções de e-commerce para seu cliente, não é uma demonstração de falta de fé em seus próprios produtos cobrar os clientes através de um telefonema pedindo um depósito em conta corrente, ou enviando um officeboy para buscar o cheque? Se o seu produto é tão eficiente em tornar seus clientes mais lucrativos, não seria sensato cobrar seu cliente com um boleto online gerado nele?
Desde o primeiro contato com o cliente até o pós-venda há muito que a Tecnologia de Informação pode fazer por sua empresa antes que você tente vender as mesmas soluções para seus clientes. Quero me concentrar agora especificamente em desenvolvimento de software e em que ferramentas são necessárias para entregar software melhor e mais rápido.
MÉTODO É a sua primeira e mais importante ferramenta. Ela é que vai ditar a aquisição das outras e vai pautar todo o seu processo de desenvolvimento. É o que vai manter a sua equipe trabalhando em conjunto e falando a mesma língua. Os mais usados são os métodos extremamente formais, como o RUP e o antigo hacking em que toda a informação é passada verbalmente do gerente para um programador talentoso que vai fazer tudo sozinho, mas o mercado está dando um bocado de atenção agora aos métodos chamados ágeis, como o eXtremme Programming. A escolha do método de trabalho e a adaptação à sua realidade vão moldar a equipe e definir como serão os produtos.
LINGUAGEM / AMBIENTE Não despreze esta escolha. É certo que bons programadores produzem bons códigos independendo da linguagem, e que uma boa linguagem não faz um programador ruim escrever bons programas. Mas a escolha da linguagem de programação e do ambiente de desenvolvimento vai impactar diretamente no tipo de programador que você poderá contratar. Ou seja, de certa forma, a escolha da linguagem vai influenciar em quem será sua equipe. Além disso, essa escolha deve ser pautada pelo seu negócio. Que tipo de software você desenvolve? São aplicações stand-alone, client-server ou web? Precisam ser multiplataforma? Que quantidade de processamento estará envolvida? (Você provavelmente não vai desenvolver um ERP web-based no mesmo ambiente em que faria um editor de imagens, não é?) Que tipo de portabilidade é necessária ou desejável?
FERRAMENTA DE PROJETO Seus gerentes precisam estar munidos de informação. Informação útil é atual e precisa. Eles precisam saber a qualquer momento quem na equipe está fazendo o que, que tarefas já foram cumpridas, quais ainda estão pendentes, quem está sobrecarregado e quem tem tempo disponível, quem é mais habilidoso e mais produtivo, quanto tempo e dinheiro já foi gasto e quanto ainda falta. Cada membro da equipe precisa saber exatamente o que se espera dele, que tarefas tem de desempenhar - em detalhes - e quando. É preciso que todos saibam imediatamente qual a origem de um problema ou por que ocorreu qualquer atraso. É claro, não há uma ferramenta que pense pelo gerente. O sucesso dessa área vai depender da competência dos seus gerentes. Mas há ferramentas que o ajudam a ter controle disso. A mais conhecida é o Microsoft Project, mas há uma série de outras, algumas open source, algumas com interface web (o que pode ser muito útil se o gerente está muito em trânsito, por exemplo.)
GROUPWARE Você sabe, as pessoas precisam se comunicar. Tem que ser fácil compartilhar arquivos e enviar mensagens (de preferência instantâneas.) Mas também precisa ser fácil telefonar para os colegas de equipe, ir até a mesa deles ou conseguir um local para uma reunião de emergência.
IDE / EDITOR / COMPILADOR / ETC Acredito que não preciso falar desse assunto. Você sabe como é isso não é? É de impacto nada desprezível a produtividade ganha com um bom editor de código e um bom IDE. Para determinadas tarefas, é impossível trabalhar sem um bom compilador e um bom debugger. Claro, essa escolha depende das anteriores. A variedade e qualidade das ferramentas disponíveis depende do tipo de software que você desenvolve, seu método de trabalho e a linguagem ou ambiente de programação que estiver usando. Para o que eu mais faço, desenvolvimento web, um bom editor de código é essencial. Para o nosso método de trabalho ele precisa abrir e salvar arquivos diretamente em servidores FTP, ter syntax highlight, seleção em bloco, indentação automática e substituir com expressões regulares, além de integração com ferramentas externas.
REUSO Não basta trabalhar com orientação a objeto em uma linguagem que promova o reuso de código. Se não houver nenhum esforço explícito neste sentido, sua equipe vai reescrever código inútil. Bons programadores reusam código desde os tempos da programação em linguagem de máquina, mantendo bibliotecas de código. Maus programadores conseguem reinventar a roda mesmo com a mais moderna ferramenta de desenvolvimento. É preciso que haja uma biblioteca de código compartilhado, com política definida de uso e manutenção. De nada adianta ter o código escrito para determinada rotina complexa se ele estiver perdido no meio do código de um programa grande e complexo. Se ninguém puder encontrar aquele código, as pessoas vão escrevê-lo novamente.
DOCUMENTAÇÃO Para começar, é preciso haver uma política definida em relação à documentação de código. É preciso que toda a equipe saiba que está faltando com seu dever quando escreve código não documentado. Em segundo lugar, é preciso saber que escrever documentação é muito chato. Forneça as melhores ferramentas existentes para esse trabalho. Ferramentas integradas à linguagem, como pydoc e javadoc são a melhor solução que eu já vi para documentar código. Para o restante da documentação, cuide de municiar sua equipe de métodos e ferramentas que otimizem e agilizem o processo.
CONTROLE DE VERSÃO Você sabe, CVS, SourceSafe ou algo parecido. Controle de versão dá à sua equipe a liberdade de errar. É muito mais fácil acertar quando você sabe que pode errar várias vezes para encontrar a melhor alternativa.
SERVIDOR Servidores de desenvolvimento devem ser separados dos de produção. Com hardware bom (lembre-se, o barato sai caro) e cuidado em manutenção, atualização e segurança semelhante ao que se tem nos de produção.
BACKUP Backup é seu amigo. Quem tem dois, tem um. Quem tem um, não tem nenhum. Estamos repetindo o mesmo velho mantra: "faça backup" há trinta anos, desde a época dos rolos de fitas DAT para backup de mainframes. Quando, afinal, vamos aprender?
CONTROLE DE BUGS E REQUISIÇÕES Controle de requisições no cliente de email é o caos. Bugs então, nem se fala. Não dependa da organização dos seus programadores com suas tarefas, consiga uma ferramenta que faça esse trabalho para eles. Seus clientes e testadores têm que poder adicionar bugs e requisições com facilidade. Seus gerentes precisam poder atribuir essas tarefas a alguém da equipe de modo fácil. Seus clientes e testadores precisam acompanhar o andamento da correção ou solicitação.
TALENTO Ah, claro. Esse é essencial, você sabe.
|