Crossplane · 03 of 04 · Pollers and loops
Every reconcile spends someone's API budget. On GitHub mine was 5,000 calls an hour, shared with Backstage, and I emptied it three different ways before I learned to count.
Polling is a cost
The provider's default poll is ten minutes, per managed resource, forever. Every new cluster from the Apron template now starts with --poll=1h and --max-reconcile-rate=50.
Never fight the provider
If the provider owns a field, like the external name it assigns, render back exactly what it wrote. Two writers with different spellings of one name is a loop, not a disagreement.
The worst one
The provider release I ran read a rate-limit 403 as "this file was deleted" and re-created it, overwriting real values.yaml content. An upstream fix already existed but hadn't been released, so I built and published my fork's main.