I've used twisted for semi-major project (<a href="https://github.com/Yelp/Tron" rel="nofollow">https://github.com/Yelp/Tron</a>).<p>It's certainly a difficult thing to get your head around. The parts of the project that touch twisted is always the most complex to explain to anyone else. However, async code is always hard. It also doesn't help that the code base shows it's age.. non-PEP8, strange naming conventions etc.<p>However, one thing that I've noticed with recent projects using Tornado (<a href="https://github.com/rhettg/Dynochemy" rel="nofollow">https://github.com/rhettg/Dynochemy</a>) is that some concepts that I thought was overly complex in Twisted makes sense eventually. For example, handling errors in async code is really hard. The framework twisted came up with with Deferred, callbacks and errbacks is pretty smart. You almost have to re-invent twisted before you can appreciate it.<p>I'd recommend reading the original paper for more information: <a href="http://www6.uniovi.es/python/pycon/papers/deferex/" rel="nofollow">http://www6.uniovi.es/python/pycon/papers/deferex/</a>