For good or bad, I do "custom business applications" for a living. This is intended to be a topic about how to better manage the complexity of such applications. I do not intend it to be a bitching session about the "quality of life" issues in corporations, but rather dealing with software issues within the Dilbertian reality.
Characteristics of custom biz apps:
The seems to be way at the other end of the spectrum from some of the embedded stuff I do, but I have had to solve all these same problems in higher level scenarios.
I am reminded of a StateMachine design. The application has a few clearly defined flows, and several other marketing-driven quirks. The way this hodge-podge of requirements gets serviced is from an event queue. Because of limitations in memory and storage, there's no viable way to route an event to "just the routine(s) that need it."
Instead, the state machine pulls an event from the queue and posts it globally after which every module of the system gets a whack at it. Each major function is called and examines the event and attributes. If it needs to deal with it, it executes its schtick and returns, and the next function in line gets a stab.
It's almost like a logical "bus" where the event is placed on the "bus" and the various logical "devices" examine the event and do appropriate things.
What this has done is establish a context where new (and capricious) functional requirements can be implemented. Silly as it sounds, when you tell the requesting department, "your event will be seen by the entire application and must play nice with others or we can't allow it," it changes the way they approach it.
It's quite messy, rather like a room full of traders all clamoring their desires, but departments form truces to achieve goals that avoid mutual harm.
I wonder how much of this parallels your outline above. -- GarryHamilton
It helps if management can get the developers to agree upon an ApplicationDesignManifesto.
See also: AreBusinessAppsBoring