Como impedir um funcionário de manter a empresa refém?
Eu trabalho numa equipa que escreve software para facilitar uma das principais unidades de negócio da empresa. Juntei-me à equipa há alguns meses e descobri que existe um elevado volume de negócios na minha equipa devido a uma pessoa. Esta pessoa (chamemos-lhe Sr. A) está na empresa há 7 anos, é muito difícil trabalhar com ele e toma repetidamente más decisões de propósito para manter o produto de software instável, difícil de manter e resolver problemas. Desta forma, quando há um problema, só ele pode resolvê-lo.
Ele deixou a empresa há alguns anos porque a empresa não lhe permitiu trabalhar a partir de casa, mas assim que ele saiu, a empresa teve de o contratar de volta (e permitir-lhe trabalhar a 100% a partir de casa) porque o software tinha problemas e ninguém sabia como resolvê-los.
O meu gerente sabe disso, mas ele diz que não há nada que possa fazer em relação ao Sr. A.
O que posso fazer para resolver esta situação? Quero fazer com que o software seja moderno, manutenível e estável.
FYI, o software monitoriza os eventos, faz algum processamento sobre eles e depois toma as medidas apropriadas. O Sr. A tem:
- Puramente mantido afastado das estruturas modernas de desenvolvimento de software;
- Lógica escrita do core business em linguagens que não podem ser testadas;
- Re-arquitetou componentes de software em 30 módulos para adicionar complexidade e questões de certificação de versão, e;
- Desenhou-o de uma forma não escalável, assegurando que não há capacidades HA (alta disponibilidade).
Actualização:
No que diz respeito ao código não testado, a lógica de negócio está a ser movida de Java para scripts groovy incorporados em XML. Os testes unitários do código Java foram descartados.
Relativamente à modularidade/complexidade, cada módulo recebeu o seu próprio git repo e tem a sua própria versão. Agora só o Sr. A sabe que versões são compatíveis em conjunto. Não é possível lançar a versão 2.0 do produto e implementar todos os módulos 2.0. Tem de lançar o Módulo A 2.0, que irá funcionar com o Módulo B 1.0-2.0 e o Módulo C 1.0-1.5. Para mim, isso é mau design, deve ser tudo versionado sob uma versão como Spring framework (Spring 5.0 significa Spring-Core-5.0, Spring-Context-5.0, Spring-Web-5.0, Spring-Security-5.0, etc).
Manager diz que não pode fazer nada sobre isso porque o Sr. A foi solto no início, mas depois quando surgiram problemas ele teve que ser chamado de volta para corrigi-lo. Por isso o produto não pode ser mantido sem ele.
Eu vejo isto como um problema meu, uma vez que não quero abandonar o gerente, pois ele tem sido muito simpático comigo. E o meu primeiro instinto é resolver um problema, não abandoná-lo, embora consiga ver como seria realmente fácil abandonar isto, e parte de mim está tentada a fazê-lo.
Outros abandonaram a equipa por causa dele, porque ao almoço ele é aquilo de que todos se queixam. Sempre que há uma reunião com o Sr. A, as pessoas saem dela a abanar a cabeça (durante horas).
2nd Update:
HA é a abreviatura de High-Availability. Na Arquitectura de Software isto significa desenvolver o seu software de forma a que possa ser alojado/empregado em ambiente de produção de forma redundante, de modo a que se uma instância do mesmo cair, a(s) outra(s) instância(s) possa(m) suportar a carga resultando em tempo de paragem zero. O utilizador final nem saberia que algo correu mal.
Em relação a: Isto parece ser uma grande base de código normal. Eu não acho que isto se deva a uma grande base de código, pois o produto não é tão rico em funcionalidades. É um sistema backend que crunça dados. Outras empresas têm produtos semelhantes para satisfazer as suas necessidades comerciais, são capazes de o fazer utilizando opções HA/Scalable modernas, por isso não percebo porque é que esta equipa precisa de o fazer em Java 6 sem HA/Scalability.
3ª Actualização:
Relativamente a ‘As últimas versões de todos os módulos funcionam em conjunto? Não necessariamente. Ele tem andado a recuar certos módulos em produção se houver um bug identificado, mas o recuo tem introduzido mais bugs uma vez que certas versões de módulos não são compatíveis. Tudo isto poderia ser evitado se todos os módulos fossem versionados e lançados em conjunto, porque assim todo o produto seria testado e como um todo garantiria uma certa funcionalidade. Noutras empresas/projectos em que trabalhei, foi assim que conseguiram desenvolver e implementar projectos muito mais complexos com facilidade.
@pipe: Eu não estou acabado de sair da escola. Trabalhei em várias empresas e em grandes projectos durante os últimos 10+ anos e tudo o que vejo o Sr. Uma proposta vai contra a convenção e o senso comum. Os 30 módulos (em repositórios separados) foi como ele tinha originalmente criado a árvore de origem. Um desenvolvedor inteligente que esteve na equipe por 1 ano, viu as questões de compatibilidade e pressionou para combinar tudo em um único repositório, fazendo um projeto multi-módulo maven. Aquele programador cansou-se da natureza do Sr. A e encontrou um emprego numa das 5 maiores empresas de TI. Não vou nomear a empresa para manter o anonimato, mas por empresas de TI de topo refiro-me à Microsoft, Google, Apple, Facebook, e Amazon. Então isto O promotor não era burro nem incompetente. Ele tinha 8 anos ou experiência. O Sr. A reverteu essa mudança de volta à forma como era, 30 módulos em repos separados. Portanto, estes 30 módulos não foram adicionados para lidar com a complexidade de uma grande base de códigos. Eles foram criados para garantir que existem problemas de compatibilidade em produção. Complexidade desnecessária.
Mais sobre “Porque é este o seu problema”: Quando falo com desenvolvedores que trabalham (ou têm amigos que trabalham) na Microsoft, Google, Amazon, Facebook, Apple; dizem-me que muitas vezes se encontram pessoas que são difíceis de trabalhar. Vejo esta situação como um desafio que irei enfrentar repetidamente onde quer que trabalhe, por muito fantástica que seja a empresa. Por isso, preciso de saber como lidar correctamente com isto para continuar a crescer no meu campo.
Objectivo (por manter esta pergunta no tópico):
Faço esta pergunta para saber qual é a melhor forma de lidar com situações como a descrita acima para atingir os objectivos delineados abaixo. Acredito que os colegas de trabalho difíceis são impossíveis de evitar, por isso talvez possamos todos aprender alguma coisa com base na experiência dos outros.
Melhorar a estabilidade do produto minimizando o código do esparguete e a complexidade desnecessária, conforme pedido da gerência.
Torná-lo HA conforme pedido da gerência.
Utilizar frameworks modernos e especificações de linguagem (Java 6 vs Java 8) para que os novos programadores sejam fáceis de encontrar no mercado e possam ser produtivos mais rapidamente.
Eliminar a dependência de uma única pessoa.