See the first post in The Pragmatic Programmer 20th Anniversary Edition series for an introduction. Challenge 1 Think about a design principle you use regularly. Is it intended to make things easy-to-change? Pure functions! Outside of Functional Programming, this is perhaps a lesser used/considered design principle - often superseded by principles such as SOLID and DRY. However, I have found it to be a very effective principle to follow no matter the programming paradigm being used.