What makes concurrency so hard?