%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'secondaryColor':'#f5f0ec', 'tertiaryColor':'#f0ece8', 'lineColor':'#9a96a0', 'fontFamily':'Poppins, system-ui, sans-serif', 'fontSize':'14px', 'fontWeight':'400' }}}%%
flowchart LR
%% ---- Styles ----
classDef flowApp fill:#3a3a4a,stroke:#5a5a6a,color:#ffffff
classDef library fill:#f5d4a8,stroke:#c4a876,color:#2d2d3c
classDef sunk fill:#f0b8b8,stroke:#d49898,color:#2d2d3c
classDef dashboard fill:#faf9f8,stroke:#c8c4c0,color:#2d2d3c
%% ---- Flow app nodes ----
firstFlow(First User Flow App Code)
secondFlow(Second User Flow App Code)
thirdFlow(Third User Flow App Code)
%% ---- Library nodes ----
NR(New Relic Library)
GA(Google Analytics Library)
SC(SiteCatalyst Analytics Library)
%% ---- Custom code (sunk) by platform ----
sunk1NR(Custom code to capture 1st flow)
sunk2NR(Custom code to capture 2nd flow)
sunk3NR(Custom code to capture 3rd flow)
sunk1GA(Custom code to capture 1st flow)
sunk2GA(Custom code to capture 2nd flow)
sunk3GA(Custom code to capture 3rd flow)
sunk1SC(Custom code to capture 1st flow)
sunk2SC(Custom code to capture 2nd flow)
sunk3SC(Custom code to capture 3rd flow)
%% ---- Dashboards by platform ----
dashboard1NR(New Relic Dashboard for 1st flow)
dashboard2NR(New Relic Dashboard for 2nd flow)
dashboard3NR(New Relic Dashboard for 3rd flow)
dashboard1GA(Google Analytics Dashboard for 1st flow)
dashboard2GA(Google Analytics Dashboard for 2nd flow)
dashboard3GA(Google Analytics Dashboard for 3rd flow)
dashboard1SC(SiteCatalyst Dashboard for 1st flow)
dashboard2SC(SiteCatalyst Dashboard for 2nd flow)
dashboard3SC(SiteCatalyst Dashboard for 3rd flow)
%% ---- Subgraphs: flow containers ----
subgraph Flow1
firstFlow
end
subgraph Flow2
secondFlow
end
subgraph Flow3
thirdFlow
end
%% ---- Subgraph: app code → custom code ----
subgraph Chaos[Repetitive and Custom Code]
firstFlow --> sunk1NR
firstFlow --> sunk1GA
firstFlow --> sunk1SC
secondFlow --> sunk2NR
secondFlow --> sunk2GA
secondFlow --> sunk2SC
thirdFlow --> sunk3NR
thirdFlow --> sunk3GA
thirdFlow --> sunk3SC
end
%% ---- Subgraphs: custom code → libraries ----
subgraph NewRelicPlatform[New Relic Platform]
sunk1NR --> NR
sunk2NR --> NR
sunk3NR --> NR
end
subgraph GoogleAnalyticsPlatform[Google Analytics Platform]
sunk1GA --> GA
sunk2GA --> GA
sunk3GA --> GA
end
subgraph SiteCatalystPlatform[SiteCatalyst Platform]
sunk1SC --> SC
sunk2SC --> SC
sunk3SC --> SC
end
%% ---- Subgraph: libraries → dashboards ----
subgraph ChaosDashboard[Custom Queries and Dashboards]
NR --> dashboard1NR
NR --> dashboard2NR
NR --> dashboard3NR
GA --> dashboard1GA
GA --> dashboard2GA
GA --> dashboard3GA
SC --> dashboard1SC
SC --> dashboard2SC
SC --> dashboard3SC
end
%% ---- Apply styles ----
class firstFlow,secondFlow,thirdFlow flowApp
class NR,GA,SC library
class sunk1NR,sunk2NR,sunk3NR,sunk1GA,sunk2GA,sunk3GA,sunk1SC,sunk2SC,sunk3SC sunk
class dashboard1NR,dashboard2NR,dashboard3NR,dashboard1GA,dashboard2GA,dashboard3GA,dashboard1SC,dashboard2SC,dashboard3SC dashboard
Why Stratum?
What’s the difference?
Without Stratum, every user flow is wired to every observability platform by hand. More flows and more platforms mean more of everything: more custom integration code, more dashboards, and more connections to maintain. Add one new flow and you add work for every platform. Add one new platform and you add work for every flow. The work grows quickly.
With Stratum, all flows go through one integration layer, and that layer connects to each platform through a single plugin. Add a new flow and you add one connection into Stratum. Add a new platform and you add one plugin. The work grows slowly and in one place.
Same idea, in numbers
If you have F user flows and P observability platforms:
Without Stratum you get on the order of O(F × P) of each: custom integration code, dashboards, and connections. Adding one flow means P new connections; adding one platform means F new connections.
With Stratum you get on the order of O(F + P): F flows into Stratum, then P plugins to platforms. One new flow is one new connection; one new platform is one new plugin.
So the first diagram scales like flows × platforms; the second scales like flows + platforms.
In one picture
Without Stratum
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'lineColor':'#9a96a0' }}}%% flowchart LR subgraph mult[flows × platforms] direction LR f1((flow 1)) f2((flow 2)) f3((flow 3)) p1((platform 1)) p2((platform 2)) p3((platform 3)) f1 --> p1 f1 --> p2 f1 --> p3 f2 --> p1 f2 --> p2 f2 --> p3 f3 --> p1 f3 --> p2 f3 --> p3 endWith Stratum
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'lineColor':'#9a96a0' }}}%% flowchart LR subgraph add[flows + platforms] direction LR fa1((flow 1)) fa2((flow 2)) fa3((flow 3)) S[Stratum] pa1((platform 1)) pa2((platform 2)) pa3((platform 3)) fa1 --> S fa2 --> S fa3 --> S S --> pa1 S --> pa2 S --> pa3 end(Mermaid can’t go inside a standard Markdown table—cells can’t contain multi-line blocks. Using the PNGs above is the reliable way to get two diagrams side by side.)
What I've seen in the wild
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'secondaryColor':'#f5f0ec', 'tertiaryColor':'#f0ece8', 'lineColor':'#9a96a0', 'fontFamily':'Poppins, system-ui, sans-serif', 'fontSize':'14px', 'fontWeight':'400' }}}%% flowchart LR %% ---- Styles ---- classDef flowApp fill:#3a3a4a,stroke:#5a5a6a,color:#ffffff classDef library fill:#f5d4a8,stroke:#c4a876,color:#2d2d3c classDef sunk fill:#f0b8b8,stroke:#d49898,color:#2d2d3c classDef dashboard fill:#faf9f8,stroke:#c8c4c0,color:#2d2d3c %% ---- Flow app nodes ---- firstFlow(First User Flow App Code) secondFlow(Second User Flow App Code) thirdFlow(Third User Flow App Code) %% ---- Library nodes ---- NR(New Relic Library) GA(Google Analytics Library) SC(SiteCatalyst Analytics Library) %% ---- Custom code (sunk) by platform ---- sunk1NR(Custom code to capture 1st flow) sunk2NR(Custom code to capture 2nd flow) sunk3NR(Custom code to capture 3rd flow) sunk1GA(Custom code to capture 1st flow) sunk2GA(Custom code to capture 2nd flow) sunk3GA(Custom code to capture 3rd flow) sunk1SC(Custom code to capture 1st flow) sunk2SC(Custom code to capture 2nd flow) sunk3SC(Custom code to capture 3rd flow) %% ---- Dashboards by platform ---- dashboard1NR(New Relic Dashboard for 1st flow) dashboard2NR(New Relic Dashboard for 2nd flow) dashboard3NR(New Relic Dashboard for 3rd flow) dashboard1GA(Google Analytics Dashboard for 1st flow) dashboard2GA(Google Analytics Dashboard for 2nd flow) dashboard3GA(Google Analytics Dashboard for 3rd flow) dashboard1SC(SiteCatalyst Dashboard for 1st flow) dashboard2SC(SiteCatalyst Dashboard for 2nd flow) dashboard3SC(SiteCatalyst Dashboard for 3rd flow) %% ---- Subgraphs: flow containers ---- subgraph Flow1 firstFlow end subgraph Flow2 secondFlow end subgraph Flow3 thirdFlow end %% ---- Subgraph: app code → custom code ---- subgraph Chaos[Repetitive and Custom Code] firstFlow --> sunk1NR firstFlow --> sunk1GA firstFlow --> sunk1SC secondFlow --> sunk2NR secondFlow --> sunk2GA secondFlow --> sunk2SC thirdFlow --> sunk3NR thirdFlow --> sunk3GA thirdFlow --> sunk3SC end %% ---- Subgraphs: custom code → libraries ---- subgraph NewRelicPlatform[New Relic Platform] sunk1NR --> NR sunk2NR --> NR sunk3NR --> NR end subgraph GoogleAnalyticsPlatform[Google Analytics Platform] sunk1GA --> GA sunk2GA --> GA sunk3GA --> GA end subgraph SiteCatalystPlatform[SiteCatalyst Platform] sunk1SC --> SC sunk2SC --> SC sunk3SC --> SC end %% ---- Subgraph: libraries → dashboards ---- subgraph ChaosDashboard[Custom Queries and Dashboards] NR --> dashboard1NR NR --> dashboard2NR NR --> dashboard3NR GA --> dashboard1GA GA --> dashboard2GA GA --> dashboard3GA SC --> dashboard1SC SC --> dashboard2SC SC --> dashboard3SC end %% ---- Apply styles ---- class firstFlow,secondFlow,thirdFlow flowApp class NR,GA,SC library class sunk1NR,sunk2NR,sunk3NR,sunk1GA,sunk2GA,sunk3GA,sunk1SC,sunk2SC,sunk3SC sunk class dashboard1NR,dashboard2NR,dashboard3NR,dashboard1GA,dashboard2GA,dashboard3GA,dashboard1SC,dashboard2SC,dashboard3SC dashboardWith Stratum
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'secondaryColor':'#f5f0ec', 'tertiaryColor':'#f0ece8', 'lineColor':'#9a96a0', 'fontFamily':'Poppins, system-ui, sans-serif', 'fontSize':'14px', 'fontWeight':'400' }}}%% flowchart LR %% ---- Styles ---- classDef flowApp fill:#3a3a4a,stroke:#5a5a6a,color:#ffffff classDef library fill:#f5d4a8,stroke:#c4a876,color:#2d2d3c classDef sunk fill:#f0b8b8,stroke:#d49898,color:#2d2d3c classDef dashboard fill:#faf9f8,stroke:#c8c4c0,color:#2d2d3c %% ---- Flow app nodes ---- firstFlow(First User Flow App Code) secondFlow(Second User Flow App Code) thirdFlow(Third User Flow App Code) %% ---- New Relic ------ NewRelicLibrary(New Relic Library) NewRelicPlatform(New Relic Platform) %% ---- Google Analytics ------ GoogleAnalyticsLibrary(Google Analytics Library) GoogleAnalyticsPlatform(Google Analytics Platform) %% ---- SiteCatalyst ------ SiteCatalystLibrary(SiteCatalyst Library) SiteCatalystPlatform(SiteCatalyst Platform) %% ---- Enterprise Specific ------- EnterpriseSpecificLibrary(Enterprise Specific Library) EnterpriseSpecificPlatform(Enterprise Specific Platform) %% ---- Stratum ------ StratumLibrary(Stratum Library) StratumPluginNewRelic(Stratum Plugin for New Relic) StratumPluginGoogleAnalytics(Stratum Plugin for Google Analytics) StratumPluginSiteCatalyst(Stratum Plugin for SiteCatalyst) StratumPluginEnterpriseSpecific(Stratum Plugin for Enterprise) subgraph AppCodeFlow firstFlow secondFlow thirdFlow end subgraph StratumFlow firstFlow --> StratumLibrary secondFlow --> StratumLibrary thirdFlow --> StratumLibrary StratumLibrary --> StratumPluginNewRelic StratumLibrary --> StratumPluginGoogleAnalytics StratumLibrary --> StratumPluginSiteCatalyst StratumLibrary --> StratumPluginEnterpriseSpecific end subgraph GoogleAnalyticsFlow StratumPluginGoogleAnalytics --> GoogleAnalyticsLibrary GoogleAnalyticsLibrary --> GoogleAnalyticsPlatform end subgraph SiteCatalystFlow StratumPluginSiteCatalyst --> SiteCatalystLibrary SiteCatalystLibrary --> SiteCatalystPlatform end subgraph EnterpriseSpecificFlow StratumPluginEnterpriseSpecific --> EnterpriseSpecificLibrary EnterpriseSpecificLibrary --> EnterpriseSpecificPlatform end subgraph NewRelicFlow StratumPluginNewRelic --> NewRelicLibrary NewRelicLibrary --> NewRelicPlatform end %% ---- Apply styles ---- class firstFlow,secondFlow,thirdFlow flowApp class NR,GA,SC library class sunk1NR,sunk2NR,sunk3NR,sunk1GA,sunk2GA,sunk3GA,sunk1SC,sunk2SC,sunk3SC sunk class dashboard1NR,dashboard2NR,dashboard3NR,dashboard1GA,dashboard2GA,dashboard3GA,dashboard1SC,dashboard2SC,dashboard3SC dashboard