Currently in koa (09/01/2014), streaming data to the network begins only after the middleware stack has been fully traversed.
If the flow through the middleware stack takes N seconds then a stream created on this.body may buffer data in memory for N seconds.
Since any call to "yield myPromise" pauses the flow until myPromise resolves, streams may start buffering in memory until all middleware promises are resolved.
It is probably better to start streaming data only late in the middleware stack in order to avoid slower promises (database access for instance).
In the following flow :