Maybe my experience isn't typical, but working as a SW developer gives me a lot of autonomy, even if am "just implementing features".
First off, the requirements are "what should happen", not "how it should be done" (the latter is up to me, or the team).
Secondly, I often end up discussing the requirement with the product owner. What should happen if this happens? Why don't we do it like this instead? It's often a back-and-forth before we arrive at the actual requirements.
Then comes the implementation phase, where it's up to me how to solve it in code.
So in my opinion, I do get a lot of say in what to do, and get to make a lot of decisions - which is why I still love coding, even after 25 years: https://henrikwarne.com/2012/06/02/why-i-love-coding/
I don't know about how typical it is necessarily, because I have a more similar experience to you, but I've definitely worked at jobs where I wasn't only told what to do, but how to implement it (usually by architects).
First off, the requirements are "what should happen", not "how it should be done" (the latter is up to me, or the team).
Secondly, I often end up discussing the requirement with the product owner. What should happen if this happens? Why don't we do it like this instead? It's often a back-and-forth before we arrive at the actual requirements.
Then comes the implementation phase, where it's up to me how to solve it in code. So in my opinion, I do get a lot of say in what to do, and get to make a lot of decisions - which is why I still love coding, even after 25 years: https://henrikwarne.com/2012/06/02/why-i-love-coding/