One feature of Moose roles that is if a role provides a method and a class uses that role, if a class defines a method that the role provides, it silently overrides the role's version of said method. This makes it easy to customize your behavior per class.
However, did you get the "silently overrides" part? Regardless of this being in the original traits papers, how it's implemented in Perl 6 and how it's implemented in Moose roles, it's a mistake. I have again lost quite a bit of time debugging this "feature". I'm really tired of this silent overriding of behavior. This is what roles are supposed to help with!
The Moose maintainers have not expressed a desire to change this (it's been discussed in this blog) and in fairness to them, Moose is absolutely fantastic in most regards. However, when working with the larger systems that roles help out with, it's ridiculously frustrating to keep getting bitten by this over and over. I've discovered that this is a common problem when converting a base class into a role. You would think that since the child class is overriding the base class, this would be a non-issue, but we often have calls to $self->next::method and everything falls down and goes boom.
It we didn't have a great test suite, this would have hurt our customers badly.