> It's always fun and games, until you have a team of 5+ and are always short on time.
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.
Keep things as simple as possible for as long as possible, identify abstractions later rather than sooner, build the system knowing it will change and optimize for as little friction as possible when that change inevitably happens.
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.