Quite simple for simple tasks. Automation is not always simple though. That is like asking someone to write a program that is static and only has inputs and outputs, but doesn't do loops well or anything else. Terraform is great if you are fine with duplicating things in 100 different places. Once you want to take values and plug them into various modules and run loops, then Terraform begins to suck and its weaknesses get exposed pretty quick.
So duplication is not inherently bad if each team has slightly different requirements and is expected to own its infrastructure. Or in other words, the overhead of communication can easily be higher than the overhead of duplication.
Yes, vanilla terraform can be a bit verbose at times but that doesn't bother me. If DRY and other software engineering-y concepts are important to you, I would recommend a wrapper that assists with that, something like terragrunt.