The biggest barriers are:
Tooling
Lots of moving pieces are involved with mobile apps - Xcode and the various SDKs and tooling on iOS including the provisions profiles, the Android SDKs and tools for Android. It gets a pain, and adding Xamarin as well can cause a few issues. Microsoft are working to smooth these out, but the top tip is to follow the docs when installing and configuring and always uses the latest bits!
Running on emulators and devices
This isn't a Xamarin specific thing, but mobile in general is a pain. Provisioning profiles on iOS to run on devices, Android emulators which didn't run on AMD chips or Hyper-V until recently. Again, follow the docs carefully and if you want to run Android emulators and have an AMD chip or Hyper-V for things like Docker, give the preview version a go (
https://aka.ms/AA1v77v).
Architecture
Jumping from native to Xamarin has a mental leap around architecture. If you've built iOS and Android in the past, you would have built an app twice. With Xamarin you try to maximise the amount of shared code, which means a different way of thinking, pushing as much as possible into shared code. THat's where Xamarin in Action comes in, it covers how to use MVVM to maximise code re-use. So how to overcome? Buy my book!