Where this is possible Codeception uses the Observer pattern to separate different parts of framework and make them act independently.
Events are defined in Codeception\Event
). New features can be added seamlessly when they are created in Subscribers.