What problems are there with asynchronous programming?

When programmers have to deal with non-blocking (aka asynchronous APIs) we have to maintain more state which can be complicated.

Tyler mentions tracing as being valuable for us when we deal with our own non-blocking code in C++.

.