Jag gick med i ett företag för att lägga till lite funktionalitet i deras kod. Koden är äldre och har underhållits fruktansvärt. Tekniken är ~ 15 år gammal.
Det tar dagar att spåra buggar och problem som borde ta några minuter på grund av trasig / saknad loggning och så mycket oproverad och spagettikod.
På grund av detta tycktes det vara logiskt för mig att skriva om en del av det, nämligen de delar som inte har någon loggning eller felhantering, som är otroligt svåra att läsa och som inte kan testas lokalt på utvecklingsmaskinerna på grund av deras hårda koppling till externa tjänster.
Det är inte ett komplext system, och jag skriver inte om det hela. Jag är mycket medveten om önskan att nya utvecklare ska komma in och utplåna arbetskoden och ersätta den, men koden här är verkligen dålig och verkligen gammal (.net 2 / 3.5, ingen DI, inga enhetstester, ingen SOLID, med COM snarare än mikrotjänster). Jag bör också betona att det här är kod som förändras dagligen och orsakar fel och buggar dagligen, snarare än äldre kod ingen behöver behöva röra.
Jag har skrivit om huvudmotorn som orsakar sorg med alla av de senaste teknikerna. Ledningen var överens om att detta behövde göras någon gång, men eftersom jag är i stillestånd gjorde jag det nu. Det fungerar som ett bevis på koncept / dokumentation. Jag har hållit dem informerade om mina framsteg och de är nöjda med det.
Jag är en skicklig programvaruarkitekt och det var en lek. Den nya koden är helt enhetstestbar med beroendeinjektion och omfattande loggning, så eventuella fel och problem är superlätta att spåra. Att distribuera den här koden är helt enkelt ett högerklick> publicera jobb istället för 1-2 timmar manuell kopiering av DLLS, registrera COM-komponenter, fitta med GAC etc som den gamla inblandade koden.
När vi fixade ett fel innan vi skulle behöva vänta veckor för att kunna distribuera det till vår testmiljö så att det går att distribuera flera saker samtidigt för att spara tid.
Jag skulle också vilja tillägga att koden är mycket enklare, lättare att läsa, bitar av funktionalitet finns i sina egna områden så det är inte fallet att göra det galet komplicerat som bara någon slags savant kan förstå - tvärtom, det är nu modulärt istället för monolitiskt.
Denna omskrivning krävdes också inom en snar framtid på grund av att flytta till molnet som inte stöder mycket av de gamla grejerna.
Till problemet - det finns en utvecklare som är extremt motståndskraftig mot denna förändring. Han var huvudutvecklaren tidigare. Hans förmånsnivå är genomsnittlig men han har inte gjort något för att förbättra den tidigare koden under de senaste åren, det är ett fall av trasiga fönsterteorier i kombination med ingen förståelse för SOLID-principer. Han har också börjat arbeta mindre och mindre och verkar inte bidra mycket längre trots att hans enda jobb är i detta projekt.
Problemet är att han i mötena utåt talar mot mina förändringar och kommer att spåra dem utan goda skäl. Han anser att eftersom det nuvarande systemet fungerar bör det inte ändras och att det tar 1-2 timmar varje gång vi vill distribuera till vår testmiljö är inte så illa, eller att spendera 1-2 dagar på att spåra små buggar som en klient att sakna ett fält på ett webbtjänstsamtal är bara normalt när det är den typ av sak som det tar 30 sekunder att lösa genom att undersöka loggfilerna.
När jag porterar en del av koden har jag också hittat mycket buggar som jag fixade längs vägen som borde ha undvikits men inte kunde vara eftersom det inte finns något sätt att skriva tester för den gamla koden, och det finns inte heller korrekt felhantering / loggning. Alla tecken pekar på att flytten är en bra idé. Jag hänvisar till bokstavliga buggar som möjliga nollreferensundantag eller glömmer att spara databasen efter att ha redigerat den, inte till felaktig affärslogik.
Jag tror att han är motståndskraftig eftersom det kommer att driva honom ur sin komfortzon. . Han talade omedelbart inledningsvis innan jag ens förklarade mina resonemang.
Frågan är att ledningen ser på oss båda och inte vet vem de ska tro.
Alla behöriga programvarutekniker skulle titta på den äldre koden och omedelbart komma överens om att den inte kan underhållas och att arbetstimmar sänks ned i felsökning. De håller med om att den nya koden är ren, underhållbar, följer SOLID och löser dessa problem medan den gamla koden är en röra och ofta bara har gigantiska metoder som gör alla typer av arbete.
Vad jag behöver göra är förklara att jag har betydligt mer erfarenhet och har gjort den här typen av arbete tidigare med fantastiska resultat (jag skrev all kod för en start precis som jag har gjort här, och de använder den fortfarande 6 år senare från bara jag som den enda utvecklaren till ett team på mer än 40 personer).
Jag hänger också fast med att behöva skriva mycket "dokumentation" som förklarar varför den här nya arkitekturen är bättre, men den är helt teknisk ( talar om SOLID, enhetstestning, beroendeinjektion osv.) så det finns egentligen ingen poäng eftersom ledningen inte förstår det. Bara den besvärliga utvecklaren skulle förstå, men han förstår redan, han försöker bara sätta press på mig för att spåra ut det genom att skapa extra arbete åt mig.
Det finns också en annan utvecklare som är 100% överens. med mig på allt, vilket hjälper lite. Men han är mindre erfaren, så det är fallet att jag arkitekterar och han följer med så att han förstår och kan arbeta med det också.
Jag letar efter råd om vad jag ska göra med killen. Det perfekta målet är att ledningen ser de enorma fördelarna som detta kommer att medföra, inser att jag är en mycket kompetent programvaruingenjör (inte av fåfänga skäl utan för att jag behöver dem för att lita på mig) och arbetar för att förhindra att detta projekt spåras av. >
Jag antar att jag också bör betona att majoriteten av arbetet är klart för att skapa ett bevis på konceptet (vilket egentligen är en nästan färdig produkt - det var inte mycket att skriva om och jag arbetar snabbt). Det är stillestånd just nu mellan projektfaserna och så jag tänkte att jag bara skulle skriva det medan jag inte hade något att göra. Min enda uppgift var att dokumentera hur jag tycker att vi skulle gå vidare, och jag fick 2 veckor att göra det, men på två veckor tänkte jag att jag bara kunde bygga det nya systemet och ge prototypen som min dokumentation (tillsammans med en stödjande arkitektförklaring ), så jag gjorde det. Alla är nöjda med det inklusive ledningen, jag har inte gjort något hemligt.
Jag har redigerat mitt inlägg för att försöka klargöra problemet med den här utvecklaren eftersom folk hoppade på det faktum att jag skrev om äldre kod och antog att jag hade fel när jag gjorde det. Jag uppskattar också att det är svårt att inte låta inbördes när jag säger att jag har gjort allt bättre, men i det här fallet var det verkligen dåligt . Jag är inte en fantastisk programmerare men det är inte svårt att förbättra något som var så hemskt.