I really agree with your sentiments here.
I would say that if you work on a very large scale system with an explicit way of how things are done and there is extreme rigidity in doing anything differently than the job gets tedious quite fast.
I would venture to say that most developers do not fall into this category and have more autonomy (even if that is just building a CRUD web app). Most code isn't peer reviewed and the emphasis is on getting results. Within those boundaries one can do so much to keep things interesting.
I also find it interesting that as developers we sometimes feel frustrated that the end users don't understand or care about the complexity of the implementation and how much may have gone to just that single push of the button on the screen.
How much do you care about the complexity of your car, or the countless bridges that one may drive through? I can sense the complexity behind it but at the end of the day, I enjoy that is come down to turning on the ignition.
Every profession has these issues. Ask the newly grad civil engineer who's tasked to work on a bridge. What do you think they get to do? They get handed the mother of all books on how a bridge is built and everything important that needs to be considered. Their job becomes one of plug and play as there is only so many ways one can build a safe bridge. I had one of my professors relate this story and he couldn't handle it. He went on to graduate school and become an engineering professor.
For better or worse, we get some say on how that bridge gets built, as long as it stays and functions as a bridge by the end of it.
I find a lot of developers just give up, shifting responsibility from internally to external factors. It's hard to see someone just going through the motions, not evening really trying because the job has become "boring". It becomes a self-fulfilling prophecy as the company starts to recognize this and eventually puts someone more inclined in the same position.