Functional programming consists of making all your functions referentially transparent
- Each function only uses its input parameters to produce its output, without altering the state of the system in any way
- Functional programming requires immutable data and pure functions