Question: After reading [Should package names be singular or plural?](https://softwareengineering.stackexchange.com/q/75919/7167) it occurred to me that I've never seen a proper debate covering one of my pet peeves: naming implementations of interfaces. 

Let's assume that you have a interface `Order` that is intended to be implemented in a variety of ways but there is only the initial implementation when the project is first created. Do you go for `DefaultOrder` or `OrderImpl` or some other variant to avoid the false dichotomy? And what do you do when more implementations come along?

**And most important... why?**

Answer: 
I always go for `OrderImpl` simply because it shows up alphabetically right after the `Order` interface.
if possible, name it after what/how it does its thing.

usually worst approach is naming it after how it is supposed to be used.

If it is supposed to be used as base class for implementation, you can use BaseX or AbstractX (if it is abstract (but try to squeze in what it does, because if it did not do anything you would not create it, you already have interface).
If it provides simplest possible functionality and it is expected to be used directly (not extending it) when such functionality suffices, you can call it SimpleX or BasicX.

If it is used unless some other implementation is provided, name it DefaultX