Looks like you're on your way! 
If you're keen on getting a bit deeper into calibrating for dimensional accuracy, note the different possible types of error:
* Systematic error - error that's the same every time
* Random error - error that's not the same every time
Random error on these machines is usually pretty obvious - loose carriages, wobbly extruders, mechanical 'ringing', overextrusion and other chaotic processes etc.
And in most cases (linear systems) you can divide systematic error up into proportional and constant error - i.e. some errors (e.g. the steps-per-mm not being accurate, thermal contraction) change in size in proportion to the dimension of the object, while others (e.g. undersized parts due to backlash) are constant regardless of the size of the object.
I'd recommend checking the error for each axis at two different sizes (e.g. after your 20mm cube, make a 50x50x5mm test square to check the x/y at 50mm, and a D20x50mm tall cylinder to check the z height at 50mm and circle quality), and confirming that the error is in fact proportional before changing the steps-per-mm.
If the error is constant (and 0.2mm in Z and 0.4~0.5mm in the x/y is reasonable for backlash on these machines), changing the steps-per-mm will get you a perfect 20mm cube but may increase error a lot on larger objects...
Also from the slightly wavy squishy bottom layers of your part, I'd guess there could be a bit of backlash in the z axis - it looks familiar, I had a shocking case for a while! If the bottom layer is over-extruded, it tends to cascade into the next few layers too before settling down.
Enjoy, wish I was calibrating mine right now. 
SD3. Mk2b + glass, heated enclosure, GT2 belts, direct drive y shaft, linear bearings, bowden-feed E3D v5 w/ 0.9° stepper
Smoothieboard via Octoprint on RPi