Mine is .0005 for a .001 which I find patently absurd.
So much for "we're trading free".
All outputs must be at least 0.01 or you'll need a 0.0005 fee for the transaction.
If you want to make transactions that pay less than 0.01, then you ought to use sendmany to make a single transaction with many small outputs at once and then pay only one fee.
Without the anti-DOS behavior imposed by relaying and mining nodes, a single system of mine could saturate the cpus of just about every client in the network, and in in a week add a gigabyte of data to the blockchain that every client must currently download, store, and process. Go spin up a miner on testnet with the fee rules disabled. You'll see it spewing 1MB blocks as fast as it mines them.
The fees are less than a penny in value (unless you're running old software, stop doing that!), which is pretty cheap for an operation which will be saved forever by all full nodes of bitcoin— and are only imposed against transactions which objectively look similar to attack patterns (very tiny outputs, quick turnarounds, and or/lots of data).
As far as the 0.38 transaction goes: Either it's comprised of lots of 0.01 inputs, in which case, it's taking a kilobyte of data to represent, thus getting subjected to a fee. Or it's a quick turn around of an input that just landed in the wallet. If it's the latter then simply waiting a bit (a day or so most likely) will make it work fee-less.
The bitcoin software tries to use the oldest inputs available to make new transactions (in order to get the highest priority), but if coins which just landed in your wallet are all you have then thats what it will use, and your activity will look too indistinguishable from an attack where someone is ping-ponging coins between wallets quickly for the system to allow it without a fee.
Nice straightforward explanation. Thanks!