as I haven't been exactly shy about sharing them.

My current fave development environment is Squeak (language Smalltalk).

Squeak has a lot to recommend it, however the UI library is definitely not one of them. Morphic is awful, the api's are very crufty, much of it left over from building etoys (see [link||]) on top of it.

A lot of refactoring could help. I think traits will likely make it into the language in the next year and that will probably simplify a lot of the inheritance structure of stuff like the streams and collections libraries.

Squeak is image based - this has a lot of pluses, but the minuses are
1) It is possible to put the image into a state where it simply no longer works, then you have to build a new image.
2) Loading packages can produce all sorts of library conflicts. There is no mechanism to cleanly roll back a package load. Once a method is overwritten, its not restored on package unload (the good part is that Smalltalk's store each incremental change in a change log, so even if you completely hose yourself and crash, it is possible to recover your changes).
3) It is difficult to create a minimal image that only has what a given program needs to run. There is hope coming from the spoon project though. ([link||]).

Other annoyances
- Not enough database interfaces available.
- The VM has a green threads implementation so having a multiple processor box doesn't help at all.
- I'm not too fond of the current collection of methods available on String, however, its easy to add more.
- No unicode support (yet - getting close).
- Blocks are not full closures in Squeak (there is an implementation, but it is not in the standard image). There are workarounds to make them act like closures but real closures would be better.
- Squeak has a zillion packages to do all sorts of nifty things - but they were written by very smart people who found it interesting to write such a thing and once it works they lost interest. Thus, you often have to do your own bullet proofing.