I started using gnucash recently for keeping track of my finances. Once I learned the important things about double-entry accounting, I found it to be a brilliant program with a really nice interface.
Note that the key is to understand what the word "account" really means: you should think of it as an account of where you're money has gone (as in the verb, to account for). Some people, including myself at first, are stuck in this concept that accounts you list in your financial records somehow must be related to "accounts" (as in the common noun usage) they have with some company like a bank. In this sense, it seems strange for them to have an account labelled "Expenses:food".
To play to this naive thinking, the makers of Quicken decided to include what they call "categories", so that the naive user still has this psycological division between a bank-type "account" and the "categories" they classify their expenses in.
In gnucash, though, no such artificial division is made: everything is an "account". For every type of expense you have (food, utilities, etc), you have an account: these are accounts of what your expenses are.
Anyways, semantics aside, the one thing I found a bit frustrating was the reports that gnucash could make were not easily customized. There are several standard reports included, the most important of which are balance sheets and profit and loss reports.
I decided though that I really needed some more features: for example, I wanted it to calculate summaries for accounts that were 3 levels deep. I also wanted to be able to easily ask for a monthly report: I live month-to-month, and I what I really what to know is how much I spent last month, how much I've spent so far this month, etc.
I learned though that the code for the report calculations was written in scheme, which makes it very easy for the end user to modify and change to their liking. So I dug out my scheme textbooks from undergrad, and added the features I wanted.
I also modified the html generator to produce human-readable html (just added a bunch of \n's).
I put them up here for anyone who wants them. I'm using gnucash 1.4.8, from the debian unstable distro.