Hvad preview environments faktisk koster
Prisen på preview environments vokser med antallet af åbne pull requests – ikke med teamets størrelse. Se, hvor pengene forsvinder, hvilke dele der kan deles, og hvordan du udløber previews, så fem åbne PR'er ikke bliver til fem stacks.
Preview environments er noget af det, der giver et team størst effekt med mindst indsats. En reviewer klikker på et link og bruger ændringen i stedet for at læse en diff og forestille sig resultatet. Designproblemer bliver opdaget før merge. QA holder op med at være en separat fase.
De er også den budgetpost, der lettest ubemærket tredobler din regning, og årsagen er simpel matematik, som ingen regner på, når funktionen aktiveres.
Matematikken
Prisen på et preview environment skalerer med antallet af åbne pull requests – ikke med antallet af personer på teamet eller antallet af merges.
Et team på fire personer med en sund review-kultur kan sagtens have fem til otte åbne PR'er ad gangen. Hvis hver af dem provisionerer en komplet kopi af jeres stack, kører I fem til otte kopier af production ud over production selv. En stack, der koster $30 om måneden at køre, koster nu $180–$270, og det fremgik ikke af nogens estimat, fordi estimatet handlede om ét environment.
Værre endnu: Antallet af åbne PR'er hænger ofte sammen med de tidspunkter, hvor I mindst har råd til overraskelser: før en release, under en refaktorering, eller når nogen holder ferie, og deres branch står åben i tre uger.
Hvor pengene faktisk forsvinder
Ikke alle dele af et preview koster det samme, og det er netop dét, der gør omkostningerne styrbare.
Application containers – moderate omkostninger og pengene værd. Det er den del, I faktisk ønsker. Den skalerer også godt ned, fordi et preview ikke har brug for lige så meget memory som production.
Databases – den dyre del. En dedikeret database pr. preview er den største enkeltstående bidragyder, og den er som regel mindst nødvendig. De fleste reviews har ikke brug for en isoleret database; de har brug for en database med realistiske data.
Build minutes – usynlige og kumulative. Hvert push til en åben PR udløser et nyt build. En branch med fyrre commits over to uger bliver bygget fyrre gange. Det er en reel udgift, som aldrig vises som en kørende resource, og derfor slipper den helt uden om den mentale gennemgang.
Egress – lille pr. preview, stor samlet set. Preview-URL'er bliver opdaget og crawlet. En crawler, der henter jeres assets fra otte preview environments, udfører otte gange så meget arbejde som på production, og I betaler for det hele.
Fire ting, der reducerer omkostningerne uden at fjerne værdien
Del databasen
For de fleste ændringer kan previews dele én database, der er seeded med repræsentative data. Reserver isolerede databases til de PR'er, der faktisk har brug for dem – migrations, schema changes og alt destruktivt.
Den regel, der fungerer i praksis: Isoleret database kun når PR'en ændrer schemaet. Alt andet deles.
Skaler previewet ned
Et preview, der kun betjener én reviewer, har ikke brug for production's resources. Halvt så meget memory og en brøkdel af CPU'en er som regel usynligt for den person, der laver reviewet, men gør en mærkbar forskel på prisen.
dockup resources my-project/my-api --memory 512 --cpu 0.5
Udløb dem
Den ændring, der har størst effekt. Et preview bør ikke leve længere end dets pull request.
Automatisk teardown ved merge eller lukning er minimumskravet. Det, der overrasker teams, er den forladte PR – den branch, som nogen oprettede, blev taget af arbejdet med og aldrig lukkede. De environments kører i månedsvis.
En maksimal levetid er et vigtigt sikkerhedsnet: Alle previews, der er ældre end f.eks. fjorten dage, fjernes uanset PR'ens status. Hvis nogen skal bruge det igen, kræver det kun én command.
Hold dem ude af søgninger
Preview-URL'er bliver indekseret. Det er dårligt af to årsager – duplicate content, der konkurrerer med jeres production-site, og crawler-trafik, som I betaler for på environments, ingen bruger.
dockup noindex my-project/my-api --on
På Dockup er PR previews knyttet til den enkelte service og kan aktiveres eller deaktiveres eksplicit i stedet for at være en global indstilling, som I automatisk arver:
dockup pr-preview my-project/my-api --on
dockup preview list my-project/my-api --json
dockup preview delete 128 my-project/my-api
Det er netop den del, teams springer over og senere fortryder. Environments, som I ikke kan få en oversigt over, er environments, I betaler for uden at vide det.
Det månedlige audit, der er værd at lave
Tre spørgsmål, fem minutter:
- Hvor mange previews kører? Sammenlign tallet med, hvor mange PR'er der faktisk er åbne.
- Hvor gammelt er det ældste? Alt over to uger er næsten med sikkerhed forladt.
- Hvilke har deres egen database? Alt, der ikke er en schemaændring, har sandsynligvis ikke brug for en.
De fleste teams finder mindst ét environment fra en PR, der blev merged for flere måneder siden, men som stadig kører og stadig koster penge.
Få værdien uden overraskelsen
Det her er ikke et argument imod preview environments. Det er et argument for at behandle dem som infrastruktur med en livscyklus i stedet for som et afkrydsningsfelt.
De teams, der gør det rigtigt, gør tre ting: Previews skaleres ned, previews udløber, og previews deler det, der kan deles sikkert. Det holder som regel hele preview-footprintet under prisen på én production-service – og til den pris er det åbenlyst pengene værd.
De teams, der bliver overraskede, er dem, der aktiverede funktionen én gang, gjorde det korrekt og aldrig så på listen igen.
Ofte stillede spørgsmål
Koster preview environments lige så meget som production? Pr. environment kan de gøre det, hvis de provisioneres identisk. Når et preview skaleres ned og deler en database, koster det typisk en brøkdel af production.
Bør hvert preview have sin egen database? Kun når ændringen påvirker schemaet. En delt, seeded database dækker de fleste reviews og fjerner den største udgift.
Hvad sker der med et preview, når PR'en lukkes? Det bør automatisk destrueres. Hvis det ikke sker, samler I environments fra PR'er, som ingen længere husker.
Skader preview environments SEO?
Det kan de, hvis de bliver indekseret – duplicate content, der konkurrerer med jeres production-sider. Markér dem som noindex, hvilket også forhindrer crawlere i at generere trafik, som I betaler for.
