I save time doing this. I build my application in terms of simple, testable operations on pojos. Storage is hashmaps. When I found I've built it wrong, I redo my pojos and functions. When I want to move beyond the hashmap-storage phase, I don't throw them out, I interface them and plug in a postgres connection as well. The unit tests can still run on the hashmaps.
Contrast this with what was called 'steel threads' here a while ago. You might implement some authentication end-to-end, then implement some authorisation end-to-end. You realise you accidentally put 'whitelisting' in the wrong place, and now have to spend 80% of your effort debugging opaque integration tests which test the whole system.