Kijk, je reactie is nu al vele malen genuanceerder dan je eerdere en dat was mijn punt.
Organisaties, groot en klein, dienen prioriteiten te stellen
Maar elke euro kun je maar 1 keer uitgeven en een FTE werkt 40 uur per week
Ik schets een ideaal einddoel. Ideale plaatjes zijn nooit genuanceerd. Als al het andere gelijk is, dan is een situatie met testomgeving is altijd beter dan een zonder, daar zijn we het denk ik wel over eens. Dat je niet alles tegelijk kan maar moet prioriteren is ook normaal. Mijn punt is dat de prioriteiten vaak verkeerd liggen en dat een testomgeving en geautomatiseerd testen en patchen worden onderschat en te weinig prioriteit/budget krijgen.
Dat andere zaken ook niet geregeld zijn is een verklaring maar geen excuus.
Als ik met een auto de weg op wil zal die auto op alle wettelijke verplichtingen moeten voldoen. Als ik zonder licht rijd kan ik ook niet tegen de politie zeggen dat ik het belangrijker vond om mijn remmen te laten repareren en dat ik geen geld of tijd had voor de lichten.
IT groeit altijd, "slimmer werken, niet harder" is misschien wel het belangrijkste principe in de IT. Een belangrijk deel daarvan is dat je zoveel mogelijk door de computer moet laten doen. Als je een goed georganiseerde IT-omgeving hebt dan zou het opzetten van een testomgeving een kleine moeite moeten zijn. Natuurlijk zijn een hoop omgevingen nog niet zo goed, maar daar zouden wel naar toe moeten werken.
Als het uitstellen van updates met een paar dagen daarin helpt, dan is dat geen domme keuze.
Als je in de tussentijd gehacked wordt dan was het wel een domme keuze. Uiteraard is het uiteindelijk een afweging tussen belangen en er is hoe dan ook altijd een vertraging tussen het moment dat een patch uitkomt en dat die daadwerkelijk op je server staat. Je wil de periode van uitstel zo kort mogelijk maken. Een goede /automatische/ testomgeving helpt daar enorm bij.
Misschien moet ik nog even benadrukken dat het "automatisch" het belangrijkste aspect is. Ook als je geen testomgeving hebt dan wil je het beheer van je systemen nog steeds automatiseren. Ook de beslissing om standaard 3 dagen te wachten met patchen kun je automatisch uit laten voeren.
Essentieel daarbij is dat het testen/monitoren ook automatisch is. Dat heb je toch nodig voor je productieomgeving. Als de applicatie gecrasht is of het SSL-certificaat gaat verlopen dan wil je dat zo snel mogelijk weten, of dat nu in test of productie is.
Als laatste wil ik nog zeggen dat een testomgeving geen golden bullet is.
Uiteraard want die gouden, of zilveren (hey Fred Brooks), kogels bestaan niet
Een testomgeving is een belangrijk middel om dit mogelijk te maken maar geen doel op zich. Voor we het te ver op blazen: in mijn eerste post ging er maar één zin over de test-omgeving en ik doe inderdaad de aanname dat je die hebt, dat hoort bij een goede omgeving net zoals ik er van uit ga dat er een professionele beheerder is die regelmatig patches installeert en dat die patches er uberhaupt zijn.
Mijn belangrijkste boodschap is dat je alle stappen van beheer moet automatiseren. In dit specieke geval heb ik het dan vooral over patches installeren en je systemen monitoren. Als je alles netjes automatiseert dan is een test-omgeving een (relatief) kleine moeite want die rol je dan ook automatisch uit. En als je eenmaal zo'n test-omgeving hebt dan is het verder automatiseren van je omgeving een stuk makkelijker. Daarom is het een uitstekende investering en een van de eerste dingen die je zou moeten doen als je een IT-omgeving op zet.
Dat de praktijk vaak niet goed is doet niks af aan het ideaalbeeld waar je naar toe wil werken.
De capaciteit vrijmaken om dit op te zetten is 1 ding, maar je dient dit ook zeer secuur te onderhouden. Onlangs ging hier nog iemand de mist in omdat een ander de installatie van .NET 4.8 getest had op de testomgeving maar nooit doorgevoerd in productie. Tegelijkertijd de change in de testomgeving niet ongedaan gemaakt en bij de applicatieupgrade op test kwam een probleem niet naar voren die bij de andere .NET versie speelde.
Dat klinkt nogal knullig, maar ook dat is de praktijk.
Je bewijst mijn stelling

Dit soort situaties is precies waar het om gaat.
De kern van het probleem is dat iemand met de hand iets heeft geïnstalleerd en (waarschijnlijk) door menselijke slordigheid is dat nooit op productie terecht gekomen en het is ook niet opgemerkt dat er verschillen waren tussen test en productie.
In mijn ideale wereld zou die patch zijn getest in een vers geinstalleerd testomgeving. Als al je automatisch tests laten zien dat het goed gaat dan bouwt het systeem een nieuwe productieomgeving die exact identiek is aan de testomgeving (uiteraard met uitzonder van wachtwoorden en ip-adressen enzo).
Vervolgens wordt die nieuwe productieomgeving actief. Blijkt later dat er toch iets mis gaat dan (her)bouw je een productieomgeving volgens de vorige specificatie en ga je daar naar terug zodat je ademruimte hebt. Vervolgens ga je het probleem repliceren en los je het op. Daarna voeg je een automatische test op dit probleem toe aan je monitoringsysteem zodat je het de volgende keer wél in de testomgeving vangt.
Hoe verder je het hele proces automatiseert hoe sneller je het vertrouwen hebt dat een bepaalde patch naar productie kan omdat a) de functionaliteit hebt bewezen in je test en b) snel kan schakelen (vooruit of achteruit) als er toch nog iets mis gaat. Uiteraard is dit een continu proces, niemand kan vooraf alle mogelijke fouten en problemen voorzien. Je doet wat je kan en bij ieder prolbeem dat je tegenkomt verbeter je systeem verder. Als je een beetje schaal hebt wordt het steeds makkelijker om nieuwe systemen toe te voegen omdat die gebruik kunnen maken van controles die je voor andere systemen hebt ontwikkelt.
Voor de programmeurs, wat ik hier omschrijf is eigenlijk "test driven development" maar dan voor systeembeheer. Maar in plaats van alleen de applicatie test je het gehele systeem.