Post ·
The Missing Middle: Why Business Apps Shouldn't Point at Servers
Business applications wired straight to infrastructure skip the application service layer, and with it blast radius, ownership and business impact. Why it happens, how to find it, and how to fix it in order.


Open almost any configuration management database (CMDB) and you will find business applications pointed straight at servers. Application X, related to a virtual machine, a database instance and a load balancer. It looks like a dependency map. It is not one. It is a rumor with a foreign key.
The missing piece is the middle layer: the application service. In the Common Service Data Model (CSDM), a business application is the portfolio record — what the business calls the thing, who owns it, which capabilities it supports. The application service is the running deployment of it — production, test, the EU instance. Infrastructure hangs off the service, not the application.
The chain that should exist
Business capability
└─ Business application (portfolio: owner, lifecycle, capabilities)
└─ Application service (deployment: prod / test / region)
└─ Infrastructure (servers, databases, clusters)Skip the middle and the chain still renders. Every individual link is real. The shape is wrong, and the shape is what every downstream question depends on.
What breaks when the middle is missing
- Blast radius. A server goes down. Which deployment of which application is affected, production or the test copy someone forgot about? With a direct link the answer is "the application," which is to say, all of it, which is to say, nobody knows.
- Ownership. Ownership of a running service and ownership of a portfolio record are usually different people. Collapse them and incidents route to whoever owns the spreadsheet row.
- Business impact. Impact assessments and recovery tiers belong to the deployment. A test environment does not need the same recovery objective as production, but with no service record there is nowhere to say so.
- Rationalization. A disposition decision on an application has to reach its deployments to mean anything. Retire the application and the servers are still wired to it, cheerfully drawing power.
Every link is technically correct. The architecture is still wrong. That's the most dangerous kind of wrong, because it passes review.
Why it happens
Nobody sets out to build it this way. Discovery tools find infrastructure. Portfolio teams create applications. The service record is the one nobody's tool creates automatically, so someone draws the shortest line between the two records they have. It works. It ships. It becomes load-bearing. Convenience is not a design principle, but it is a very productive one.
How to find it
The query is simple: business applications with a direct relationship to an infrastructure class, and no application service in between. Two traps worth knowing before you trust the count:
- The class filter. Most application services live in a subclass of the base service table, not the base table itself. Query only the parent class with an exact match and you will conclude you have almost none. You have plenty. Your filter is just very confident.
- Relationship direction. Capability links read "provided by" one way and "provides" the other. Check both directions before declaring something orphaned.
In the CMDB console I built, direct application-to-infrastructure links are drawn dashed and red, the same way the two-capability check flags an application missing its technical lens. Making the anti-pattern visible did more than any policy memo. People fix what looks broken.
Fixing it without boiling the ocean
- Stop the bleeding. New applications go live with at least one application service. No service, no infrastructure relationships.
- Fix by criticality. Start with the applications that carry a recovery tier or support revenue. That is where an unanswerable blast-radius question costs the most.
- Insert, then rewire. Create the service, move the infrastructure relationships onto it, then remove the direct link. In that order, so nothing is orphaned mid-change.
- Measure the gap. Track the count of direct links as a data-quality metric. It should only go down.
Copy this: the check
CHECK: business application bound directly to infrastructure
FOR each business application A (operational):
direct = relationships from A to infrastructure classes
(server, database, cluster, load balancer, ...)
services = application services linked to A
(query the service class AND its subclasses)
IF direct is not empty:
flag A as "missing middle"
severity = high if A has a recovery tier, else medium
fix = create/choose an application service for each environment,
move infra relationships to the service, remove the direct link
REPORT count over time - it should only go down