Esta não é uma resposta completa - já existem várias muito boas mencionando coisas importantes, como usar o VCS e o software de gerenciamento de projetos -, mas um adendo que acrescenta alguns pontos que eu não vi em nenhum outro, que eu acho que é muito útil, e espero que outras pessoas também achem útil.
1. Nenhuma tarefa é muito cedo ou muito pequena para ser anotada
As pessoas costumam fazer listas de tarefas para as coisas que planejam fazer no futuro , mas como a programação exige concentração e como podemos ser interrompidos a qualquer momento , achei útil anotar até o que estou fazendo agora, ou o que estou prestes a começar em questão de segundos . Você pode sentir que está na zona e não pode esquecer a solução que acabou de acertar naquele momento aha , mas quando seu colega de trabalho cai no seu cubo para mostrar uma foto do dedo infectado dele , e você está capaz de finalmente se livrar dele, começando a roer seu próprio braço , você pode desejar ter anotado uma nota rápida, mesmo que apenas em uma nota Post-It ™.
É claro que algum outro meio mais persistente pode ser melhor (gosto particularmente do OmniFocus ), mas a questão é pelo menos tê-lo em algum lugar , mesmo que você termine em 20 minutos e jogue o Post-It ™ fora. Embora você possa descobrir que essas informações se tornam úteis, colocar folhas de ponto ou faturas para o cliente ou quando seu chefe / cliente perguntar o que você está trabalhando e não se lembra. Se você soltar todas essas anotações em uma caixa, gaveta ou pasta, quando ocorrer uma grande interrupção - um projeto de interrupção -, será possível examiná-las e lembrar-se de muitas coisas que você fez para levar seu código ao ponto em que você encontre-o quando retornar ao projeto.
2. Use um quadro branco em sua mesa para capturar idéias gerais
Eu tenho um quadro branco de 3 "x 4" ao lado da minha mesa; portanto, quando inicio um projeto, posso pensar em soluções para todos os problemas que percebo em um projeto. Pode ser diagramas arquitetônicos, casos de uso, listas de riscos e obstáculos ou qualquer coisa que lhe pareça relevante.
Algumas abordagens mais formalizadas exigem que você gere diagramas e casos de uso e assim por diante como "entregáveis" em algum formato eletrônico ou em papel, mas acho que isso pode criar muito trabalho extra e se tornar uma série de subprojetos que terminam se divorciar do objetivo real do projeto principal e apenas parte de um processo formalizado que você precisa fazer, mas que ninguém presta muita atenção. Um quadro branco é a coisa mais simples que realmente funciona, pelo menos na minha experiência. É tão persistente quanto você deseja (com uma câmera) e, o mais importante, permite que você descubra suas idéias imediatamente.
Eu acho melhor com uma caneta na mão, então jogar meus pensamentos em uma superfície branca vem naturalmente para mim, mas se você não acha que esse é o seu caso, aqui estão algumas perguntas que podem ajudá-lo a decidir o que é relevante :
- Se eu fosse o desenvolvedor líder, prestes a ficar em lua de mel por 3 meses enquanto outros desenvolvedores concluíram o projeto, que direção geral eu gostaria de dar a eles? Que ideias eu gostaria de ter para garantir que eles soubessem ou quais abordagens eu gostaria de garantir que elas tivessem? De quais bibliotecas ou outras soluções úteis eu gostaria de ter certeza de que elas estavam cientes?
- Se esse projeto fosse minha ideia de um milhão de dólares, eu sabia que garantiria minha futura independência financeira, mas estava programado para uma cirurgia crítica que me incapacitaria por 3 meses, o que eu gostaria que meu futuro tivesse para garantir a conclusão bem-sucedida de o projeto?
(Quando escrevo as idéias pela primeira vez, só me preocupo com elas fazendo sentido para o meu eu atual. Depois que elas caem, posso olhar mais criticamente para elas e fazer alterações para garantir que elas façam sentido para o meu eu futuro ou para os outros. Preocupar-se demais sobre a comunicação com os outros à medida que você os escreve inicialmente pode levar ao bloqueio dos escritores - uma mente entupida por objetivos concorrentes.
Eu recomendo que você gaste o dinheiro para comprar um quadro branco decente, pelo menos 3 "x 4", e pendure-o no espaço em que você normalmente trabalha. Há muitas vantagens de um quadro branco físico sobre qualquer sistema virtual.
- E grande. Ao ocupar muito espaço, sua presença é sentida, e os planos nele parecem fazer parte do seu espaço de trabalho, ajudando a direcioná-lo na direção certa o tempo todo.
- Ele existe persistentemente: você não precisa iniciar um determinado aplicativo ou site para acessá-lo e não corre o risco de esquecer como chegar a ele ou esquecer que ele está lá.
- É imediatamente acessível quando você tem uma ideia que deseja pensar.
Você perde muitos dos benefícios se usar um quadro branco em uma sala de reunião e tirar uma foto com seu telefone. Se você ganha dinheiro com a programação, vale a pena o custo de um quadro branco decente.
Se um outro projeto interromper o que encheu o quadro branco, talvez seja necessário recorrer ao instantâneo do telefone, mas pelo menos você terá isso em três meses quando o projeto "urgente" for concluído e você precisará volte para o outro. Se você quiser recriá-lo em seu quadro branco, provavelmente levará apenas 15 minutos e poderá descobrir que pode melhorar bastante no processo, o que faz com que esse pequeno investimento de tempo valha a pena.
3. Informar as partes interessadas sobre o custo de interromper um projeto
Acho útil a metáfora de um avião: iniciar e concluir um projeto é como pilotar um avião. Se você sair no meio do voo, o avião não ficará parado no ar, esperando que você volte a ele, e você precisará de alguma maneira de viajar do projeto / vôo atual para o próximo. De fato, se você estiver no meio de um voo de Phoenix para Fargo e lhe disseram que precisa interromper o voo para pegar outro avião de Denver para Detroit, precisará pousar o primeiro avião em Denver (que felizmente, não está longe da sua trajetória de voo - nem sempre é o caso de interrupções reais) e alguém precisa descobrir o que fazer com a carga e os passageiros. Eles não vão apenas sentar e esperar para sempre.
O ponto disso para os projetos é que a transição de um projeto para outro implica uma grande despesa de tempo e deixa muitas perdas a serem resolvidas.
Em um projeto, há obviamente e inevitavelmente muita coisa em sua cabeça enquanto você trabalha, e nem todo pensamento pode ser serializado em um meio escrito, e nem todo tipo de pensamento que é serializado permanecerá quando desserializado. Embora possamos capturar parcialmente nossos pensamentos por escrito, é um formato com perdas.
O problema (a meu ver) é que os gerentes de projetos e outras pessoas de negócios pensam nos projetos como uma série de etapas que podem ser reordenadas com freqüência (a menos que exista uma dependência explícita no gráfico de Gantt) e podem ser facilmente distribuídas entre as pessoas ou atrasado até que seja mais conveniente para os negócios.
Qualquer pessoa que tenha feito alguma programação sabe que os projetos de software não podem ser tratados como blocos de Lego para serem movidos da maneira que você quiser. Acho que a metáfora das viagens aéreas, pelo menos, dá às partes interessadas algo concreto que elas podem pensar que claramente não pode ser tratado como uma série de etapas díspares a serem reordenadas por um capricho. Pelo menos, é fácil entender o seu argumento de que há um custo para essas interrupções. É claro que ainda é uma decisão deles, mas você deseja conscientizá-los antes que eles interrompam um projeto para dar outro. Não seja combativo, mas ofereça informações úteis e a perspectiva útil do desenvolvedor, pronto para fazer o que for necessário, mas apenas ofereça informações das quais eles talvez não saibam se você não lhes contar.
Em resumo:
- Anote tudo o que você está prestes a fazer, mesmo que não pense que possa precisar. Até um lápis curto bate uma longa memória.
- Faça um brainstorm do quadro geral em um quadro branco físico ao qual você tenha acesso persistente.
- Você pode evitar interrupções no projeto se conscientizar os tomadores de decisão de que há um custo para essas interrupções e, pelo menos, você definirá expectativas para que eles saibam que o projeto levará um pouco mais de tempo quando você o reiniciar.