write code with a functional core and an imperative shell
what this just means is to push all input/output to the boundary
functional core: simple data structures and logic
imperative shell: handle all data io at the boundaries
this is a nice image explaining it
questions to trigger
- what are your domain models?
- what logic do you apply to them?
- can you easily swap out things you want to swap out?