Software development is a complex task.
Abstraction is one means used for reducing the complexity involved in software product development.
One way by which abstraction is expressed is by removing details in order to simplify and capture a concept, finding a common denominator for generalization.
Though abstraction is a useful tool, it is not always used; sometimes it is just difficult to think abstractly, and sometimes abstraction is not utilized due to a lack of awareness of its significance and its potential contribution.
Abstraction Levels in Agile Software Development:
Abstract thinking is needed in software engineering in order to understand the requirements and simplify the product design, keeping it maintainable and ready for ongoing changes.