Jak mogę sobie poradzić z menedżerami, którzy nie zgadzają się na korzystanie z powszechnych wzorców projektowania oprogramowania?
Tło
Jestem inżynierem oprogramowania i praktykiem TDD w mojej firmie. Mój menadżer jest również odpowiedzialny za kodowanie (w razie potrzeby) i zarządzanie podwładnymi swojego inżyniera.
Ostatnio wdałem się w kilka gorących dyskusji z moim menadżerem na temat wykorzystania wzorców projektowania oprogramowania.
Problem
Często, gdy mam za zadanie zaimplementować funkcję i kod, jestem wyzywany przez mojego menadżera podczas recenzji kodu za wykorzystanie wspólnych wzorców projektowania oprogramowania. Uważa on, że jest to niepotrzebne i należy kodować tak “prosto” jak to tylko możliwe. Cytuję wprost, ponieważ wydaje się, że nie zgadzamy się z tym, jaki powinien być zakres “funkcji”. W wielu przypadkach funkcja nie jest tak “prosta”, jak uważa mój menedżer i wymaga użycia wzorców projektowych, aby oddzielić obowiązki i zminimalizować wpływ na (przeważnie niesprawdzoną) bazę kodu.
Istnieją dwa powszechne przypadki użycia, w których zastosuję wzorce projektowe, aby rozwiązać problem:
Wdrażanie nowych funkcji, które wymagają zmian w niesprawdzonej, dotychczasowej klasie
Poradzenie sobie z niepewnością poprzez połączenie niewiadomych
Dostaliśmy kilka argumentów z powodu podobnych spotkań projektowych. W jednym z gorących argumentów powiedziano mi nawet, że “[on] programuje od ponad 20 lat!”, co oznacza, że nie powinienem nawet ośmielać się kwestionować jego autorytetu.
Co starałem się złagodzić ten problem
- Napisane szczegółowe komentarze na temat niektórych, nie tak oczywistych komponentów, dlaczego ich potrzebowałem i jakiemu celowi służą
- Biernie pokazałem, że mój projekt jest znacznie bardziej przystosowany do zmian
- Komponent, który zbudowałem ma znacznie mniejszą liczbę błędów niż większość innych komponentów
- Właściwie przewidziałem zmianę wymagań, co doprowadziło do minimalnej zmiany kodu niezbędnej do spełnienia tego wymogu
- Zgłosiłem swoje obawy z góry, kiedy jestem kwestionowany, wyjaśniając mój proces myślowy i rozumowanie
- Jednak nadal jestem nagradzany za nadmiar kodu.
- Nieformalnie omówił to z moimi kolegami i poprosił o ich opinie na osobności
- Większość z nich docenia moje dobrze uzasadnione podejście i jeden nawet wspomniał, że wiele się ode mnie nauczył. Większość inżynierów lubi rozmawiać ze mną o swoich problemach z kodowaniem, ponieważ zazwyczaj mogę udzielić im przydatnych rad lub wskazać coś, co mogło im umknąć
- Prowadzenie nieformalnych prezentacji w celu edukowania moich kolegów inżynierów (i menadżera) dlaczego stosuję wzór projektowy tu i ówdzie
Nie chcę zabrzmieć arogancko mówiąc, że moje umiejętności kodowania są absolutnie lepsze niż umiejętności mojego menadżera, ale naprawdę brakuje mi pomysłów, aby go przekonać, nawet po demonstracjach, wyjaśnieniach i obiektywnych rezultatach, które mu pokazano. Z jednej strony, chciałbym dostarczyć wolny od błędów, dobrze przetestowany i zaprojektowany kod. Z drugiej strony, ciągle jestem krytykowany za to, że mój projekt nie czuje się dobrze i z pewnością ‘skomplikował’ mój kod, zmuszając go do ‘zatwierdzenia’.
How can we find a middle ground?
- *
Update
Ponieważ otrzymuję wiele komentarzy wspominających o moim dogmatycznym, nawet nadgorliwym podejściu do przestrzegania zasad inżynierii oprogramowania, myślę, że powinienem wyjaśnić:
Nie staram się być dogmatyczny ani nadgorliwy. I do dbam o to, aby ludzie czytali i rozumieli mój kod, czy używają/zrozumieli wzorce projektowe, czy nie. Poprosiłem o informację zwrotną od moich kolegów podczas recenzji kodu, czy rozumieją mój kod, czy też nie. Powiedzieli, że rozumieją i rozumieją, dlaczego projektuję komponent w taki sposób. Pewnego razu, moje użycie wzorców projektowych pomogło scentralizować logikę wyszukiwania konfiguracji w jednej lokalizacji, a nie rozłożyć ją na tuziny lokalizacji, które muszą być często zmieniane.
Szczerze mówiąc, jestem dość rozczarowany widząc tak wiele odpowiedzi z silnym stereotypem “Dlaczego wy inżynierowie nie możecie myśleć jak menedżerowie”. W ostatecznym rozrachunku można powiedzieć, że każda rzecz jest przesadnie inżynierska: Dlaczego oznaczać pola jako private
zamiast eksponować wszystko, dlaczego test jednostkowy, jeśli żaden użytkownik nie ma zamiaru wykonać tylko jednej jednostki, itp.
Moją motywacją w używaniu wzorca projektowego lub w rzeczywistości jakiejkolwiek inżynierii oprogramowania jest minimalizowanie ryzyka i wypracowanie wartości dla firmy (na przykład poprzez ograniczenie niepotrzebnego rozprzestrzeniania się logiki w bazie kodu, tak aby można było nimi zarządzać w jednym miejscu).
Przepraszam, jeśli to brzmi jak rant. Szukam odpowiedzi w stylu “jak znaleźć środkowy grunt” zamiast protekcjonalnych odpowiedzi typu “inżynierowie myślą, że są inteligentni, stosując wzorce projektowe, których nikt nie rozumie”.