Applications written for X Windows are event driven. They must react to the user. And quickly or the the user is left wondering if they really clicked the button or not. Writing code to revolve around events is hard.
Writing the code is simply not enough. The code application has to work and behave. Testing that both are true is difficult. It is difficult to exercise all the paths even in a fairly simply application.
My first foray into applications for X Windows is a simple tool to manage removable media in Window Manager environments. Window Managers don't come with a lot of functions like Desktop Environments such as GNOME or KDE. But they are fast and frugal. I tired of manually unmounting removable media to make sure it wasn't corrupt.
To make my first attempt simple I used Python and PyGTK. I was hoping this would make prototyping and development faster. It helped, but the GUI is still not abstracted enough. The lack of abstraction makes for many lines of code to do simple things.