@teotwaki not for all projects but for basic protocol implementations that you want translate to any environment, it's really useful to focus on this type of robustness.
E.g., for zmodem2 I'm redesigning it as something that walks and talks stream trait implementation but is not such [1]. Then in my example apps I'll migrate them to Tokio and demonstrate how to wrap it for that use and purpose.
With traits, when I use them, my strategy is usually pick stuff that gets the first iteration done fastest. Then I start to drop over time stuff that maturizes and keep only the essential traits. If you have stable code, the benefit of productivity in the first phase starts to degenerate into something that can get in the way of bug fixes etc.
[1]
https://docs.rs/futures/latest/futures/stream/