Como posso lidar com gestores que se recusam a aceitar a utilização de padrões comuns de design de software?
Background
Background
Sou engenheiro de software e praticante TDD na minha empresa. O meu gestor é também responsável pela codificação (se necessário), e pela gestão dos seus subordinados de engenharia.
O problema
Frequentemente quando sou encarregado de implementar uma funcionalidade e código, sou desafiado pelo meu gestor durante revisões de código para a minha utilização de padrões comuns de design de software. Ele pensa que é desnecessário e que se deve codificar o mais “simples” possível. Faço citações simples, porque parecemos discordar do âmbito de uma “característica”. Em muitos casos, a funcionalidade não é tão “directa” como o meu gestor pensa e requer a utilização de padrões de design para separar responsabilidades e minimizar o impacto na base de códigos (na sua maioria não testados).
Há dois casos de utilização comum que vou aplicar padrões de design para resolver um problema:
Implementar novas funcionalidades que requerem alterações a uma classe
Enfrentar incertezas através da interface com as incógnitas
Nós entramos em alguns argumentos devido a reuniões de design semelhantes. Num argumento acalorado, foi-me dito até que “[ele] programou durante mais de 20 anos!”, implicando que eu nem me atreveria a questionar a sua autoridade.
O que tentei mitigar este problema
- Comentários escritos detalhados sobre alguns componentes não tão óbvios porque precisava deles e para que servem
- Demonstrei passivamente que o meu design é muito mais adaptável a alterações
- Um componente que construí tem uma contagem de bugs significativamente menor do que a maioria dos outros componentes
- Previ correctamente uma alteração nos requisitos, o que levou a uma alteração mínima do código necessária para cumprir esse requisito
- Respondi frontalmente às suas preocupações quando fui desafiado, explicando o meu processo de pensamento e raciocínio
- No entanto, continuo a ser repreendido por excesso de código de engenharia.
- Discuti informalmente esta questão com os meus colegas e pedi as suas opiniões em privado
- A maioria deles apreciou a minha abordagem bem fundamentada e um deles até mencionou que ele aprendeu muito comigo. A maioria dos engenheiros gosta de discutir comigo os seus problemas de codificação, porque normalmente posso dar-lhes conselhos úteis ou apontar algo que lhes possa ter escapado
- Realizar apresentações informais para educar os meus colegas engenheiros (e gestor) sobre o porquê de eu aplicar um padrão de design aqui e ali
Não quero parecer arrogante dizendo que a minha capacidade de codificação é absolutamente melhor do que a do meu gestor, mas fiquei sem ideias para o convencer, mesmo depois das demonstrações, das explicações e dos resultados objectivos que lhe estão a ser mostrados. Por um lado, gostaria de entregar um código sem bugs, bem testado por unidades e concebido. Por outro lado, continuo a ser criticado pelo meu design não se sente bem e certamente ‘complicou’ o meu código, forçando-o à ‘aprovação’.
Como podemos encontrar um meio-termo?
Actualização
Uma vez que estou a receber muitos comentários que mencionam a minha atitude dogmática, mesmo demasiado zelosa, de seguir princípios de engenharia de software, penso que devo esclarecer:
Não estou a tentar ser dogmático nem demasiado zeloso. Eu do preocupo-me com as pessoas que lêem e compreendem o meu código, quer usem/compreendam ou não os padrões de design. Pedi a opinião dos meus colegas durante as revisões de código, se eles compreendem ou não o meu código. Eles disseram que sim e que compreendem porque é que eu concebo um componente desta forma. Numa ocasião, o meu uso de padrões de design ajudou a centralizar a lógica de procura da configuração num único local versus tê-la espalhada por dezenas de locais, o que tem de ser alterado frequentemente.
Para ser honesto, estou bastante desapontado por ver tantas respostas com um forte estereótipo “Porque é que vocês engenheiros não conseguem pensar como gestores”. No fim de contas, tudo pode ser dito como sendo excesso de engenharia: Porquê marcar campos como private
em vez de expor tudo, porquê testar unidades se nenhum utilizador vai executar apenas uma única unidade, etc.
A minha motivação na utilização do padrão de design ou, de facto, de qualquer engenharia de software é minimizar o risco e valorizar a empresa (por exemplo, reduzindo a dispersão desnecessária de lógica na base de código, para que possam ser geridos num único local).
Desculpem se isto soa a uma reclamação. Estou à procura de respostas do tipo “como podemos encontrar um meio termo” em vez de algumas respostas condescendentes como “os engenheiros acham que são inteligentes ao aplicar padrões de design que ninguém entende”.