When dealing with large software systems, abstraction is the most effective way to wrap your mind around the entire application.
Abstraction means thinking about the ‘what’, instead of thinking about the ‘how’.
One way to perform abstraction when programming is the use of functions. The function as a whole has a purpose, ‘what’ it does, and the implementation inside the function is the detail of ‘how’ that purpose is accomplished. Modules that use that function don’t need to be concerned with ‘how’ the function does what it does. It only needs to know ‘what’ the method does.