> Use Helm. Or some other tool for managing Kubernetes manifests, I’m not picky – the important thing is that you ~never directly use kubectl apply, edit, or delete. The resource lifecycle needs to be findable in version control.

I'd say `kubectl apply` fits better with a Git oriented flow than the imperative `helm install` flow. Nothing about helm guarantees or forces you to use version control. Actually the opposite. If `helm install` fails. You need to `helm delete` first. It has no way of declaratively managing updates at all.

Have a CI job call `kubectl apply -k ./deploy --prune` on every commit is way nicer than helm in my opinion.

I agree; helm is too declarative.

Whenever I can, I use helmfile[0] for storing variables for helm since it does add a declarative layer on top of helm.

0 - https://github.com/roboll/helmfile