El Transactional Outbox es la vía correcta si no quieres pasar vergüenza en producción. No es sobreingeniería, es la única forma de garantizar consistencia eventual sin acoplar el commit de BD con la publicación del evento. He visto fallos catastróficos por publicar antes del commit, y el outbox te salva de eso con un patrón simple: misma transacción para el pago y el evento, y un publicador que lee de la tabla. Para el equipo pequeño, no te cases con la pureza hexagonal: puedes usar una versión pragmática con una capa de aplicación y puertos solo para lo que realmente varía (pasarela, repositorio). Pero el outbox no lo negocies, aunque seas tres seniors, porque el día que cambies de broker o haya un fallo de red, te lo agradecerás.