Skip to content

Landscapes

One map says what we agreed. The other says what is running. Neither is interesting alone.

A context map with no system map behind it is a wish that survives because nothing contradicts it. A system map with no context map above it is a network diagram — true, and unable to tell you which of its arrows should not exist. Draw both against the same catalog and the third artefact appears for free: a list of the places where the estate has quietly stopped implementing the business.

Landscapes

Where they disagree

5 findings

Each one is a sentence about the business, not about the wiring. “Claims reads the live policy” is an integration detail; “a claim can be assessed against cover that was added after the loss” is the same fact stated so that somebody who can authorise the fix understands it.

  • legacy-policy-masterclaims-platform

    Drifts

    Observed: Claims queries the live policy tables 40,000 times a day. No snapshot table exists and no read is date-qualified.

    Should realise: Policy lifecycleClaims

    The anticorruption layer this relationship depends on has never been built. A mid-term endorsement silently changes the cover an open claim is assessed against. Highest-value fix in the estate: materialise a cover snapshot at notification and read only that.

  • legacy-policy-masteruw-workbench

    Unmapped

    Observed: A nightly renewal batch reads appetite rules straight out of the underwriting schema, bypassing the service.

    Should realise: nothing on the context map corresponds to this integration.

    No relationship on the context map corresponds to this. Either the renewal pre-screen belongs to Risk appetite and should be asking for it properly, or the appetite rules belong to Policy lifecycle. Deciding is a modelling question, not an integration one.

  • crmlegacy-policy-master

    Drifts

    Observed: Party records exported and matched on name and postcode. Match rate observed at 87%.

    Should realise: Party and relationshipsPolicy lifecycle

    A shared kernel implemented as an overnight fuzzy match is not a shared kernel. Either promote party identity to a real shared model with one identifier, or accept separate ways and stop pretending the two sides agree.

  • claims-platformbilling-saas

    Drifts

    Observed: Vendor field names appear in claims-platform source. The adapter is bypassed.

    Should realise: ClaimsBilling

    Conformist is the agreed pattern, so conforming is not the problem — bypassing the shared adapter is. The vendor vocabulary is now inside a core context, and a vendor upgrade becomes a core-domain change.

  • policy-servicedoc-gen

    Unobserved

    Observed: Nothing is collecting from doc-gen; this edge is asserted rather than observed.

    Should realise: Policy lifecycleDocuments

    Not a defect — an observability gap. Until the collector covers doc-gen, this row is somebody’s memory, and the conformance column for Documents stays "unknown".

The context map

Intent. The pattern column is the one that carries the information: customer/supplier and conformist describe the same arrow and differ only in whether the downstream team has any negotiating power, which is a political fact a generic “depends on” would hide. 9 of 9 catalogued contexts appear here.

UpstreamDownstreamPatternWhat crossesWhy this pattern
Product catalogueRatingOpen host serviceVersioned product definitions: covers, limits, exclusions and their compatibility rules.Product is consumed by five contexts with no two wanting the same shape. One published interface serving all of them is cheaper than five bespoke integrations, and it forces product to keep its language stable.
Product catalogueQuotationOpen host serviceThe same versioned product definitions, pinned to the version a quote was made against.A quote has to remain explicable after the product changes, so the version is part of what crosses the boundary rather than something resolved at read time.
Risk appetiteQuotationCustomer/supplierAn accepted Risk with its terms and any referral conditions attached.Both teams sit under the same director, so quotation can genuinely ask for a change to the upstream model and get it. That is what makes this customer/supplier rather than conformist.
RatingQuotationPublished languageA technical price with its rating factor breakdown and the rate table version used.The breakdown is read by quotation, by the regulator, and by the actuarial review. A published schema is the only version of this that survives three audiences.
QuotationPolicy lifecycleCustomer/supplierAn accepted offer, which becomes an inception.The handover where a commitment becomes an obligation. Policy administration is downstream and says so, but has a real say in the shape of what it receives.
Policy lifecycleClaimsAnticorruption layerA cover snapshot as at the date of loss — deliberately not the live policy.Claims must never see a policy change made after the loss. The layer exists to make that impossible rather than to make it unlikely, and it is currently the most-violated rule in the estate.
Party and relationshipsPolicy lifecycleShared kernelParty identity and the roles a party plays on a policy.A shared kernel because both contexts write to the same notion of identity and neither can be made downstream of the other without a lie. It is the most expensive pattern on this map and it is chosen knowingly.
Policy lifecycleBillingConformistPremium due, instalment plan, and any mid-term adjustment.The billing package will not change its model for us and we will not fork it, so downstream conforms. Recorded honestly as conformist rather than dressed up as customer/supplier.
ClaimsBillingConformistSettlement payments and recoveries.Same package, same trade-off.
Policy lifecycleDocumentsAnticorruption layerA render request: template identifier plus a payload in our language.The vendor template vocabulary is not ours and must not become ours. The adapter is small, boring and owned by us.
Risk appetiteRatingPartnershipAppetite signals that change the price, and prices that change the appetite.The only genuine partnership on the map: neither side can succeed if the other fails, and the two models are changed in the same conversation. Both report to a joint monthly review.

1 declared relationship has nothing observed behind it.Risk appetite → Quotation. Either the integration exists and the collector cannot see it, or the relationship was agreed and never built. The two have very different owners, and the map cannot tell them apart on its own.

The system map

Reality, across 9 systems: billing-saas, claims-platform, crm, doc-gen, legacy-policy-master, policy-service, product-service, rating-engine, uw-workbench. Every row carries the observation that produced it, so a reader who doubts one can go and check it — which is the difference between a map and a diagram.

FromToTransportEvidenceVerdict
product-servicerating-engineHTTP, versioned REST resourcesContinuous request traffic; every call carries an explicit product version.Matches
product-serviceuw-workbenchHTTP, versioned REST resourcesSame interface as rating-engine consumes; no bespoke endpoints observed.Matches
rating-engineuw-workbenchHTTP, published JSON schemaSchema in the registry matches the payloads on the wire; no undeclared fields.Matches
uw-workbenchpolicy-serviceDomain events on the brokerOfferAccepted consumed within seconds; inception created downstream.Matches
legacy-policy-masterclaims-platformShared database schema, direct readsClaims queries the live policy tables 40,000 times a day. No snapshot table exists and no read is date-qualified.Drifts
legacy-policy-masteruw-workbenchDatabase link, direct reads of the appetite tablesA nightly renewal batch reads appetite rules straight out of the underwriting schema, bypassing the service.Unmapped
crmlegacy-policy-masterNightly CSV exportParty records exported and matched on name and postcode. Match rate observed at 87%.Drifts
policy-servicebilling-saasHTTP, vendor API behind our adapterAll calls pass through the adapter; no vendor vocabulary observed upstream of it.Matches
claims-platformbilling-saasHTTP, vendor API, called directlyVendor field names appear in claims-platform source. The adapter is bypassed.Drifts
policy-servicedoc-genHTTP, adapter owned by usNothing is collecting from doc-gen; this edge is asserted rather than observed.Unobserved
uw-workbenchrating-engineHTTP, synchronousBidirectional traffic with rating-engine calling back for appetite context.Matches

Collection is not deployed yet, so the evidence column is a worked example of what the collector would write rather than what it has written. Thetools pagesays what it would take.