As developers, we're caught between keeping up with our internal stakeholders (operations, business, and data teams) and satisfying external end users. We spend a nontrivial amount of time maintaining our code to keep up with complex, ever-changing business logic.
Do we really need a code change for changing what triggers which user notifications or for updating how something gets named/logged in the database?
Unfortunately, maintaining code is also not considered valuable work. We're valued for pushing out new features, and keeping existing features up to date with changing business logic is considered short work.
To be great devs, we need to understand our users (including internal stakeholders) and our industry domain. But we also need a better way to empower business teams to control and manage the business logic, while clearing the runway for devs to build the next feature.
How has your team handled this?
A shitty PM sees problems like "when a guest at a hotel room completed {specific action X}, they want to receive a notification saying {specific message Y}".
A half decent PM will stop, step back, and ask "is there a meta-pattern here that I'm just not seeing yet", and realise the actual requirement is something like.
"When a guest at a hotel is the subject of any meaningful business event related to their booking, the management of the hotel want to be able to send them some kind of configurable, context-bound notification containing information about that event (ideally with some simple conditional logic to skip scenarios where the notification isn't relevant).
As an engineer, you're going to look at those two requirements fundamentally differently, and sure, the second one is maybe 3x harder to implement initially... But once you're 20x different "bespoke notification events" deep, you're gonna bloody wish you built the second option from day one.
Src: am Snr PM who sees teams get screwed by this type of bad PM thinking all the time.