I am the CIO of a mostly remote, cybersecurity startup (50 FTEs). I balance between not single-threading all choices through me and not letting things get too out of hand. That means no one is every really happy. E.g., we use Uberconference for videoconferencing. We thoroughly looked at a bunch of others and chose UC for its functionality, price, and simplicity (every conference gets a simple phone number, no stupid…
Eh, the problem with the "IT department dictates all the choices because the devs are stupid" approach is that it takes ownership away from the devs, therefore leading to a self-fulfilling prophecy. If I can't be trusted to make technology decisions for the system I know about (and the IT department knows nothing about), then why should I care about delivering the best possible product? Sorry, I've seen exactly that…
They're smart when discussing code complexity, callbacks, functions, APIs and the like. I've seen this time and again where many devs would get together to flesh out a chunk of a project and work together rapidly for the best way forward, along with nearly all edge cases. This is not simple or stupid in any sense of the words.
However they are also stupid when it comes to a larger view of what they work on. Perhaps myopic is a better term. I've seen devs write code expecting a database server has commodity access to the internet. I've seen devs include untested, unpatchable by WSUS software in generated system images. I've seen devs not give a second thought about logging, monitoring, error handling and more sysad level things, as it was outside of scope.
I trust devs in their domain, which is a narrow view of code. They've demonstrated they cannot be trusted with systems.