At its core, Flux consists of a set of APIs and controllers, each responsible for a single function with its own CRDs. This design gives it its flexibility and composability, allowing Flux-managed projects to span an arbitrary number of git repositories having different repository structures, with multi-tenant and multi-cluster support.
With its modular nature and everything being defined as Custom Resources, Flux feels like an integral part of the cluster rather than an application running on top of it. This helps make sure that all state is defined declaratively, but on the flipside it makes it harder for developers with no Kubernetes experience to make sense of Flux, compared to tools like ArgoCD.
At Kiwee, we find Flux to be a vital component of the GitOps framework. While it's not a one-size-fits-all solution, we strongly recommend giving it a try to find out how it works for you.