I've used them sparingly, mainly to cut-down on boilerplate. I have a fragment where there are about a twenty different state-flows to observe and update some traditional Android views, and this was a massive function in the fragment, so i extracted the function to a different file with the viewmodel and fragment as receivers