The **interface segregation principle** states that our modules should not know about functionality that they don't require or use. Instead, we should design interfaces or protocols that cleanly map to the functionality that our modules require. It becomes a key practice when [[Testing|testing]], since it enables us to [[Mock Testing|mock]] only the functionality our code needs.