Hoe praat je met het management over 'geniale' code?
EDIT:
Bedankt iedereen voor het goede advies, commentaar en feedback.
Zoals blijkt, was niemand de ‘slechterik’ in deze situatie. Het advies dat ik hier kreeg, hielp me om weer in contact te komen met de vroegere leider van het project. Het blijkt dat mijn bedrijf, zonder duidelijke reden, een vroege “in ontwikkeling” versie van de codebase had ontvangen. Het oude bedrijf stuurde ons een productieklare versie en prees me, als kers op de taart, publiekelijk voor het effectief reverse-engineeren van een onvolledig product tot de diepte die ik had.
TL;DR
Ik heb een project geërfd. Lang verhaal kort, de code die ik moet onderhouden is slecht. Zo slecht, in feite is het product niet alleen incompleet maar ook niet-functioneel en dat is het al jaren.
_Hoe communiceer ik met het management, op een manier die hen niet in verlegenheid brengt, op een manier die me niet lui of dom maakt, dat een waardevol product in een slechte staat is? _
- *
Verduidelijking: deze vraag versus technische schuld
_Deze vraag heeft te maken met het aanvechten van aloude overtuigingen over een product zonder dat er sprake is van zelfmoord. _ In plaats van strikt te gaan over het omgaan met technische schulden, is er dit: het management suggereert dat de code misschien zo complex is dat ik het niet kan begrijpen, en ** de fouten zijn ontworpen;_dat de oorspronkelijke ontwikkelaar zo meta is, dat wat eruit ziet als fouten eigenlijk geniale streken zijn. _
Misschien is een andere reden waarom dit niet helemaal over technische schuld gaat, dat het verschil tussen ‘geniale’ code en technische schuld is dat het management communiceert dat ik geen ‘geniale’ code mag veranderen, en dat ‘geniale’ code geen technische schuld is: het is de geheime zwarte magie. Ik zou willen dat het management het zou zien als een technische schuld. In plaats daarvan doen ze dat niet. Het management houdt zich niet bezig met de tijd, de kosten of het geld direct – alhoewel dat wel enige zorg is.
- *
Details
Meestal zou ik niet zenuwachtig zijn om dit aan het management te communiceren. Helaas heeft een lange lijn van stuk-maaltijd onderhoud door mensen, van wie sommigen weinig ontwikkelingservaring hadden, die alleen maar de code lang genoeg “aanraken” om hier of daar een patch toe te voegen, en dan verder gaan, een beeld geschilderd naar het management door de jaren heen dat het project _ slechts een stap_ weg is om productie klaar te zijn.
Dat is jammerlijk niet het geval. Een korte lijst van problemen in de geniale code die ik ben tegengekomen in de ~1.5Gb code base zijn…
- Er zijn dezelfde functie, dezelfde variabele namen van dezelfde scope door de hele code base heen (in een taal die dat niet ondersteunt).
- Functies zijn gedefinieerd maar nooit genoemd.
- Buiten de orde variabel gebruik en initialisatie.
- Incompatibele versies van gebruikte bibliotheken.
- Hardcoded URI’s en IP adressen met geen documentatie over wat ze doen.
- Willekeurig opgevraagde API routes die niets teruggeven of gebrabbel; die dan niet worden gebruikt.
- Hard-coded, onversleutelde wachtwoorden en privé ssh toetsen.
Ik zou moeten toevoegen dat toen ik er voor het eerst aan begon te werken, **_het niet eens compileerde. En toen ik het liet compileren, mislukte het tijdens de runtime.
Het is een nachtmerrie.
Het probleem is, het management heeft de zekerheid gekregen van wie ze het geërfd hebben, en van vorige “gung-ho” ontwikkelaars, dat het “werkt,” dus hebben ze er aanzienlijk in geïnvesteerd… En nu wordt de bons aan mij doorgegeven. En ze willen het in productie over ongeveer 2 maanden.
Wanneer ik suggereer dat de vorige ontwikkelaars misschien niet helemaal eerlijk zijn geweest of het product volledig hebben begrepen, stuurt het management gemengde signalen over “krijg het maar voor elkaar,” en “waarom is het nog niet voor elkaar” … en “we zijn er niet echt zeker van dat het ooit werkte” tot “het werkte toen je het ontving,” en “we hebben het nog nooit zien werken” tot “het is al in productie.”
[EDIT: plakte het grootste deel van de volgende paragraaf in de TL;DR-sectie. ]
Management suggereerde ook dat het misschien zo complex is dat ik het niet kan begrijpen, en de fouten zijn zo ontworpen;dat de originele ontwikkelaar zo meta is, dat wat lijkt op fouten eigenlijk geniale slagen zijn.** Toegegeven, ik ben geen genie, en misschien is dat wel het geval: waar ik mijn eerdere opmerkingen over de zeer fundamentele kwesties die ik vond.
Misschien is er wel politiek in het spel boven mijn niveau.