I've found that much of work in DevOps is in solving the chicken-and-the-egg problem (or what I'm supposed to call "circular dependencies"). One of the most classic "bootstrapping" problems being the terraform-state-and-s3 predicament. You want to use Terraform to provision your infrastructure. So you need somewhere to store Terraform's state file. So you use the S3 backend. But now you have this S3 bucket that wasn't provision by Terraform. A common solution is to define the S3 bucket on it's own, do a terraform apply with a local backend to provision it, copy the file manually to the bucket, update the backend to point to this new s3 endpoint, and now terraform is managing the very bucket its state is stored in. Still writing.