Problem Statement
Handling payments directly without proper abstraction leads to tightly coupled code that is hard to maintain and extend. If payment logic is scattered, adding new payment methods or handling failures becomes error-prone and slows down development.
