Instead of using a buffer, it's also possible to use a task that is always waiting for a buffer write. Basically, a blocking task behaves as a 1-slot buffer per channel it listens on. Buffering seems to be a system design issue. Once you know the entire network, it's possible to say a couple of things about how data will propagate. See next post.