One of the primary drives programmers have is to uncover and use the right abstractions. That’s also one of the things that draws people to functional programming: the abstractions we use in FP are fundamental, atomic and based on maths and logic.
The main reason we seek abstractions like this are so that we can decrease cognitive overhead by Chunking knowledge into composable, related concepts.
What if you could use the same principle, and even some of the same abstractions, to reason about people and teams delivering software?
So what might some fundamental abstractions look like for teams and the process of shipping code? What we’re looking for here are some mental models 1
What makes a good abstraction?
Before we dive into this I want to take just a short detour to put some constraints around what benefits we want to accrue from the mental tools we choose.