Come posso trattare con i manager che rifiutano di accettare l'uso di modelli di progettazione comuni di ingegneria del software?
Premessa
Sono un ingegnere del software e un TDD praticante nella mia azienda. Il mio manager è anche responsabile della codifica (se necessario) e della gestione dei suoi subordinati ingegneri.
Ho avuto alcuni accesi dibattiti con il mio manager riguardo all'uso di modelli di progettazione software di recente.
Il problema
Spesso quando sono incaricato di implementare una caratteristica e un codice, vengo sfidato dal mio manager durante le revisioni del codice per l'uso di modelli di progettazione software comuni. Pensa che non sia necessario e che si dovrebbe codificare il codice nel modo più “semplice” possibile. Metto le virgolette in chiaro, perché sembra che non siamo d'accordo su quale dovrebbe essere lo scopo di una “caratteristica”. In molti casi, la caratteristica non è così “semplice” come pensa il mio manager e richiede l'uso di modelli di progettazione per separare le responsabilità e ridurre al minimo l'impatto sulla base di codice (per lo più non testata).
Ci sono due casi di uso comune che applicherò i modelli di progettazione per risolvere un problema:
Implementazione di nuove caratteristiche che richiedono modifiche a una classe non verificabile, legacy
Affrontare le incertezze interfacciando le incognite
Siamo entrati in alcuni argomenti a causa di riunioni di progettazione simili. In un'accesa discussione mi è stato addirittura detto che “[egli] programma da più di 20 anni!”, il che implica che non dovrei nemmeno osare mettere in discussione la sua autorità.
Ciò che ho cercato di mitigare questo problema
- Commenti dettagliati scritti su alcuni componenti non tanto ovvi perché ne avevo bisogno e a che scopo servono
- Ho dimostrato passivamente che il mio progetto è molto più adattabile alle modifiche
- Un componente che ho costruito ha un numero di bug significativamente più basso rispetto alla maggior parte degli altri componenti
- Ho correttamente anticipato un cambiamento nei requisiti, che ha portato al minimo cambiamento di codice necessario per soddisfare tale requisito
- Ha affrontato le sue preoccupazioni in anticipo quando sono stato sfidato spiegando il mio processo di pensiero e di ragionamento
- Tuttavia, sono ancora rimproverato per l'eccesso di ingegneria del codice.
- Ne ho discusso informalmente con i miei colleghi e ho chiesto la loro opinione in privato
- La maggior parte di loro apprezza il mio approccio ben ragionato e uno ha anche detto di aver imparato molto da me. La maggior parte degli ingegneri ama discutere i loro problemi di codifica con me, perché di solito posso dare loro consigli utili o far notare qualcosa che potrebbe essergli sfuggito
- Tenendo presentazioni informali per educare i miei colleghi ingegneri (e manager) sul perché applico un modello di progettazione qua e là
Non voglio sembrare arrogante dicendo che le mie capacità di codifica sono assolutamente migliori di quelle del mio manager, ma ho davvero esaurito le idee per convincerlo, anche dopo le dimostrazioni, le spiegazioni, e i risultati oggettivi che gli vengono mostrati. Da un lato, vorrei fornire codice privo di bug, ben collaudato e progettato. Dall'altro lato, continuo a essere criticato perché il mio progetto non mi fa sentire bene e ha certamente “complicato” il mio codice forzandolo al modo “approvato”.
Come possiamo trovare una via di mezzo?
Update
Dal momento che sto ricevendo molti commenti che parlano della mia attitudine dogmatica, anche troppo zelante, a seguire i principi dell'ingegneria del software, penso che dovrei chiarire:
Non sto cercando di essere dogmatico né troppo zelante. Mi interessa che le persone leggano e capiscano il mio codice, che usino o meno i modelli di progettazione. Ho chiesto un feedback ai miei colleghi durante le revisioni del codice se capiscono o meno il mio codice. Hanno detto di sì e capiscono perché progetto un componente in questo modo. In un'occasione, il mio uso dei design pattern ha aiutato a centralizzare la logica di ricerca della configurazione in un'unica posizione rispetto ad averla diffusa in dozzine di posizioni, che deve essere cambiata spesso.
Ad essere onesti, sono abbastanza deluso di vedere così tante risposte con un forte stereotipo “Perché voi ingegneri non riuscite a pensare come i manager”. In fin dei conti, si può dire che ogni cosa sia un eccesso di ingegneria: Perché contrassegnare i campi come private
invece di esporre tutto, perché testare le unità se nessun utente eseguirà una sola unità, ecc.
La mia motivazione nell'uso del design pattern o in realtà di qualsiasi ingegneria del software è quella di minimizzare il rischio e dare valore all'azienda (per esempio riducendo la diffusione inutile della logica nella base di codice, in modo che possano essere gestiti in un unico luogo).
Scusate se questo suona come una farneticazione. Sto cercando risposte del tipo “come possiamo trovare una via di mezzo” invece di risposte condiscendenti come “gli ingegneri pensano di essere intelligenti applicando modelli di progettazione che nessuno capisce”.