One person upgrading terraform can break the state format for backwards compatibility. We use direnv with asdf to ensure everyone is in the same version now.
Run the apply via a pipeline. Pr merged in. Plan runs. Approval gate for apply.
Works on our staging and production environments, but the feedback loop is too long for development. I mean, if it was literally the only way then we’d live with it, but ensuring everyone is using the same version is enough.