Payments welded to the stay reservation
Airbnb’s payments began inside the monolithic Ruby on Rails application, and the logic was tightly coupled to stay reservations — the original product. That coupling was invisible until Airbnb became more than stays. Every new product that needed to move money — Experiences, the Resolution Center — required its own separate implementation of payment functionality, because the existing one only knew how to pay for a stay.
The result was an approach the team describes as lacking scalability and maintainability: payment behavior duplicated per product, each copy carrying its own risk, none of them a shared platform.