You end up with a lot of unfactorable redundancy in the things that implement the behaviors. You end up having to do a lot with records, and the syntax for dealing with them is very verbose. The distinction between handle_info and handle_cast is a bit odd. It's a lot of little things, many of which are actually Erlang-the-language/syntax, that adds up to an experience that is better than anything I know when you're hitting the strengths of the system, but still could use some improvement.