I'm sure this will draw the usual comments but I am not a big fan of Moodle. It promises much but has so many weaknesses with basic things that I think the project oversight is not good enough.
For a start, the screen layout is clumsy, both in quality/professionalism but also layout. On some pages there is a left-hand menu, on others is a different left-hand menu that is much more fully styled with icons, some have no menu. Logout is sometimes in the top right, sometimes right at the bottom. Too much use of centre justify means that lists with different e.g. lengths of names, moves the grid and therefore the mouse clicks. It really does look like 100 people have written stuff independently and stuck it together.
Permissions appear to be far too fine-grained which gives a massive list to look through for various permissions, most of which you can only work out by looking at the php source and finding out what is what.
Documentation is astonishingly hard to find for library functions and general usage even though the Moodle site is large and has a lot of information on it. I am not convinced the search is working correctly.
We have been using it for a small distance-learning university and have found many assumptions that cannot be applied to our organisation even though it is a "learning organisation" - not limited to the course structure and the way assignments are handled.
I have actually modified some of the code to suit and added a new assignment type (one of the few areas that looks decent) and here is my next gripe: the code is mostly horrific.
One of the foundations of community projects is well structured and moderated code changes. Things like if...else with two large blocks of mostly similar SQL inline with everything else on a page leading to effectively a single 1000 line long function is not maintainable, quite simply it is asking to break (something I did often but fortunately in new pages I had copied from existing ones).
Look on the other hand at Yii. I know it is a framework rather than an application but actually many of the things are much better thought out. The user interface looks neat and consistent by default, there is a good use of OO for common things like output encoding etc, built in support for translation. It's just a shame that these projects start small and don't consider "big issues" until it is too late to do a fundamental change.