Taking ideas from FP and applying it in Python and other imperative languages
Think about the core behavior/logic that your application performs and see if it can be represented as pure functions. There are numerous advantages of pure functions one of them being easier tests.
Use classes instead of dicts to represent application data. You can use `attrs` library to create simple immutable classes. Always move them around in the code. This way your functions operating on that type will know exactly what to expect. Try having small classes that represent some real world type and have pure functions on those classes that perform the behavior.
Do not perform any action right away. Think about making it as a small side-effecting function that can be moved around.
Or even better represent the action as a simple data structure that is immutable. Once you have done that, use effect to implement side-effect performing code.
This idea is already being evangelized by Gary Bernhardt who will be giving closing keynote here.