Oh garoto, é muito se você realmente quis dizer que tudo aconteceu com você!
AVISO : Em muitos dos pontos abaixo, você pode sentir que eu o critico e que quero torná-lo responsável pelos erros e não considerar fatores externos. Eu não. Só que você não fornece muitos detalhes, e apenas forneço listas de verificação de ações a serem tomadas para garantir que as coisas não corram mal. Sei que cometi muitos erros (todo mundo comete) e só melhoramos se aprendermos com eles. E para aprender com eles, precisamos começar a vê-los como erros em primeiro lugar, e aceitar a responsabilidade pelo que deu errado de nossa parte. Inferno, aceite a responsabilidade pelo que deu errado nas partes de outras pessoas, você pode aprender com isso também.
Seu projeto falhou
Não há muito que você possa fazer para mitigá-lo agora.
No entanto, você pode fazer muito para evitar que seja reproduzido no futuro. Sugiro tentar melhorar suas habilidades de gerenciamento de projetos e tempo.
Um dos livros com a melhor proporção ((conselhos válidos) / páginas) que li sobre o assunto, embora talvez não seja o melhor, é o Radical Project Management de Rob Thomsett .
Você realmente não especifica o que seu projeto falhou, mas eu presumiria uma combinação de coisas que trouxeram desequilíbrio no triângulo habitual de custo / tempo / qualidade . O fator mais importante aos meus olhos é liderar o projeto e o desenvolvimento e estar sempre em contato com seus atores técnicos (desenvolvedores e testadores), mas também com seus stakeholders. Muitos projetos falham porque não ouvem patrocinadores ou partes interessadas e não os pressionam a se envolver no processo.
Se eles não estiverem envolvidos, você não poderá saber o que eles querem. Se você não pode saber o que eles querem, você não pode entregá-lo. Se você não entregá-lo, eles serão infelizes. Isso é um fracasso. Além disso, se você não envolver seus stakeholders, eles serão desconectados da realidade da engenharia de software, o que significa que eles não entenderão seus problemas. Se eles frequentemente estão em contato com você, eles conseguem entender melhor o que você precisa lidar. Eles serão mais capazes de entender quando você lhes disser que um recurso "pequeno" [risos] levará meses. Eles podem confiar melhor no seu planejamento porque ajudaram a construí-lo. Um projeto não pode ter sucesso apenas com "especificações no início, desenvolvimento, teste, entrega no final". Isso nunca acontece. Você pode entregar o que foi solicitado nas especificações,
E o mais importante, faça uma retrospectiva e garanta que ela seja menos egoísta e não um jogo de culpa. Apenas identifique problemas.
O que você passou dias codificando foi rejeitado por sua equipe
Eu estive nessa situação. Novamente, você não pode fazer muito para mitigar isso, exceto:
- Mantenha-o no SCM para mais tarde.
- Talvez tente inserir pequenos pedaços progressivamente na principal base de códigos, em vez de uma grande refatoração.
Mas há outras coisas que você pode fazer para evitar esse tipo de situação:
- Por que isso aconteceu? Qual o motivo da rejeição?
- Na maioria das vezes, quando vejo isso acontecer (e esse também foi o meu caso), significa que o desenvolvedor ficou sozinho ou no modo de codificação cow-boy e produziu coisas que nunca foram solicitadas. O código que não vem dos requisitos de negócios pode ser sofisticado e "melhor", mas geralmente é um desperdício de tempo e dinheiro. Além disso, custará ainda mais se você integrá-lo, pois precisará testar novamente. Pense como as pessoas que negociam o dinheiro: você também precisa ser eficiente nesse nível.
- A qualidade do software produzido foi satisfatória? Cumpriu os padrões e convenções em atividade na sua empresa?
- Você se reportou periodicamente (e freqüentemente!) Aos diretores sobre isso? Você trocou ocasionalmente com outros desenvolvedores da equipe? Caso contrário, eles não sabem nada sobre isso, será um custo de tempo enorme para eles avaliarem e revisarem agora. NÃO conta ao mesmo tempo no final. É como sempre tentar adiar a limpeza do seu apartamento alugado e depois limpá-lo somente quando você sai: é um trabalho ruim, cansativo, mais difícil do que teria sido se fosse feito regularmente, e muitas vezes não é feito direito.
- Você produziu testes de produção? Testes de unidades? Testes de integração?
- Seu código foi verificado regularmente no SCM? Foi em um ramo diferente? Precisava de um ramo diferente ou poderia ter sido feito no porta-malas? Adiar o código de confirmação geralmente é um mau sinal. Obviamente, às vezes você é tentado a fazê-lo, mas apenas se atira no pé.
Ninguém ouve suas idéias em sua empresa
Bem, existem 2 opções aqui, e veremos as duas:
- Suas idéias eram ruins.
- Suas idéias eram boas.
Vamos começar a supor que eles eram ruins (mais uma vez, refletir sobre isso e aceitar sua ideia era simplesmente ruim, pode ser difícil, eu sei). O que você faz para mudar isso?
- Por que você teve a ideia? Qual é a lógica ? Existe uma necessidade real do que sua idéia tenta trazer para a mesa?
- Como você teve esta ideia? Você fez isso sozinho? Você compartilhou? Chuva de ideias? Plano? Protótipo? (faça isso na ordem certa. Se falhar no caminho, descarte a ideia, não continue. Ou, pelo menos, não no seu horário de trabalho.)
Ideias são apenas idéias. Se você apenas as sugere como idéias e elas são rejeitadas, não vejo por que você se sentiria mal por isso. Se, no entanto, você agir de acordo com eles sem notificar ninguém e ENTÃO apenas enviar suas idéias e elas forem rejeitadas, obviamente eu sinto a frustração perdida no momento. E seus gerentes fazem para!
Supondo que suas idéias fossem boas:
- Sua apresentação foi boa?
- A sua maneira de fazer a apresentação foi boa? (Sou desenvolvedor, sei do que estou falando: somos PITAs mal-humorados, arrogantes e pedantes , que estão sempre certos e com quem é difícil trabalhar por causa de nossos egos desproporcionais ).
- Você tem um plano para implementá-lo? Você pensou no custo e no tempo? Você pensou como isso beneficia usuários / clientes? Você pensou em como isso afeta as vendas? Você achou que o trabalho com essa ideia poderia impactar outros projetos e prioridades? Você vai me dizer: "por que devo fazer tudo isso, é o trabalho do meu gerente e das equipes de marketing ou vendas ?!" Exceto agora, você está tentando fazer parte de todos os trabalhos deles.
O padrão de design que você introduziu com força em sua equipe criou uma bagunça
- Por que você introduziu o padrão?
- Se ele criou uma bagunça, provavelmente:
- não era o padrão certo,
- não foi implementado corretamente,
- não foi integrado corretamente.
- Como você o apresentou? Como exatamente você define o estado "bagunça"?
- código menos legível?
- menos sustentável?
- compilações estão quebradas?
- Existem diferentes tipos de "bagunça". Saber o que a bagunça é pode ajudar a saber o que o fracasso em que havia, e se era culpa do padrão de design.
Além disso, estou um pouco surpreso com a abordagem em si. Você realmente precisou pressionar para que um padrão de design fosse introduzido? Isso parece bastante estranho. Um padrão já está lá ou é necessário refatorar uma parte da sua solução de acordo com o padrão. Você não pressiona como adotaria uma estrutura ou tecnologia (como as pessoas pressionam muito para ter XML em todos os lugares, e agora como as pessoas começam a pressionar para poder escrever HTML5 na capa do produto em letras grandes e brilhantes).
Por que você teve que empurrar? Por que houve resistência? Talvez tenha sido justificado.
Você conseguiu fornecer exemplos de que esse padrão específico ajudaria a melhorar sua base de código de maneiras significativas (por exemplo, combinando-o com um exemplo de Refatoração para Padrões ).
Observação completamente fora do tópico, mas foi nisso que pensei pela primeira vez quando li o título da pergunta, pois considerava que ela se referia a falhas de software ... Eu tinha um software que implementou uma classe BlackHole para gerenciar um tipo muito especial de exceções em uma das componentes. Pode parecer (e realmente é) um hack obviamente estranho e sujo, mas o nome em si era tão excelente que todos nós apreciamos por uma maneira bastante legal de lidar com uma falha! :)