I do use Terraform. Terraform is very good to create the building blocks of your architecture but not so much for the user-friendliness part.
Let's take an example: You have an architecture with a CI/CD. Great. You add your CodePipeline and CodeBuild ressources to your plan. Perfect.
For the CI part, you want your build to start on every commit on every non-master branch. Bad news: CodePipeline doesn't have support for multi-branch. So you will need to find a way to clone the default pipeline for each new branch.
Repeat this for all the user-friendly features (GitHub check runs, env vars management, deployment monitoring/rollback...) for the three cloud providers for all the different architectures and you start to feel the difficulty (I can testify ;)).