Imagine if imports/use were not documented and you had to guess.. that's what features are like.
The way features are handled completely suck to use. I can no longer copy and paste code to run, and there is no universal flag I can give them to bring every time in. I have to hunt with Google what the compiler can't find, and hope I can quickly find a page that tells me what feature I need.
You can no longer copy and paste example code to get a start on something. Now, when you don't know anything, you have to hunt down what feature flags you need too,
Did you know the async_tungsteninte crate, made specifically for async-std, still needs a feature to bring in async-std support? This is the new rust world, and it sucks.
The defaults need to be set better. I shouldn't need to add an async-tls flag to the websocket crate, because I can't think of a single time I needed a ws library without tls, and if I did, I could override it anyways.
The absolute minimum is the compiler should tell you what to do when it can't find something behind a feature. And cargo should be able to list the possible flags with descriptions.