usando controle de versão
O SVN é muito comum, mas o mercurial é mais bonito, poderoso e tem um sólido suporte de GUI.
desenvolvimento orientado a testes
bem, se você fizer testes de unidade, já estará do lado vencedor. para ferramentas, é uma questão de escolha. O teste deve ser o mais fácil possível, essa é a razão pela qual eu deixei o PHPUnit para o SimpleTest.
código de depuração
com testes de unidade, você dificilmente precisará do xdebug. Eu uso o xdebug normalmente apenas para criação de perfil. (consulte o KCachegrind)
uso de diagramas UML
o maior problema de tudo o que reflete a lógica do código é que é muito trabalho manual manter-se sincronizado. você pode automatizar algumas tarefas, mas não é tão útil, porque geralmente você deseja usar uml antes de ter qualquer coisa. o outro problema é que as ferramentas de diagrama são muito mais difíceis de usar do que caneta e papel ou um quadro branco. use uml se precisar comunicar um problema com vários desenvolvedores ou se precisar de uma abstração para si mesmo. ("dia" é uma boa ferramenta gratuita. também as ferramentas de mapeamento mental são muito úteis para o brainstorming, algumas podem realmente competir com papel e caneta.)
uso de OOP para código reutilizável e sustentável
bem, oop funciona até certo ponto. :) um bom conselho: composição> herança. A herança é uma ferramenta poderosa para reutilizar à primeira vista, mas a manutenção e o acoplamento frouxo sofrerão por isso. segundo bom conselho: manutenção> reutilização. um sistema abstrato pode ser muito poderoso, mas também difícil de manter.
uso de frameworks (como Zend Framework para php) para desenvolvimento rápido de aplicativos
O RAD é uma boa coisa para lançar seu aplicativo mais cedo. mas alguns componentes - especialmente o ORM - disparam nos pés, pelo menos no que diz respeito à escalabilidade. o principal problema aqui é que você vincula sua lógica de domínio ao trabalho com objetos, o que torna muito difícil determinar se você precisa de uma solução otimizada de banco de dados escalável pura. esteja ciente disso e incentive seus desenvolvedores a utilizar o banco de dados sem camadas de abstração de alto nível. abstração de banco de dados é um mito, orm é uma mentira.
BEIJO
os recém-chegados geralmente querem aplicar todas essas práticas recomendadas, configurar padrões de codificação, usar todas as cadeias de ferramentas legais, qualquer que seja. isso funciona para alguns desenvolvedores, mas alguns terão um bloqueio mental se as coisas forem muito rígidas. teste de unidade e scm é realmente um item obrigatório, mas alguém novo no teste de unidade realmente precisa aprender seu valor antes que ele o ame. não exagere, aplique práticas passo a passo e veja como funciona. O KISS também se resume ao código. Às vezes, a melhor maneira de resolver um problema difícil é resolvê-lo errado. você precisa de um algoritmo de seis graus de separação ? basta escolher alguns amigos aleatoriamente. você pode criar um aplicativo completo em torno dele, com lógica incorreta. se o cliente finalmente decidir abandoná-lo, todos economizarão muito dinheiro.
ágil
aprenda sobre metodologias ágeis, programação extrema, scrum, etc. existem muitos livros por aí. qualquer livro tornará sua equipe melhor, mas é melhor incluir todos os colegas de equipe.