This episode of the M365.FM Podcast — “Architecting Scalable SharePoint Automation” — explains why automation in SharePoint often fails to scale from initial wins to widespread enterprise value. The core insight is that many organizations build SharePoint workflows and automations with a tactical mindset—focusing on isolated tasks—rather than a scalable architecture that governs how automation operates, persists, and interacts with people, data, and other systems over time. Without clearly defined identity boundaries, execution contracts, lifecycle governance, and persistent context, automation programs devolve into unmanaged sprawl, permission creep, and fragile outcomes that break easily and are difficult to support. The episode outlines architectural principles that make automation sustainable at scale, including treating automation as products with owners, enforcing execution constraints, grounding actions in authoritative data, and measuring outcomes instead of activity. The result is automation that is predictable, auditable, resilient, and aligned with organizational intent.
🧠 Core Theme
SharePoint automation fails at scale when built tactically rather than architecturally.
Scalable automation requires a control plane that governs identity, execution, data grounding, lifecycle, and context.
Without architectural discipline, automation causes permission creep, inconsistent outcomes, and hidden risk.
Why SharePoint Automation Breaks
🔹 1. Tactical vs. Architectural Design
Many automation projects begin as point solutions to solve immediate needs.
Quick wins are essential, but unless framed within an architectural strategy, they accumulate into chaos.
Isolated automations lack shared constraints and governance — leading to inconsistency and technical debt.
🔹 2. Identity Ambiguity
Automations often run under shared accounts or generic principals.
Without scoped, non-human identities:
Actions cannot be attributed
Audits become narrative debates
Containment and rollback become impossible
Identity clarity is critical for accountability and governance.
🔹 3. Execution Without Contracts
Automations execute without defined constraints on:
What they can do
Under what conditions
How escalation is handled
Lack of execution contracts yields unpredictable results and fragile processes.
Execution contracts turn automation from permission into predictable behavior.
🔹 4. Grounding on Unmanaged Data
Many SharePoint automations act on unmanaged or inconsistent content sources.
Automation grounded on unverified or uncontrolled data produces unreliable outcomes.
Authoritative grounding ensures actions align with business context.
🔹 5. Lifecycle Neglect
Automations are deployed and forgotten.
Without lifecycle governance — including versioning, retirement, and review — outdated automations persist and fail silently.
Architectural Principles for Scalable Automation
A scalable automation architecture for SharePoint must include several essential layers:
🛡️ Identity & Authorization
Assign each automation a unique, least-privilege identity.
Identity enables:
Clear audit trails
Responsible ownership
Controlled rollback
Avoid shared or overly broad permissions.
Identity is the first anchor of governance.
🔒 Execution Contracts
Contracts define:
Permitted actions
Required conditions and constraints
Escalation rules
Inputs and outputs
Contracts convert ad-hoc workflows into controlled processes with predictable outcomes.
📍 Grounding in SharePoint Data Hierarchies
Automations must rely on governed data sources such as:
Managed metadata
Sensitivity labels
Document libraries with enforced policies
Distinguish between readable data vs. data agents may act upon.
Grounding builds trust and consistency.
⏱️ Lifecycle Governance
Define lifecycle policies covering:
Creation and ownership
Versioning and change control
Scheduled review
Decommissioning and retirement
Lifecycle governance prevents drift and technical debt accumulation.
🔄 Persistent Context
Preserve context across workflow steps, not just within isolated runs.
Persistent context includes:
Workflow state
Identity and role
Constraints and policies
Provenance and evidence
Context continuity turns automations into dependable services.
Practical Design Patterns
📌 Reusable Action Libraries
Abstract common actions into reusable modules with:
Defined contracts
Stable APIs
Versioning
Reusable libraries reduce duplication and inconsistency.
📌 Event-Driven Orchestration
Build automation that reacts to events rather than schedule-only jobs.
Events provide precise triggers and reduce trigger conflict or overlap.
📌 Human-In-Loop Automation
Not all workflows should run fully automated.
For high-risk operations, define:
Approval steps
Escalation paths
Human checkpoints improve safety and acceptance.
Metrics That Matter
Meaningful performance indicators focus on outcomes and risk, not activity:
🎯 Outcome Metrics
Task completion rates
Time saved per workflow
SLA improvement
Reduction in manual steps
🛡 Governance & Risk Metrics
Identity attribution rate
Permission drift occurrences
Execution contract violations
Audit readiness scores
💰 Efficiency Metrics
Cost per completed task
Resource usage efficiency
Reduction in error rework
Meaningful metrics ensure automation delivers business value and maintains operational safety.
Why Architectural Automation Matters
It makes automation predictable at scale.
It enables auditability and compliance.
It reduces risk by enforcing policies at runtime.
It aligns automation with business outcomes, not isolated feature execution.
Without an architectural approach, automation becomes fragile, hidden, and costly.
Leadership Implications
🧠 Govern Automation as a Product
Each automation should have:
Assigned sponsor and owner
Clear users
Measurable KPIs
Defined lifecycle
Treat automations like products, not disposable scripts.
🛡 Governance Must Be Operational
Policies are only effective when enforced at runtime through:
Execution contracts
Identity boundaries
Drift monitoring
🚀 Constraints Enable Scale
Governance does not stifle innovation — it provides safe boundaries for growth.
Constraints transform ad-hoc efforts into enterprise automation capability.
Key Takeaways
SharePoint automation fails when built tactically without an architecture.
A scalable automation architecture includes:
Identity and accounts with least privilege
Execution contracts
Grounding in authoritative data
Lifecycle governance
Persistent context
Meaningful metrics measure outcomes and risk, not activity.
Treat automation as a governed product to avoid sprawl and drift.
1
00:00:00,000 --> 00:00:02,400
Most organizations assume SharePoint automation scales
2
00:00:02,400 --> 00:00:04,040
because it's in the platform.
3
00:00:04,040 --> 00:00:06,240
They are wrong, the UI makes it feel small,
4
00:00:06,240 --> 00:00:08,160
one library, one button, one approval,
5
00:00:08,160 --> 00:00:09,440
but the moment you automate,
6
00:00:09,440 --> 00:00:11,360
you've built an enterprise control plane
7
00:00:11,360 --> 00:00:14,240
that executes decisions, changes permissions,
8
00:00:14,240 --> 00:00:16,880
and moves data across compliance boundaries.
9
00:00:16,880 --> 00:00:20,080
In the next hour, this becomes obvious.
10
00:00:20,080 --> 00:00:22,120
How quick steps, workflows, and agents
11
00:00:22,120 --> 00:00:23,600
actually behave at scale,
12
00:00:23,600 --> 00:00:27,240
and how identity, labels, DLP and observability,
13
00:00:27,240 --> 00:00:30,080
either enforced intent, or let entropy win.
14
00:00:30,080 --> 00:00:32,880
Stop thinking features, start thinking systems.
15
00:00:32,880 --> 00:00:34,520
The foundational misunderstanding,
16
00:00:34,520 --> 00:00:37,360
SharePoint is a workflow surface, not a repository.
17
00:00:37,360 --> 00:00:39,520
The foundational mistake is treating SharePoint
18
00:00:39,520 --> 00:00:41,520
like a place where files live.
19
00:00:41,520 --> 00:00:44,560
Architecturally, SharePoint is a workflow surface.
20
00:00:44,560 --> 00:00:47,840
Content plus metadata plus permissions plus policy,
21
00:00:47,840 --> 00:00:50,520
all sitting in front of a distributed execution engine.
22
00:00:50,520 --> 00:00:53,160
That sounds abstract, but it explains almost every,
23
00:00:53,160 --> 00:00:54,720
we didn't expect that incident
24
00:00:54,720 --> 00:00:56,400
an enterprise has with automation.
25
00:00:56,400 --> 00:00:59,240
Document library is not a folder tree with version history.
26
00:00:59,240 --> 00:01:00,320
It's an event source.
27
00:01:00,320 --> 00:01:03,880
Every upload, edit, metadata update, approval change,
28
00:01:03,880 --> 00:01:06,120
sharing link and access request is a signal
29
00:01:06,120 --> 00:01:08,080
you can wire into power automate,
30
00:01:08,080 --> 00:01:10,840
graph subscriptions, logic apps, functions,
31
00:01:10,840 --> 00:01:12,480
or an agent experience.
32
00:01:12,480 --> 00:01:15,240
The second you do that, the blast radius changes.
33
00:01:15,240 --> 00:01:17,360
A simple flow isn't just sending an email,
34
00:01:17,360 --> 00:01:19,640
it's now an integration between identity policy
35
00:01:19,640 --> 00:01:21,480
and data movement running at machine speed
36
00:01:21,480 --> 00:01:24,640
without the human friction that used to slow mistakes down.
37
00:01:24,640 --> 00:01:26,800
This is why automation sprawl is inevitable
38
00:01:26,800 --> 00:01:28,280
if you don't design for it.
39
00:01:28,280 --> 00:01:30,440
SharePoint makes it easy to add triggers.
40
00:01:30,440 --> 00:01:32,520
Teams makes it easy to add notifications.
41
00:01:32,520 --> 00:01:34,720
Power automate makes it easy to glue it together.
42
00:01:34,720 --> 00:01:37,120
And then the organization wakes up six months later
43
00:01:37,120 --> 00:01:39,080
with three versions of the same approval,
44
00:01:39,080 --> 00:01:41,320
seven different notify the channel workflows
45
00:01:41,320 --> 00:01:44,200
and an unspoken rule that nobody touches the flows
46
00:01:44,200 --> 00:01:46,400
because nobody knows which business process will break.
47
00:01:46,400 --> 00:01:47,520
That's not a tooling failure.
48
00:01:47,520 --> 00:01:49,960
That's what happens when execution grows faster than intent.
49
00:01:49,960 --> 00:01:51,400
Now layer in the new reality,
50
00:01:51,400 --> 00:01:54,480
deterministic automation versus probabilistic automation.
51
00:01:54,480 --> 00:01:56,320
Deterministic automation is the old model.
52
00:01:56,320 --> 00:01:58,400
The system follows explicit rules.
53
00:01:58,400 --> 00:02:01,280
If a file enters this library, set metadata,
54
00:02:01,280 --> 00:02:03,720
if status becomes approved, move it.
55
00:02:03,720 --> 00:02:07,160
If label equals confidential, block external sharing,
56
00:02:07,160 --> 00:02:10,280
boring, predictable, auditable.
57
00:02:10,280 --> 00:02:12,840
The kind of automation you can defend in an incident review
58
00:02:12,840 --> 00:02:15,880
because you can point to inputs, outputs, and logs.
59
00:02:15,880 --> 00:02:18,360
Probabilistic automation is the agent model.
60
00:02:18,360 --> 00:02:21,760
An agent reads context in first meaning chooses a next action
61
00:02:21,760 --> 00:02:23,560
and may do different things for two files
62
00:02:23,560 --> 00:02:25,120
that look similar to a human.
63
00:02:25,120 --> 00:02:26,240
The system becomes helpful,
64
00:02:26,240 --> 00:02:28,880
but you've traded a rules engine for a reasoning engine.
65
00:02:28,880 --> 00:02:31,200
That distinction matters because governance mechanisms
66
00:02:31,200 --> 00:02:32,880
designed for deterministic flows
67
00:02:32,880 --> 00:02:35,640
don't automatically constrain probabilistic decisioning.
68
00:02:35,640 --> 00:02:37,320
They just make you feel like they do.
69
00:02:37,320 --> 00:02:39,920
So SharePoint isn't becoming smarter automation.
70
00:02:39,920 --> 00:02:43,120
It's becoming a place where decisions happen closer to the data.
71
00:02:43,120 --> 00:02:44,040
That's powerful.
72
00:02:44,040 --> 00:02:46,440
It's also how organizations accidentally build
73
00:02:46,440 --> 00:02:48,320
a parallel IT estate.
74
00:02:48,320 --> 00:02:50,600
Thousands of micro workflows embedded in sites,
75
00:02:50,600 --> 00:02:53,360
lists, libraries, chats, and personal environments,
76
00:02:53,360 --> 00:02:54,560
each one seems harmless.
77
00:02:54,560 --> 00:02:57,160
Collectively, they form an authorization graph
78
00:02:57,160 --> 00:02:59,680
and an execution graph you didn't model, didn't test,
79
00:02:59,680 --> 00:03:01,120
and can't explain to an auditor.
80
00:03:01,120 --> 00:03:03,520
This is where the workflow surface idea clicks.
81
00:03:03,520 --> 00:03:05,320
SharePoint is the user-facing layer
82
00:03:05,320 --> 00:03:08,280
where business intent gets translated into machine action.
83
00:03:08,280 --> 00:03:10,040
Quick steps turn a column into a button,
84
00:03:10,040 --> 00:03:12,600
approvals turn a pill-shaped status into a gate.
85
00:03:12,600 --> 00:03:14,440
Integrated workflow UX turns,
86
00:03:14,440 --> 00:03:17,280
I'm in this library, into pre-wired connectors and templates.
87
00:03:17,280 --> 00:03:19,360
And because it's in context, people use it more.
88
00:03:19,360 --> 00:03:22,480
Usage goes up, volume goes up, variance goes up,
89
00:03:22,480 --> 00:03:24,480
and variance is where scale dies.
90
00:03:24,480 --> 00:03:26,200
Because what scales isn't a flow?
91
00:03:26,200 --> 00:03:27,360
What scales is a pattern?
92
00:03:27,360 --> 00:03:29,920
Consistent eventing, consistent identity boundaries,
93
00:03:29,920 --> 00:03:31,560
consistent data classification,
94
00:03:31,560 --> 00:03:34,120
consistent enforcement, and consistent observability.
95
00:03:34,120 --> 00:03:35,720
Without that, you don't have automation,
96
00:03:35,720 --> 00:03:37,040
you have conditional chaos.
97
00:03:37,040 --> 00:03:38,680
Here's the uncomfortable truth.
98
00:03:38,680 --> 00:03:41,720
If you let SharePoint automation evolve organically,
99
00:03:41,720 --> 00:03:43,360
you will eventually lose the ability
100
00:03:43,360 --> 00:03:44,920
to answer basic questions.
101
00:03:44,920 --> 00:03:46,280
Who can trigger this action?
102
00:03:46,280 --> 00:03:47,960
Which identity performs the right?
103
00:03:47,960 --> 00:03:49,480
Where does the data go next?
104
00:03:49,480 --> 00:03:50,800
What policy was evaluated?
105
00:03:50,800 --> 00:03:52,800
What evidence exists that it happened correctly?
106
00:03:52,800 --> 00:03:54,920
If you can't answer those, you are not operating
107
00:03:54,920 --> 00:03:56,120
a workflow platform.
108
00:03:56,120 --> 00:03:57,400
You are operating a rumor.
109
00:03:57,400 --> 00:03:59,520
So the goal of this blueprint is not to teach buttons
110
00:03:59,520 --> 00:04:00,520
or templates.
111
00:04:00,520 --> 00:04:03,360
It's to define the building blocks before you choose tools.
112
00:04:03,360 --> 00:04:06,840
What SharePoint emits as events, how decisions should be made,
113
00:04:06,840 --> 00:04:08,120
where orchestration should live,
114
00:04:08,120 --> 00:04:11,120
and how enforcement survives human creativity.
115
00:04:11,120 --> 00:04:12,520
Once that model is clear,
116
00:04:12,520 --> 00:04:15,360
Quick steps and agents stop being cool features.
117
00:04:15,360 --> 00:04:17,320
They become controlled interfaces to a system
118
00:04:17,320 --> 00:04:18,600
you can actually run.
119
00:04:18,600 --> 00:04:22,080
The modern automation stack Quick steps approvals flows agents.
120
00:04:22,080 --> 00:04:24,680
SharePoint's modern automation stack looks simple
121
00:04:24,680 --> 00:04:27,160
because Microsoft intentionally hit the wiring.
122
00:04:27,160 --> 00:04:28,200
That's the selling point.
123
00:04:28,200 --> 00:04:29,080
It's also the risk.
124
00:04:29,080 --> 00:04:31,480
So the only sane way to talk about Quick steps,
125
00:04:31,480 --> 00:04:35,040
approvals workflows and agents is this layers of the same system.
126
00:04:35,040 --> 00:04:37,640
An action surface, a gate, an orchestration engine,
127
00:04:37,640 --> 00:04:40,520
and an interface that pretends it isn't an interface.
128
00:04:40,520 --> 00:04:43,080
Start with Quick steps.
129
00:04:43,080 --> 00:04:45,000
Quick steps are the Ingrid action layer.
130
00:04:45,000 --> 00:04:47,800
Repeatable actions exposed where the work happens.
131
00:04:47,800 --> 00:04:50,000
Directly on list items and files.
132
00:04:50,000 --> 00:04:52,520
People used to do this with custom column formatting
133
00:04:52,520 --> 00:04:53,520
and JSON buttons.
134
00:04:53,520 --> 00:04:55,560
Now it's a first class column type.
135
00:04:55,560 --> 00:04:57,840
And it matters because the grid is where users live.
136
00:04:57,840 --> 00:05:00,240
If an action sits in the ribbon, it's optional.
137
00:05:00,240 --> 00:05:03,560
If it sits next to the file, it becomes the way we do things.
138
00:05:03,560 --> 00:05:06,280
The simple version is Quick steps remove friction.
139
00:05:06,280 --> 00:05:07,880
They also remove deliberation.
140
00:05:07,880 --> 00:05:10,040
A Quick step can set a value, move a file,
141
00:05:10,040 --> 00:05:11,880
draft an email, start a team's chat,
142
00:05:11,880 --> 00:05:14,960
and this is the one that changes the game, execute a flow.
143
00:05:14,960 --> 00:05:17,840
And Microsoft explicitly called out that execute flow quick steps
144
00:05:17,840 --> 00:05:20,160
don't have to be constrained to the default environment.
145
00:05:20,160 --> 00:05:22,920
That means the button in the library can trigger automation.
146
00:05:22,920 --> 00:05:25,200
You're not even mentally associating with that site.
147
00:05:25,200 --> 00:05:28,480
That distinction matters because you're no longer governing flows.
148
00:05:28,480 --> 00:05:30,160
You're governing invocation points.
149
00:05:30,160 --> 00:05:32,360
Next layer, lightweight approvals.
150
00:05:32,360 --> 00:05:34,600
These approvals live in the list or library
151
00:05:34,600 --> 00:05:36,800
presented as a pill-shaped status column.
152
00:05:36,800 --> 00:05:39,080
Admin's or owners can enable them with a toggle
153
00:05:39,080 --> 00:05:40,800
and then define default approvals.
154
00:05:40,800 --> 00:05:42,760
They can even stage and sequence those approvals.
155
00:05:42,760 --> 00:05:45,200
So the approval happens in an assigned order.
156
00:05:45,200 --> 00:05:46,600
The UX feels harmless.
157
00:05:46,600 --> 00:05:47,440
Click Submit.
158
00:05:47,440 --> 00:05:50,240
A team's notification goes out and the status updates.
159
00:05:50,240 --> 00:05:52,560
But architecturally, you've just created a state machine
160
00:05:52,560 --> 00:05:53,760
embedded in metadata.
161
00:05:53,760 --> 00:05:54,600
And that's the value.
162
00:05:54,600 --> 00:05:56,760
It keeps the workflow state with the item,
163
00:05:56,760 --> 00:05:58,960
instead of scattering it across email threads,
164
00:05:58,960 --> 00:06:01,080
teams chats, and personal spreadsheets.
165
00:06:01,080 --> 00:06:03,840
It also creates a consistent governance surface.
166
00:06:03,840 --> 00:06:06,680
Approval requested, pending, approved, rejected.
167
00:06:06,680 --> 00:06:09,280
That's something you can audit, something you can query,
168
00:06:09,280 --> 00:06:10,920
something you can enforce downstream.
169
00:06:10,920 --> 00:06:14,240
But don't confuse, built in with enterprise grade by default.
170
00:06:14,240 --> 00:06:17,320
Approval routing still depends on identity and permissions.
171
00:06:17,320 --> 00:06:20,080
Approval selection still creates an implicit authorization
172
00:06:20,080 --> 00:06:20,680
model.
173
00:06:20,680 --> 00:06:22,760
And the moment someone asks for exceptions,
174
00:06:22,760 --> 00:06:25,560
this library needs a different approver for this client,
175
00:06:25,560 --> 00:06:28,680
or skip step two if it's under $5,000.
176
00:06:28,680 --> 00:06:31,320
You're back to the same question, where does branching logic
177
00:06:31,320 --> 00:06:32,800
live and who owns it?
178
00:06:32,800 --> 00:06:35,040
Now the workflows, UX-spont Microsoft
179
00:06:35,040 --> 00:06:37,040
is bringing the workflows app-style experience
180
00:06:37,040 --> 00:06:40,040
into SharePoint, templates, and a build from scratch path,
181
00:06:40,040 --> 00:06:42,680
directly in the context of a list or library.
182
00:06:42,680 --> 00:06:45,120
The selling point is that connections are pre-configured.
183
00:06:45,120 --> 00:06:47,760
It already knows where you are, what the list is,
184
00:06:47,760 --> 00:06:48,920
what the trigger should be.
185
00:06:48,920 --> 00:06:51,640
So makers don't have to do the sign-in, pick-side,
186
00:06:51,640 --> 00:06:54,320
pick-library dance that convenience is not cosmetic.
187
00:06:54,320 --> 00:06:55,840
It's an acceleration mechanism.
188
00:06:55,840 --> 00:06:57,440
More people can build automations.
189
00:06:57,440 --> 00:06:58,800
More automations will exist.
190
00:06:58,800 --> 00:07:01,000
And more of them will be created by the people
191
00:07:01,000 --> 00:07:03,880
least equipped to think about blast radius, error handling,
192
00:07:03,880 --> 00:07:04,880
and long-term ownership.
193
00:07:04,880 --> 00:07:06,400
That's not a criticism of makers.
194
00:07:06,400 --> 00:07:09,080
That's the predictable outcome of lowering the barrier.
195
00:07:09,080 --> 00:07:11,000
Also, the templates are Microsoft provided,
196
00:07:11,000 --> 00:07:13,280
and you can't necessarily modify the internal structure
197
00:07:13,280 --> 00:07:13,880
of a template.
198
00:07:13,880 --> 00:07:14,520
So what happens?
199
00:07:14,520 --> 00:07:16,920
People start from scratch when the template doesn't fit.
200
00:07:16,920 --> 00:07:19,560
And start from scratch is where abstraction ends
201
00:07:19,560 --> 00:07:21,720
and flow complexity begins.
202
00:07:21,720 --> 00:07:25,600
Loops, parallel branches, throttling, connector limits,
203
00:07:25,600 --> 00:07:27,920
and those quiet failures nobody notices
204
00:07:27,920 --> 00:07:31,320
until finance asks why invoices didn't move for three days.
205
00:07:31,320 --> 00:07:32,720
Now, the agent layer.
206
00:07:32,720 --> 00:07:35,840
Every SharePoint site effectively gains
207
00:07:35,840 --> 00:07:37,640
an agent-shaped interface,
208
00:07:37,640 --> 00:07:39,360
a site-specific knowledge surface
209
00:07:39,360 --> 00:07:43,040
that can answer questions grounded in what the user can access.
210
00:07:43,040 --> 00:07:44,440
Then you get higher-order patterns,
211
00:07:44,440 --> 00:07:47,000
a knowledge agent that helps curate, tag, and structure
212
00:07:47,000 --> 00:07:49,760
content, and an admin agent that watches for oversharing
213
00:07:49,760 --> 00:07:51,720
inactive sites and permissions brawl.
214
00:07:51,720 --> 00:07:53,600
Agents are not the automation engine.
215
00:07:53,600 --> 00:07:55,560
They are the front door to the automation engine.
216
00:07:55,560 --> 00:07:58,200
They turn, "I need to do a thing into a guided action
217
00:07:58,200 --> 00:08:00,560
or a triggered workflow or a routed approval,"
218
00:08:00,560 --> 00:08:03,000
which is great until you treat them as the back end.
219
00:08:03,000 --> 00:08:03,520
Don't.
220
00:08:03,520 --> 00:08:04,880
The agent is where humans ask.
221
00:08:04,880 --> 00:08:07,720
Deterministic orchestration is where the enterprise executes.
222
00:08:07,720 --> 00:08:11,040
So the modern stack is coherent if you see it as one pipeline.
223
00:08:11,040 --> 00:08:13,680
Quick steps and workflows provide the user's handholds,
224
00:08:13,680 --> 00:08:16,480
approvals provide lightweight state, power automate,
225
00:08:16,480 --> 00:08:18,400
and as you provide execution,
226
00:08:18,400 --> 00:08:20,800
and agents provide the conversational wrapper.
227
00:08:20,800 --> 00:08:22,160
And when you standardize that model,
228
00:08:22,160 --> 00:08:24,000
the feature list stops being exciting.
229
00:08:24,000 --> 00:08:25,200
It becomes governable.
230
00:08:25,200 --> 00:08:27,520
Conceptual flow for scale, event, reasoning,
231
00:08:27,520 --> 00:08:28,880
orchestration, enforcement.
232
00:08:28,880 --> 00:08:30,840
Scale starts with a boring question.
233
00:08:30,840 --> 00:08:32,280
What exactly happened?
234
00:08:32,280 --> 00:08:33,960
Not what did the user want?
235
00:08:33,960 --> 00:08:36,320
Not what does the business process say?
236
00:08:36,320 --> 00:08:37,880
What happened in the system that you can point
237
00:08:37,880 --> 00:08:39,400
to, subscribe to, and replay?
238
00:08:39,400 --> 00:08:41,560
That's the event.
239
00:08:41,560 --> 00:08:45,200
In SharePoint land, events come from a few predictable places.
240
00:08:45,200 --> 00:08:49,000
A file was created, updated, moved, or deleted.
241
00:08:49,000 --> 00:08:52,080
Metadata changed, an approval state changed,
242
00:08:52,080 --> 00:08:55,040
a sharing link was created, permissions changed,
243
00:08:55,040 --> 00:08:58,080
a page was published, a list item changed.
244
00:08:58,080 --> 00:09:00,360
The UI hides that these are all distinct signals
245
00:09:00,360 --> 00:09:02,520
with different reliability characteristics.
246
00:09:02,520 --> 00:09:05,360
Some are clean and transactional, some are noisy.
247
00:09:05,360 --> 00:09:07,080
Some fire more often than you think
248
00:09:07,080 --> 00:09:09,320
because auto-save and metadata normalization
249
00:09:09,320 --> 00:09:10,320
count as updates.
250
00:09:10,320 --> 00:09:12,800
But if you treat every update as the business event,
251
00:09:12,800 --> 00:09:15,680
you build a denial of service attack against your own automation.
252
00:09:15,680 --> 00:09:19,280
So the first scaling law is decide what event you actually care about,
253
00:09:19,280 --> 00:09:21,040
then make it stable, for example.
254
00:09:21,040 --> 00:09:23,120
File created is usually stable.
255
00:09:23,120 --> 00:09:25,960
File modified is chaos, unless you constrain it
256
00:09:25,960 --> 00:09:28,880
with conditions like status change from draft to submitted
257
00:09:28,880 --> 00:09:30,840
or approval status changed.
258
00:09:30,840 --> 00:09:32,680
Metadata transitions are your friend
259
00:09:32,680 --> 00:09:35,360
because they represent intent, not activity.
260
00:09:35,360 --> 00:09:36,880
The event is the edge of your system.
261
00:09:36,880 --> 00:09:40,320
If the edge is fuzzy, everything behind it becomes expensive.
262
00:09:40,320 --> 00:09:41,920
Next comes reasoning.
263
00:09:41,920 --> 00:09:44,120
Re reasoning is where most flows quietly rot
264
00:09:44,120 --> 00:09:46,920
because makers mix decisions and actions into one blob.
265
00:09:46,920 --> 00:09:48,880
They check metadata, look up a user,
266
00:09:48,880 --> 00:09:52,080
branch three times, send two approvals, and then move content.
267
00:09:52,080 --> 00:09:53,480
It works until it doesn't.
268
00:09:53,480 --> 00:09:56,280
And then nobody can tell whether the failure came from bad input,
269
00:09:56,280 --> 00:09:58,680
bad policy, or a transient connector issue.
270
00:09:58,680 --> 00:10:01,560
Re reasoning should be treated like a policy evaluation step.
271
00:10:01,560 --> 00:10:04,600
Interpret metadata, validate required fields,
272
00:10:04,600 --> 00:10:07,720
map the item to a classification, decide routing,
273
00:10:07,720 --> 00:10:09,960
and decide whether the action is allowed.
274
00:10:09,960 --> 00:10:12,920
This can be simple rules like if department equals finance,
275
00:10:12,920 --> 00:10:15,800
root to finance approvals, or more advanced checks
276
00:10:15,800 --> 00:10:19,800
like if label is confidential block external share requests.
277
00:10:19,800 --> 00:10:22,400
If you're using agents, this is also where you cage them.
278
00:10:22,400 --> 00:10:25,160
The agent can suggest but the reasoning layer decides.
279
00:10:25,160 --> 00:10:26,080
Here's the weird part.
280
00:10:26,080 --> 00:10:28,360
Re reasoning doesn't have to run where execution runs.
281
00:10:28,360 --> 00:10:30,320
Re reasoning can run in a controlled service
282
00:10:30,320 --> 00:10:31,880
with a version rule set.
283
00:10:31,880 --> 00:10:33,040
It can run in a function.
284
00:10:33,040 --> 00:10:34,520
It can even run in a flow.
285
00:10:34,520 --> 00:10:35,640
But it has to be separable.
286
00:10:35,640 --> 00:10:37,480
You want to be able to test it, change it,
287
00:10:37,480 --> 00:10:39,520
and audit it without rewriting the whole workflow.
288
00:10:39,520 --> 00:10:42,200
In other words, separate decision from execution.
289
00:10:42,200 --> 00:10:43,200
Then comes orchestration.
290
00:10:43,200 --> 00:10:45,440
Orchestration is not run these steps.
291
00:10:45,440 --> 00:10:48,040
Orchestration is coordinate work that might fail,
292
00:10:48,040 --> 00:10:50,760
might take time, and might run more than once.
293
00:10:50,760 --> 00:10:52,640
At enterprise volume, every workflow
294
00:10:52,640 --> 00:10:56,120
becomes distributed systems work, whether you admit it or not.
295
00:10:56,120 --> 00:10:58,320
You need fan-out because one event can trigger
296
00:10:58,320 --> 00:10:59,760
multiple downstream actions.
297
00:10:59,760 --> 00:11:03,480
Notify teams, update a list, set a label, create a task,
298
00:11:03,480 --> 00:11:04,480
call an API.
299
00:11:04,480 --> 00:11:06,520
You need async because long-running approvals
300
00:11:06,520 --> 00:11:08,600
and content conversions don't fit neatly
301
00:11:08,600 --> 00:11:10,440
into a single synchronous run.
302
00:11:10,440 --> 00:11:13,200
You need queues because SharePoint and Graph will throttle you,
303
00:11:13,200 --> 00:11:15,680
and Power Automate will hit concurrency reality.
304
00:11:15,680 --> 00:11:17,520
You need retreatries because transient failures
305
00:11:17,520 --> 00:11:18,920
are not bugs, they're physics.
306
00:11:18,920 --> 00:11:21,520
And you need identity because duplicates will happen.
307
00:11:21,520 --> 00:11:25,080
Users re-upload, events refire, flows get retried,
308
00:11:25,080 --> 00:11:26,760
subscriptions get revalidated.
309
00:11:26,760 --> 00:11:29,320
Ident potency is the difference between we retried
310
00:11:29,320 --> 00:11:31,040
and we duplicated the project site
311
00:11:31,040 --> 00:11:32,720
and nobody noticed until billing.
312
00:11:32,720 --> 00:11:35,520
So orchestration at scale looks like this.
313
00:11:35,520 --> 00:11:38,440
Receive the event, stamp it with an identity key,
314
00:11:38,440 --> 00:11:40,440
in queue work, process it with workers
315
00:11:40,440 --> 00:11:43,200
that can retry safely, and record state transitions
316
00:11:43,200 --> 00:11:45,240
somewhere that isn't someone's memory.
317
00:11:45,240 --> 00:11:46,680
Power Automate can do some of that.
318
00:11:46,680 --> 00:11:48,680
Logic apps and functions do it more predictably.
319
00:11:48,680 --> 00:11:50,520
Either way, the architecture has to acknowledge
320
00:11:50,520 --> 00:11:52,480
that the happy path is not the common path.
321
00:11:52,480 --> 00:11:54,600
Finally, enforcement.
322
00:11:54,600 --> 00:11:57,320
Enforcement is where governance stops being a PDF
323
00:11:57,320 --> 00:11:58,920
and becomes runtime behavior.
324
00:11:58,920 --> 00:12:02,120
Set or validate permissions, apply sensitivity labels,
325
00:12:02,120 --> 00:12:05,280
enforce retention, evaluate DLP, log actions,
326
00:12:05,280 --> 00:12:06,640
and emit audit evidence.
327
00:12:06,640 --> 00:12:07,960
This is where you close the loop
328
00:12:07,960 --> 00:12:10,360
between we decided and the system did.
329
00:12:10,360 --> 00:12:12,560
Enforcement also means writing back to SharePoint
330
00:12:12,560 --> 00:12:15,000
in a way that keeps the item as the source of truth.
331
00:12:15,000 --> 00:12:17,240
Update metadata to reflect the outcome.
332
00:12:17,240 --> 00:12:19,240
Store the approval state with the document,
333
00:12:19,240 --> 00:12:21,320
record who approved, and ensure the label
334
00:12:21,320 --> 00:12:23,480
and sharing posture match the policy.
335
00:12:23,480 --> 00:12:25,480
If your enforcement happens only in email
336
00:12:25,480 --> 00:12:27,880
or team's notifications, you've built theater.
337
00:12:27,880 --> 00:12:29,320
Auditors don't accept theater,
338
00:12:29,320 --> 00:12:32,720
so the scalable model is deterministic, event triggers.
339
00:12:32,720 --> 00:12:34,840
Reasoning decides orchestration coordinates
340
00:12:34,840 --> 00:12:36,040
enforcement makes it real,
341
00:12:36,040 --> 00:12:37,280
and if any one of those is missing,
342
00:12:37,280 --> 00:12:39,640
you don't get a slightly weaker automation.
343
00:12:39,640 --> 00:12:40,960
You get drift.
344
00:12:40,960 --> 00:12:43,240
And drift always wins until you design the system,
345
00:12:43,240 --> 00:12:44,640
so it can't.
346
00:12:44,640 --> 00:12:47,320
Tooling decision matrix, what to standardize,
347
00:12:47,320 --> 00:12:48,440
what to forbid.
348
00:12:48,440 --> 00:12:50,760
Now you pick tools, and this is where most enterprises
349
00:12:50,760 --> 00:12:52,880
sabotage themselves, because they turn a platform
350
00:12:52,880 --> 00:12:55,160
into a personal preference contest.
351
00:12:55,160 --> 00:12:56,200
What do you like more?
352
00:12:56,200 --> 00:12:58,000
Power Automate or Logic Apps?
353
00:12:58,000 --> 00:12:58,960
Is the wrong question?
354
00:12:58,960 --> 00:13:01,360
The right question is, what class of work is this
355
00:13:01,360 --> 00:13:03,400
and what failure modes are acceptable?
356
00:13:03,400 --> 00:13:06,080
Because every automation tool is a bundle of trade-offs.
357
00:13:06,080 --> 00:13:10,040
Throughput, latency, auditability, deployment control,
358
00:13:10,040 --> 00:13:11,360
and who's allowed to touch it.
359
00:13:11,360 --> 00:13:13,680
Start with Power Automate Cloud Flows.
360
00:13:13,680 --> 00:13:16,440
Power Automate is the default for business automation
361
00:13:16,440 --> 00:13:19,760
because it's close to the user and rich in connectors.
362
00:13:19,760 --> 00:13:22,000
It's also where simple becomes fragile.
363
00:13:22,000 --> 00:13:23,760
The moment you cross from a team's workload
364
00:13:23,760 --> 00:13:26,480
into an enterprise workload, concurrency limits,
365
00:13:26,480 --> 00:13:29,400
connector throttling, long-running approval behavior,
366
00:13:29,400 --> 00:13:31,000
and run history retention realities
367
00:13:31,000 --> 00:13:32,040
don't show up in the demo.
368
00:13:32,040 --> 00:13:33,800
They show up when you have 10,000 items
369
00:13:33,800 --> 00:13:35,320
in a Monday morning spike.
370
00:13:35,320 --> 00:13:37,240
So the standardization rule is strict.
371
00:13:37,240 --> 00:13:39,680
Use Power Automate for human-centric workflows
372
00:13:39,680 --> 00:13:41,720
with bounded volume and clear ownership.
373
00:13:41,720 --> 00:13:45,120
Notifications, approvals, basic metadata updates,
374
00:13:45,120 --> 00:13:48,160
small fan-out, anything that benefits from being maintained
375
00:13:48,160 --> 00:13:50,320
by a maker community under governance.
376
00:13:50,320 --> 00:13:52,120
And the forbid list is equally strict.
377
00:13:52,120 --> 00:13:54,080
Don't use Power Automate as the backbone
378
00:13:54,080 --> 00:13:57,720
for high-volume event processing, bulk content transformations,
379
00:13:57,720 --> 00:14:01,440
or anything that must run like a service with predictable throughput.
380
00:14:01,440 --> 00:14:04,640
Also, forbid personal flows as production dependencies.
381
00:14:04,640 --> 00:14:08,000
A workflow that matters can't be owned by whoever built it first.
382
00:14:08,000 --> 00:14:10,280
Next, Webhooks Plus Microsoft Graph.
383
00:14:10,280 --> 00:14:11,680
This is the event-driven backbone
384
00:14:11,680 --> 00:14:13,680
when you care about scale and latency.
385
00:14:13,680 --> 00:14:15,960
Graph subscriptions and change notifications
386
00:14:15,960 --> 00:14:18,760
give you a clean, something change signal without polling,
387
00:14:18,760 --> 00:14:21,280
and you can root those signals into real compute.
388
00:14:21,280 --> 00:14:23,960
The upside is obvious, low latency, high volume,
389
00:14:23,960 --> 00:14:26,280
and architecture that looks like an actual system
390
00:14:26,280 --> 00:14:28,160
instead of a collection of runs.
391
00:14:28,160 --> 00:14:29,320
The downside is also obvious.
392
00:14:29,320 --> 00:14:32,560
You now own code, hosting, authentication, and life cycle,
393
00:14:32,560 --> 00:14:33,360
which is fine.
394
00:14:33,360 --> 00:14:34,600
Enterprises already own code.
395
00:14:34,600 --> 00:14:37,160
They just pretend they don't when they call it low code.
396
00:14:37,160 --> 00:14:40,320
So the standard here is use Webhooks and Graph
397
00:14:40,320 --> 00:14:42,840
when the event rate is high, when seconds matter,
398
00:14:42,840 --> 00:14:46,000
or when you need central control over triggering behavior.
399
00:14:46,000 --> 00:14:47,880
And forbid the anti-pattern where each department
400
00:14:47,880 --> 00:14:51,080
builds their own Graph listener, one listener per class of event,
401
00:14:51,080 --> 00:14:53,240
one pipeline, central ownership.
402
00:14:53,240 --> 00:14:54,880
Otherwise, you're back to sprawl,
403
00:14:54,880 --> 00:14:56,520
just with prettier engineering.
404
00:14:56,520 --> 00:14:58,600
Then, as your functions versus logic apps,
405
00:14:58,600 --> 00:15:01,480
this is the compute first versus workflow first divide.
406
00:15:01,480 --> 00:15:04,200
Functions are for code that needs to execute fast,
407
00:15:04,200 --> 00:15:06,920
scale out aggressively, and be tested like software.
408
00:15:06,920 --> 00:15:08,480
Logic apps are for orchestration
409
00:15:08,480 --> 00:15:11,040
that needs connectors, durable state, built in retries,
410
00:15:11,040 --> 00:15:13,560
and operational visibility with less custom plumbing.
411
00:15:13,560 --> 00:15:16,120
In enterprise terms, functions are the sharp tool.
412
00:15:16,120 --> 00:15:17,800
Logic apps are the safer tool.
413
00:15:17,800 --> 00:15:20,120
Use functions for custom provisioning logic,
414
00:15:20,120 --> 00:15:22,360
transformations, complex validation,
415
00:15:22,360 --> 00:15:24,440
and anything where you want versioned code,
416
00:15:24,440 --> 00:15:26,720
unit tests, and predictable performance.
417
00:15:26,720 --> 00:15:29,160
Use logic apps when you need durable orchestration
418
00:15:29,160 --> 00:15:30,240
across systems.
419
00:15:30,240 --> 00:15:33,320
Cues, retries, exception handling, long running processes,
420
00:15:33,320 --> 00:15:36,880
and integrations that benefit from a designed workflow graph.
421
00:15:36,880 --> 00:15:38,200
And here's what you forbid.
422
00:15:38,200 --> 00:15:41,600
Don't let functions versus logic apps become a religion.
423
00:15:41,600 --> 00:15:43,440
Standardize by workload.
424
00:15:43,440 --> 00:15:46,280
If you need a durable workflow with multiple systems,
425
00:15:46,280 --> 00:15:47,680
logic apps is the default.
426
00:15:47,680 --> 00:15:49,960
If you need custom compute that's not a workflow,
427
00:15:49,960 --> 00:15:51,160
functions is the default.
428
00:15:51,160 --> 00:15:54,240
Mixing them is allowed only when the architecture forces it,
429
00:15:54,240 --> 00:15:56,120
not because someone likes writing JSON
430
00:15:56,120 --> 00:15:57,480
less than writing cperts.
431
00:15:57,480 --> 00:15:59,440
Now, co-pilot studio and agents, agents
432
00:15:59,440 --> 00:16:01,040
are the conversational entry points.
433
00:16:01,040 --> 00:16:02,760
They are not the execution substrate.
434
00:16:02,760 --> 00:16:05,000
They're great at intake, triage, summarization,
435
00:16:05,000 --> 00:16:06,240
and guided actions.
436
00:16:06,240 --> 00:16:07,560
They can trigger workflows.
437
00:16:07,560 --> 00:16:09,360
They can help users find the right process.
438
00:16:09,360 --> 00:16:10,800
They can even generate drafts,
439
00:16:10,800 --> 00:16:12,760
but they cannot be your compliance pipeline
440
00:16:12,760 --> 00:16:14,040
because probabilistic reasoning
441
00:16:14,040 --> 00:16:15,560
can't be your last line of defense.
442
00:16:15,560 --> 00:16:18,560
So the standard is agents for interface and assistance,
443
00:16:18,560 --> 00:16:20,320
deterministic services for enforcement
444
00:16:20,320 --> 00:16:21,960
and high throughput execution.
445
00:16:21,960 --> 00:16:23,400
And the forbid list is simple.
446
00:16:23,400 --> 00:16:25,480
Don't let agents write to authoritative systems
447
00:16:25,480 --> 00:16:27,120
without a governed orchestration layer
448
00:16:27,120 --> 00:16:28,480
and a hard permission model.
449
00:16:28,480 --> 00:16:30,120
Agents should request actions.
450
00:16:30,120 --> 00:16:31,640
Orchestration should perform actions.
451
00:16:31,640 --> 00:16:33,400
Enforcement should validate outcomes.
452
00:16:33,400 --> 00:16:36,240
Now put it all into one rule that leaders can actually enforce,
453
00:16:36,240 --> 00:16:37,960
one path for each class of work.
454
00:16:37,960 --> 00:16:40,480
Simple team automation goes through power automate,
455
00:16:40,480 --> 00:16:42,720
governed by environments and ownership rules.
456
00:16:42,720 --> 00:16:44,600
High volume eventing goes through graph
457
00:16:44,600 --> 00:16:46,400
and a centralized event pipeline.
458
00:16:46,400 --> 00:16:49,760
Cross system and long running orchestration goes through logic apps,
459
00:16:49,760 --> 00:16:51,680
custom compute goes through functions.
460
00:16:51,680 --> 00:16:54,600
Agents sit on top as the intake and guidance layer.
461
00:16:54,600 --> 00:16:57,040
No choose your own stack because at scale,
462
00:16:57,040 --> 00:17:00,120
choice is just a polite word for architectural erosion.
463
00:17:00,120 --> 00:17:01,440
And once that matrix is clear,
464
00:17:01,440 --> 00:17:03,480
you can finally talk about governance.
465
00:17:03,480 --> 00:17:04,760
Not as documentation,
466
00:17:04,760 --> 00:17:07,160
but as mechanisms that make the matrix real.
467
00:17:07,160 --> 00:17:08,840
Governance isn't policy docs.
468
00:17:08,840 --> 00:17:10,560
It's enforcement mechanisms.
469
00:17:10,560 --> 00:17:13,120
Most organizations think governance is a document,
470
00:17:13,120 --> 00:17:15,760
a site creation policy, a naming standard,
471
00:17:15,760 --> 00:17:17,720
a don't share PII slide deck,
472
00:17:17,720 --> 00:17:19,560
and a monthly meeting where everyone agrees
473
00:17:19,560 --> 00:17:20,920
the situation is bad.
474
00:17:20,920 --> 00:17:22,440
That is not governance.
475
00:17:22,440 --> 00:17:24,920
Governance is what remains true after a smart,
476
00:17:24,920 --> 00:17:26,640
busy person finds a shortcut.
477
00:17:26,640 --> 00:17:27,880
So the definition has to change.
478
00:17:27,880 --> 00:17:30,000
Governance is the set of enforcement mechanisms
479
00:17:30,000 --> 00:17:32,200
that survive human creativity at scale.
480
00:17:32,200 --> 00:17:34,320
If a control can be bypassed by convenience,
481
00:17:34,320 --> 00:17:35,320
it's not a control.
482
00:17:35,320 --> 00:17:36,440
It's a suggestion.
483
00:17:36,440 --> 00:17:38,840
And suggestions don't withstand share point automation
484
00:17:38,840 --> 00:17:41,640
because automation amplifies whatever behavior already exists.
485
00:17:41,640 --> 00:17:43,400
It takes the informal workaround
486
00:17:43,400 --> 00:17:45,440
and turns it into a repeatable button.
487
00:17:45,440 --> 00:17:46,960
This is the uncomfortable truth.
488
00:17:46,960 --> 00:17:48,640
Makers don't break governance.
489
00:17:48,640 --> 00:17:50,880
Systems without enforcement never had governance.
490
00:17:50,880 --> 00:17:52,520
So what does enforcement look like
491
00:17:52,520 --> 00:17:54,240
in modern share point automation?
492
00:17:54,240 --> 00:17:57,360
It starts with control surfaces, not best practices.
493
00:17:57,360 --> 00:18:00,200
Actual levers that change what the platform allows.
494
00:18:00,200 --> 00:18:02,960
Microsoft purview for labels, retention and DLP,
495
00:18:02,960 --> 00:18:04,360
entrafore identity boundaries,
496
00:18:04,360 --> 00:18:07,240
guest policy, conditional access and role separation.
497
00:18:07,240 --> 00:18:09,480
Share point admin controls for sharing defaults,
498
00:18:09,480 --> 00:18:12,160
site creation constraints and lifecycle settings,
499
00:18:12,160 --> 00:18:14,960
power platform admin controls for environments,
500
00:18:14,960 --> 00:18:18,840
DLP across connectors and who can create what?
501
00:18:18,840 --> 00:18:21,040
Each of those is a different plane of control.
502
00:18:21,040 --> 00:18:22,480
And if you don't connect them,
503
00:18:22,480 --> 00:18:25,360
you create gaps that automation happily drives through.
504
00:18:25,360 --> 00:18:27,880
For example, you can have a beautiful DLP policy,
505
00:18:27,880 --> 00:18:29,920
but if anyone can build a flow
506
00:18:29,920 --> 00:18:32,080
in an unmanaged environment that moves content
507
00:18:32,080 --> 00:18:35,000
from a labeled library to an ungoverned connector,
508
00:18:35,000 --> 00:18:37,320
you've built a compliance bypass with a UI.
509
00:18:37,320 --> 00:18:39,920
Or you can lock down external sharing at the tenant level,
510
00:18:39,920 --> 00:18:41,840
but if you don't control guest lifecycle
511
00:18:41,840 --> 00:18:43,320
and sponsorship in entra,
512
00:18:43,320 --> 00:18:45,440
you just turned external collaboration
513
00:18:45,440 --> 00:18:47,640
into permanent external presence.
514
00:18:47,640 --> 00:18:48,880
Or you can define retention,
515
00:18:48,880 --> 00:18:51,920
but if nobody enforces labels at creation time,
516
00:18:51,920 --> 00:18:54,800
you've outsourced compliance to user attention span,
517
00:18:54,800 --> 00:18:57,800
then comes the drift model because drift is not a risk,
518
00:18:57,800 --> 00:18:59,760
drift is the default operating mode.
519
00:18:59,760 --> 00:19:02,880
Every exception you approve becomes an entropy generator.
520
00:19:02,880 --> 00:19:05,000
This site needs external sharing.
521
00:19:05,000 --> 00:19:07,160
That flow needs a premium connector.
522
00:19:07,160 --> 00:19:09,440
This library needs unique permissions.
523
00:19:09,440 --> 00:19:12,120
This department needs a custom approval path.
524
00:19:12,120 --> 00:19:13,280
Each one sounds reasonable.
525
00:19:13,280 --> 00:19:15,120
Over time, they accumulate into a system
526
00:19:15,120 --> 00:19:16,520
nobody can reason about.
527
00:19:16,520 --> 00:19:18,400
Missing policies create obvious gaps.
528
00:19:18,400 --> 00:19:20,280
Drifting policies create ambiguity.
529
00:19:20,280 --> 00:19:22,000
Ambiguity creates incident time.
530
00:19:22,000 --> 00:19:25,000
So the governance job is not to eliminate exceptions.
531
00:19:25,000 --> 00:19:27,840
It's to make exceptions expensive, visible, time-bound,
532
00:19:27,840 --> 00:19:28,880
and reviewable.
533
00:19:28,880 --> 00:19:30,680
That means time-limited access,
534
00:19:30,680 --> 00:19:33,120
expiring sharing links, scheduled access reviews,
535
00:19:33,120 --> 00:19:35,720
environment-based restrictions, mandatory ownership
536
00:19:35,720 --> 00:19:38,280
metadata, automated lifecycle policies.
537
00:19:38,280 --> 00:19:40,200
Telemetry that proves what changed,
538
00:19:40,200 --> 00:19:42,000
when and under which identity.
539
00:19:42,000 --> 00:19:42,960
That last part matters.
540
00:19:42,960 --> 00:19:45,040
Identity is the enforcement perimeter,
541
00:19:45,040 --> 00:19:47,200
but telemetry is the governance perimeter.
542
00:19:47,200 --> 00:19:49,400
Because if you can't see sprawl, you can't manage it.
543
00:19:49,400 --> 00:19:52,760
So governance needs KPIs that measure entropy, not vanity.
544
00:19:52,760 --> 00:19:54,920
The KPI view is brutal and simple.
545
00:19:54,920 --> 00:19:58,040
sprawl rate, how fast sites, teams, and flows appear
546
00:19:58,040 --> 00:20:00,680
compared to the organization's ability to govern them.
547
00:20:00,680 --> 00:20:03,800
Permission drift, how often inheritance breaks,
548
00:20:03,800 --> 00:20:07,760
direct assignments appear, or guests accumulate without a sponsor.
549
00:20:07,760 --> 00:20:10,800
DLP incidents, not just counts, but where they concentrate
550
00:20:10,800 --> 00:20:13,280
and which labels or locations correlate.
551
00:20:13,280 --> 00:20:16,760
Automation failure rate, retries, time-outs, runs that fail
552
00:20:16,760 --> 00:20:20,840
silently, and workflows with no owner who receives failure alerts.
553
00:20:20,840 --> 00:20:22,920
Those are the signals that tell you whether the control
554
00:20:22,920 --> 00:20:26,040
plane is working or whether you're running a distributed accident.
555
00:20:26,040 --> 00:20:27,160
Now notice what's missing.
556
00:20:27,160 --> 00:20:28,320
Number of policies.
557
00:20:28,320 --> 00:20:30,480
Number of pages in the governance guide.
558
00:20:30,480 --> 00:20:31,760
Number of training sessions.
559
00:20:31,760 --> 00:20:34,080
Those measure activity, not enforcement.
560
00:20:34,080 --> 00:20:37,120
So the practical architecture principle here is governance
561
00:20:37,120 --> 00:20:40,160
must be deployable and testable, like any other system.
562
00:20:40,160 --> 00:20:42,960
Controls need versioning, exceptions need life cycle,
563
00:20:42,960 --> 00:20:45,040
environments need boundaries, and workflows
564
00:20:45,040 --> 00:20:46,440
need operational ownership.
565
00:20:46,440 --> 00:20:48,040
This is also why governance committees
566
00:20:48,040 --> 00:20:50,080
fail when they try to approve everything.
567
00:20:50,080 --> 00:20:53,000
They become a human bottleneck for machine speed change.
568
00:20:53,000 --> 00:20:54,760
The system learns to route around them
569
00:20:54,760 --> 00:20:56,560
because business pressure doesn't stop.
570
00:20:56,560 --> 00:20:59,080
So governance has to move from approval of everything
571
00:20:59,080 --> 00:21:00,600
to standardization of the paths.
572
00:21:00,600 --> 00:21:03,400
And the only way that works is start with identity,
573
00:21:03,400 --> 00:21:05,960
because identity is where automation gets its permissions,
574
00:21:05,960 --> 00:21:09,640
where agents inherit access, where service principles do the writing,
575
00:21:09,640 --> 00:21:12,600
and where guests become either controlled collaborators
576
00:21:12,600 --> 00:21:14,720
or an ongoing liability.
577
00:21:14,720 --> 00:21:17,960
If you get identity wrong, every other governance layer becomes cleanup.
578
00:21:17,960 --> 00:21:21,520
So the next section goes where most organizations avoid going
579
00:21:21,520 --> 00:21:23,760
until after their first major incident.
580
00:21:23,760 --> 00:21:27,920
EntraFirst Design, the group model that prevents permission fanfiction.
581
00:21:27,920 --> 00:21:29,880
EntraFirst Design, the group model that
582
00:21:29,880 --> 00:21:31,560
prevents permission fanfiction.
583
00:21:31,560 --> 00:21:34,560
EntraFirst Design is not identity hygiene.
584
00:21:34,560 --> 00:21:36,440
It's the only way SharePoint automation stays
585
00:21:36,440 --> 00:21:38,840
governable once it spreads beyond one team.
586
00:21:38,840 --> 00:21:40,120
The core law is simple.
587
00:21:40,120 --> 00:21:42,000
Every permission that isn't expressed as a group
588
00:21:42,000 --> 00:21:44,440
becomes a story someone tells themselves later.
589
00:21:44,440 --> 00:21:44,960
It's fine.
590
00:21:44,960 --> 00:21:46,440
I just added Sarah directly.
591
00:21:46,440 --> 00:21:47,000
It's fine.
592
00:21:47,000 --> 00:21:49,160
I just broke inheritance on this folder.
593
00:21:49,160 --> 00:21:49,640
It's fine.
594
00:21:49,640 --> 00:21:50,720
It's only a guest.
595
00:21:50,720 --> 00:21:52,360
Those decisions don't stay small.
596
00:21:52,360 --> 00:21:54,600
Automation reads them as truth and amplifies them.
597
00:21:54,600 --> 00:21:56,880
So the scaling model is group first access.
598
00:21:56,880 --> 00:22:00,080
No direct user assignment as a rule, not a preference.
599
00:22:00,080 --> 00:22:02,160
Owners and members map to Entra groups.
600
00:22:02,160 --> 00:22:04,120
Special roles map to separate groups.
601
00:22:04,120 --> 00:22:05,760
Exceptions map to time bound groups.
602
00:22:05,760 --> 00:22:09,480
That's it because a SharePoint permission set is not a security model.
603
00:22:09,480 --> 00:22:12,520
It's an implementation detail of an authorization graph.
604
00:22:12,520 --> 00:22:14,280
Entra is where you define the graph.
605
00:22:14,280 --> 00:22:16,480
SharePoint is where you attach it to content.
606
00:22:16,480 --> 00:22:17,800
Here's what most people miss.
607
00:22:17,800 --> 00:22:21,400
Automation identities need the same discipline as human identities.
608
00:22:21,400 --> 00:22:24,040
If a flow runs as the owner because it was built
609
00:22:24,040 --> 00:22:26,560
by an enthusiastic site owner six months ago,
610
00:22:26,560 --> 00:22:28,800
then the organization has created a ghost admin
611
00:22:28,800 --> 00:22:30,840
that never rotates, never goes on leave,
612
00:22:30,840 --> 00:22:32,320
and never gets reviewed.
613
00:22:32,320 --> 00:22:36,440
The workflow becomes a permanent privilege escalation path disguised as productivity.
614
00:22:36,440 --> 00:22:38,720
So you formalize automation identities.
615
00:22:38,720 --> 00:22:42,280
Service principles and managed identities are first class citizens.
616
00:22:42,280 --> 00:22:43,400
They get explicit scopes.
617
00:22:43,400 --> 00:22:44,520
They get named ownership.
618
00:22:44,520 --> 00:22:45,440
They get life cycle.
619
00:22:45,440 --> 00:22:46,960
They don't inherit random permissions
620
00:22:46,960 --> 00:22:49,360
because someone clicked use my connection.
621
00:22:49,360 --> 00:22:52,040
And they do not sit in the same groups as humans.
622
00:22:52,040 --> 00:22:56,040
Mixing human access and automation access is how incident reports get written.
623
00:22:56,040 --> 00:22:59,880
Now add role separation SharePoint admins, power platform admins
624
00:22:59,880 --> 00:23:01,840
and automation builders are not interchangeable
625
00:23:01,840 --> 00:23:04,480
just because one person can technically do all three.
626
00:23:04,480 --> 00:23:06,680
In Entra terms, you use role separation
627
00:23:06,680 --> 00:23:08,360
and privilege identity management.
628
00:23:08,360 --> 00:23:10,760
So that privileged access is just in time,
629
00:23:10,760 --> 00:23:12,320
time limited and auditable.
630
00:23:12,320 --> 00:23:15,000
Permanent privilege is not an operational convenience.
631
00:23:15,000 --> 00:23:16,640
It is security debt.
632
00:23:16,640 --> 00:23:20,480
PIM is how you keep admin rights from becoming the default state
633
00:23:20,480 --> 00:23:22,440
and it matters more with automation
634
00:23:22,440 --> 00:23:25,000
because the people who can create automations
635
00:23:25,000 --> 00:23:28,040
often become the people who can bypass controls.
636
00:23:28,040 --> 00:23:30,240
If the builder can also grant themselves access,
637
00:23:30,240 --> 00:23:32,640
you don't have governance, you have self-service escalation.
638
00:23:32,640 --> 00:23:34,680
Now the group model itself, a practical pattern
639
00:23:34,680 --> 00:23:37,000
that doesn't collapse under pressure looks like this.
640
00:23:37,000 --> 00:23:38,880
One group for owners, one group for members,
641
00:23:38,880 --> 00:23:41,000
one group for visitors and then additional groups
642
00:23:41,000 --> 00:23:45,040
for specific entitlements that are independent of site membership.
643
00:23:45,040 --> 00:23:46,520
Approvers should be a group.
644
00:23:46,520 --> 00:23:48,640
External collaborators should be a group.
645
00:23:48,640 --> 00:23:50,440
Workflow runners should be a group.
646
00:23:50,440 --> 00:23:53,080
And if a library has a unique permission boundary,
647
00:23:53,080 --> 00:23:55,760
that boundary is expressed as separate groups,
648
00:23:55,760 --> 00:23:57,200
not a list of named people.
649
00:23:57,200 --> 00:23:59,600
This is how you prevent permission fan fiction.
650
00:23:59,600 --> 00:24:01,360
Permissions stop being bespoke narratives
651
00:24:01,360 --> 00:24:02,840
and become reusable components.
652
00:24:02,840 --> 00:24:04,360
It also makes life cycle possible.
653
00:24:04,360 --> 00:24:06,440
You can run access reviews on groups,
654
00:24:06,440 --> 00:24:07,920
you can expire group membership,
655
00:24:07,920 --> 00:24:09,480
you can enforce naming conventions
656
00:24:09,480 --> 00:24:10,880
and ownership requirements,
657
00:24:10,880 --> 00:24:12,720
you can detect orphaned groups.
658
00:24:12,720 --> 00:24:14,520
None of that works when the permission model
659
00:24:14,520 --> 00:24:17,720
lives as direct assignments scattered across 10,000 sites.
660
00:24:17,720 --> 00:24:18,960
Then comes guests.
661
00:24:18,960 --> 00:24:21,440
External collaboration is not a toggle in SharePoint.
662
00:24:21,440 --> 00:24:23,560
It's an identity life cycle problem in Entra.
663
00:24:23,560 --> 00:24:24,840
Guests must have sponsorship,
664
00:24:24,840 --> 00:24:27,000
guests must have expiration or review.
665
00:24:27,000 --> 00:24:29,160
Guests must be subject to conditional access
666
00:24:29,160 --> 00:24:30,840
and MFA expectations.
667
00:24:30,840 --> 00:24:32,920
And the invitation flow must be consistent
668
00:24:32,920 --> 00:24:35,720
because anyone can invite anyone is how you end up
669
00:24:35,720 --> 00:24:37,960
with external identities nobody can explain.
670
00:24:37,960 --> 00:24:40,560
This is also where cross tenant collaboration gets dangerous
671
00:24:40,560 --> 00:24:42,200
if the org treats it casually.
672
00:24:42,200 --> 00:24:44,880
If the enterprise allows multiple invitation patterns,
673
00:24:44,880 --> 00:24:46,680
multiple tenant relationships
674
00:24:46,680 --> 00:24:48,320
and inconsistent guest policies,
675
00:24:48,320 --> 00:24:49,840
the system doesn't become flexible,
676
00:24:49,840 --> 00:24:52,200
it becomes untraceable.
677
00:24:52,200 --> 00:24:54,480
So the Entra first blueprint is strict.
678
00:24:54,480 --> 00:24:57,200
Define collaboration zones and map them to guest policies.
679
00:24:57,200 --> 00:24:59,240
If a site is external by design,
680
00:24:59,240 --> 00:25:01,640
its access model is external by design.
681
00:25:01,640 --> 00:25:03,640
If it isn't, guests don't appear there
682
00:25:03,640 --> 00:25:05,280
because it was urgent.
683
00:25:05,280 --> 00:25:07,560
Now connect identity back to automation.
684
00:25:07,560 --> 00:25:09,120
When quick steps can execute a flow,
685
00:25:09,120 --> 00:25:11,960
the question becomes which identity does that flow run as
686
00:25:11,960 --> 00:25:13,240
and what can it touch?
687
00:25:13,240 --> 00:25:15,360
When approvals change state inside a library
688
00:25:15,360 --> 00:25:17,640
who is allowed to submit, who is allowed to approve
689
00:25:17,640 --> 00:25:19,800
and what downstream rights occur on approval,
690
00:25:19,800 --> 00:25:22,760
when agents retrieve content, what do they inherit
691
00:25:22,760 --> 00:25:24,240
and what do they trigger?
692
00:25:24,240 --> 00:25:26,960
Entra answers those questions with one mechanism.
693
00:25:26,960 --> 00:25:29,240
Explicit assignment by our groups and roles,
694
00:25:29,240 --> 00:25:30,440
not ambient privilege.
695
00:25:30,440 --> 00:25:33,600
And once identity is stable, the next layer finally works.
696
00:25:33,600 --> 00:25:35,720
Labels and DLP stop being aspirational
697
00:25:35,720 --> 00:25:38,400
because the system can reliably tell who is acting
698
00:25:38,400 --> 00:25:40,560
what they're allowed to do and what should be blocked.
699
00:25:40,560 --> 00:25:43,080
That's where PerView stops being compliance tooling
700
00:25:43,080 --> 00:25:46,760
and becomes runtime enforcement for automation and AI readiness.
701
00:25:46,760 --> 00:25:49,200
PerView Foundation, label first governance
702
00:25:49,200 --> 00:25:51,080
for automation and AI readiness.
703
00:25:51,080 --> 00:25:54,080
PerView is where most organizations learn a painful lesson.
704
00:25:54,080 --> 00:25:56,200
Classification isn't a compliance project.
705
00:25:56,200 --> 00:25:59,560
It's an architecture dependency because once automation exists,
706
00:25:59,560 --> 00:26:02,120
the system needs a reliable way to answer one question
707
00:26:02,120 --> 00:26:03,200
on every action.
708
00:26:03,200 --> 00:26:05,800
What kind of data is this and what rules apply to it?
709
00:26:05,800 --> 00:26:07,360
If you can't answer that deterministically,
710
00:26:07,360 --> 00:26:09,360
you're back to humans making policy decisions
711
00:26:09,360 --> 00:26:11,040
in the middle of machine speed workflows
712
00:26:11,040 --> 00:26:12,560
that doesn't scale, it never did.
713
00:26:12,560 --> 00:26:14,360
So label first governance is the foundation.
714
00:26:14,360 --> 00:26:15,840
Not because labels are trendy
715
00:26:15,840 --> 00:26:17,760
because labels are the only control primitive
716
00:26:17,760 --> 00:26:20,640
that can follow content across SharePoint teams one drive
717
00:26:20,640 --> 00:26:23,400
and the downstream systems your flows and agents touch.
718
00:26:23,400 --> 00:26:25,360
Start with sensitivity labels.
719
00:26:25,360 --> 00:26:29,040
Most people treat them like classification stickers,
720
00:26:29,040 --> 00:26:31,640
public, internal, confidential.
721
00:26:31,640 --> 00:26:32,840
That's the marketing version.
722
00:26:32,840 --> 00:26:36,040
Architecturally, a sensitivity label is an enforcement package.
723
00:26:36,040 --> 00:26:38,840
It can carry encryption behaviors, access expectations
724
00:26:38,840 --> 00:26:41,560
and downstream restrictions that stay attached to the file.
725
00:26:41,560 --> 00:26:44,800
It's a way to turn, we don't want this shared externally
726
00:26:44,800 --> 00:26:47,720
into a setting, the platform can actually enforce.
727
00:26:47,840 --> 00:26:51,000
When someone tries to share it, download it, sink it
728
00:26:51,000 --> 00:26:52,880
or route it through automation.
729
00:26:52,880 --> 00:26:55,040
And the key point for automation is simple.
730
00:26:55,040 --> 00:26:57,760
If labels exist only as optional user selections,
731
00:26:57,760 --> 00:26:59,280
they won't exist where you need them.
732
00:26:59,280 --> 00:27:00,920
Users won't label consistently,
733
00:27:00,920 --> 00:27:03,200
makers won't label at all unless forced.
734
00:27:03,200 --> 00:27:05,840
And agents will happily reason over whatever you gave them
735
00:27:05,840 --> 00:27:07,240
which often means the mess.
736
00:27:07,240 --> 00:27:10,120
So the blueprint is, labels must be part of the content
737
00:27:10,120 --> 00:27:12,040
life cycle, not an afterthought.
738
00:27:12,040 --> 00:27:13,600
Then retention labels.
739
00:27:13,600 --> 00:27:15,600
Retention gets misunderstood even faster
740
00:27:15,600 --> 00:27:18,280
because people wanted to be deletion scheduling.
741
00:27:18,280 --> 00:27:19,760
That's not the architectural function.
742
00:27:19,760 --> 00:27:23,080
Retention is about immutable outcomes and audit defensibility.
743
00:27:23,080 --> 00:27:25,160
This content must be kept for X years,
744
00:27:25,160 --> 00:27:27,960
disposed after Y, preserved under legal hold
745
00:27:27,960 --> 00:27:29,720
and proven to have followed policy.
746
00:27:29,720 --> 00:27:31,360
The important thing is that retention
747
00:27:31,360 --> 00:27:33,840
doesn't care whether your workflow was smart.
748
00:27:33,840 --> 00:27:36,440
It cares whether the organization can produce evidence,
749
00:27:36,440 --> 00:27:39,080
which means your automation must not circumvent retention
750
00:27:39,080 --> 00:27:42,400
by moving content into locations outside the policy scope,
751
00:27:42,400 --> 00:27:44,600
exporting it into ungoverned storage
752
00:27:44,600 --> 00:27:47,880
or generating duplicates that create legal ambiguity.
753
00:27:47,880 --> 00:27:50,040
Retention is where your workflow architecture
754
00:27:50,040 --> 00:27:51,320
meets legal reality.
755
00:27:51,320 --> 00:27:53,680
Now, auto labeling.
756
00:27:53,680 --> 00:27:56,520
Auto labeling sounds like salvation.
757
00:27:56,520 --> 00:27:58,760
Let the models find sensitive content,
758
00:27:58,760 --> 00:28:00,480
apply the right label and move on.
759
00:28:00,480 --> 00:28:02,000
And yes, Perv, you can do a lot here
760
00:28:02,000 --> 00:28:05,200
through sensitive information types and trainable classifiers.
761
00:28:05,200 --> 00:28:08,080
But this is where enterprises confuse automation capability
762
00:28:08,080 --> 00:28:10,160
with automation authority.
763
00:28:10,160 --> 00:28:12,880
Auto labeling works when the document patterns are consistent
764
00:28:12,880 --> 00:28:15,040
and the information architecture isn't chaos.
765
00:28:15,040 --> 00:28:17,520
If the organization stores contracts, invoices,
766
00:28:17,520 --> 00:28:19,720
and HR documents with predictable structure
767
00:28:19,720 --> 00:28:22,080
and consistent metadata, models can help.
768
00:28:22,080 --> 00:28:23,640
If the organization stores everything
769
00:28:23,640 --> 00:28:27,080
as final final V7 docs in a library called shared,
770
00:28:27,080 --> 00:28:29,600
auto labeling becomes probabilistic theater.
771
00:28:29,600 --> 00:28:33,560
The rule stays strict, models assist, humans own exceptions.
772
00:28:33,560 --> 00:28:34,960
Auto labeling reduces toil.
773
00:28:34,960 --> 00:28:36,720
It does not eliminate accountability.
774
00:28:36,720 --> 00:28:38,320
Now connect this to AI readiness
775
00:28:38,320 --> 00:28:40,200
because that's why this section exists.
776
00:28:40,200 --> 00:28:42,280
Copilot and agents don't invent permissions.
777
00:28:42,280 --> 00:28:43,120
They inherit them.
778
00:28:43,120 --> 00:28:45,640
But what they do amplify is discoverability.
779
00:28:45,640 --> 00:28:47,400
If sensitive content is overshared,
780
00:28:47,400 --> 00:28:48,880
agents will surface it faster.
781
00:28:48,880 --> 00:28:51,080
If metadata is sloppy, agents will answer
782
00:28:51,080 --> 00:28:53,200
with the wrong latest document.
783
00:28:53,200 --> 00:28:55,640
If labels are missing, DLP and sharing controls
784
00:28:55,640 --> 00:28:57,360
can't reliably gate action.
785
00:28:57,360 --> 00:29:00,160
So AI readiness is not turn on copilot.
786
00:29:00,160 --> 00:29:03,640
AI readiness is can the system reliably distinguish
787
00:29:03,640 --> 00:29:07,320
what is safe to summarize, safe to share, safe to root,
788
00:29:07,320 --> 00:29:08,680
and safe to ground answers on?
789
00:29:08,680 --> 00:29:10,480
Labels are how you teach the platform
790
00:29:10,480 --> 00:29:12,920
that distinction without hoping users remember.
791
00:29:12,920 --> 00:29:16,040
This is also why information architecture suddenly matters again.
792
00:29:16,040 --> 00:29:18,720
SharePoint has always needed content types, metadata,
793
00:29:18,720 --> 00:29:20,280
and clear library design.
794
00:29:20,280 --> 00:29:23,160
The difference now is that AI fails loudly on chaos.
795
00:29:23,160 --> 00:29:24,920
Search could limp along with poor metadata.
796
00:29:24,920 --> 00:29:25,840
Agents can't.
797
00:29:25,840 --> 00:29:27,800
They will confidently synthesize nonsense
798
00:29:27,800 --> 00:29:29,160
from a messy corpus.
799
00:29:29,160 --> 00:29:31,520
And your users will treat it as authoritative
800
00:29:31,520 --> 00:29:32,880
because it speaks fluently.
801
00:29:32,880 --> 00:29:36,280
So you standardize the minimum viable information architecture,
802
00:29:36,280 --> 00:29:38,560
required metadata for high value libraries,
803
00:29:38,560 --> 00:29:40,880
consistent naming for sites and libraries,
804
00:29:40,880 --> 00:29:43,440
and a label taxonomy that maps to real enforcement.
805
00:29:43,440 --> 00:29:45,080
Not 20 labels nobody understands.
806
00:29:45,080 --> 00:29:47,600
A small number that represent real policy boundaries.
807
00:29:47,600 --> 00:29:50,280
And you wire those labels into automation pathways.
808
00:29:50,280 --> 00:29:52,960
Workflows should set labels when business context is known,
809
00:29:52,960 --> 00:29:54,600
not wait for users.
810
00:29:54,600 --> 00:29:56,280
Provisioning should apply default labels
811
00:29:56,280 --> 00:29:58,240
to sites and libraries based on purpose.
812
00:29:58,240 --> 00:30:01,600
Approval completion should trigger label validation
813
00:30:01,600 --> 00:30:04,680
before content moves to an externally shareable zone.
814
00:30:04,680 --> 00:30:07,120
Agents should operate in spaces where labeling discipline
815
00:30:07,120 --> 00:30:09,640
exists because otherwise they become a high speed interface
816
00:30:09,640 --> 00:30:11,440
to your ungoverned past.
817
00:30:11,440 --> 00:30:12,640
Here's what most people miss.
818
00:30:12,640 --> 00:30:15,400
Label first is not about making compliance happy.
819
00:30:15,400 --> 00:30:16,880
It's about giving your automation
820
00:30:16,880 --> 00:30:18,400
a deterministic control surface.
821
00:30:18,400 --> 00:30:20,800
When a flow runs, it should be able to check a label
822
00:30:20,800 --> 00:30:21,880
and know what to do.
823
00:30:21,880 --> 00:30:24,040
When a quick step executes, it should run
824
00:30:24,040 --> 00:30:26,840
into the same label-based boundary every time.
825
00:30:26,840 --> 00:30:28,280
When an agent suggests an action,
826
00:30:28,280 --> 00:30:31,040
the enforcement layer should be able to say yes or no
827
00:30:31,040 --> 00:30:33,280
based on label-driven policy, not on vibes.
828
00:30:33,280 --> 00:30:34,600
That's the foundation.
829
00:30:34,600 --> 00:30:35,880
And once labels are real,
830
00:30:35,880 --> 00:30:39,400
DLP becomes something else entirely, not a compliance report.
831
00:30:39,400 --> 00:30:42,280
A runtime gate, DLP as a runtime gate,
832
00:30:42,280 --> 00:30:44,840
stop leakage, log intent, allow business.
833
00:30:44,840 --> 00:30:46,800
DLP is where the enterprise stops pretending
834
00:30:46,800 --> 00:30:49,280
it can train its way out of data leakage.
835
00:30:49,280 --> 00:30:52,240
Most organizations deploy DLP like a museum alarm.
836
00:30:52,240 --> 00:30:55,480
It exists, it's loud, and everyone learns how to walk around it.
837
00:30:55,480 --> 00:30:58,520
The modern blueprint treats DLP as a runtime gate,
838
00:30:58,520 --> 00:31:00,880
a control that evaluates the moment of action,
839
00:31:00,880 --> 00:31:02,920
blocks the bad parts and records the intent
840
00:31:02,920 --> 00:31:04,280
when you allow an exception.
841
00:31:04,280 --> 00:31:06,480
That distinction matters because automation changes
842
00:31:06,480 --> 00:31:07,520
the leakage shape.
843
00:31:07,520 --> 00:31:10,520
Without automation, leakage usually happens through a person,
844
00:31:10,520 --> 00:31:13,600
copied to USB, forward an email, share a link.
845
00:31:13,600 --> 00:31:17,000
With automation, leakage happens through a workflow identity.
846
00:31:17,000 --> 00:31:19,040
Move this file, email this PDF,
847
00:31:19,040 --> 00:31:21,280
sync this data that posted to that connector,
848
00:31:21,280 --> 00:31:22,680
and because it's machine speed,
849
00:31:22,680 --> 00:31:24,800
the volume can spike before anyone notices.
850
00:31:24,800 --> 00:31:26,400
So the DLP job isn't to be perfect.
851
00:31:26,400 --> 00:31:28,080
It's to be present at the exact moment
852
00:31:28,080 --> 00:31:30,480
your workflows move data across a boundary.
853
00:31:30,480 --> 00:31:32,760
The enterprise requirement is unified DLP,
854
00:31:32,760 --> 00:31:35,480
one policy language, many surfaces.
855
00:31:35,480 --> 00:31:38,280
SharePoint libraries, teams files, one drive endpoints,
856
00:31:38,280 --> 00:31:39,720
and the connectors your flows use
857
00:31:39,720 --> 00:31:41,960
all represent different X filtration parts.
858
00:31:41,960 --> 00:31:44,520
If DLP only exists in one of those layers,
859
00:31:44,520 --> 00:31:46,760
you've built a control that blocks the honest user
860
00:31:46,760 --> 00:31:47,920
and misses the real root.
861
00:31:47,920 --> 00:31:51,400
Pervuse value is that the same classification concepts,
862
00:31:51,400 --> 00:31:54,080
sensitive info types, labels, locations,
863
00:31:54,080 --> 00:31:56,400
can be expressed as a single enforcement strategy
864
00:31:56,400 --> 00:31:58,360
instead of five separate rulebooks maintained
865
00:31:58,360 --> 00:31:59,640
by five different teams.
866
00:31:59,640 --> 00:32:02,560
And then you stratify, this is where most DLP programs fail.
867
00:32:02,560 --> 00:32:05,400
They create one policy that tries to protect everything
868
00:32:05,400 --> 00:32:07,160
and it ends up either blocking the business
869
00:32:07,160 --> 00:32:08,280
or blocking nothing.
870
00:32:08,280 --> 00:32:10,760
The blueprint is explicit policy stratification,
871
00:32:10,760 --> 00:32:13,400
separate blast radii for separate data classes.
872
00:32:13,400 --> 00:32:14,680
PII is one blast radius.
873
00:32:14,680 --> 00:32:17,000
Financial data is another, source code is another,
874
00:32:17,000 --> 00:32:19,960
M&A documents are another, HR investigations are another.
875
00:32:19,960 --> 00:32:22,600
Why? Because what counts as acceptable friction
876
00:32:22,600 --> 00:32:24,520
is different for each class.
877
00:32:24,520 --> 00:32:27,040
An engineer moving code to a repo is not the same
878
00:32:27,040 --> 00:32:29,240
as a recruiter sharing candidate data.
879
00:32:29,240 --> 00:32:30,560
If you treat them the same,
880
00:32:30,560 --> 00:32:33,600
you either destroy productivity or normalize bypasses.
881
00:32:33,600 --> 00:32:35,360
Now, the runtime part.
882
00:32:35,360 --> 00:32:38,600
A good DLP gate doesn't just block.
883
00:32:38,600 --> 00:32:40,720
It offers controlled outcomes, allow, block,
884
00:32:40,720 --> 00:32:42,280
or allow with justification.
885
00:32:42,280 --> 00:32:44,720
And allow with justification is not a feel good compromise.
886
00:32:44,720 --> 00:32:46,000
It's a telemetry generator.
887
00:32:46,000 --> 00:32:47,920
If someone needs to share something sensitive
888
00:32:47,920 --> 00:32:50,640
for a legitimate reason, the system can allow it.
889
00:32:50,640 --> 00:32:52,760
But only if the user supplies a reason
890
00:32:52,760 --> 00:32:56,240
and only if that event is logged as a high signal audit trail.
891
00:32:56,240 --> 00:32:58,600
That creates two things you never get from blanket blocking,
892
00:32:58,600 --> 00:33:00,560
accountability and attuning loop.
893
00:33:00,560 --> 00:33:02,560
Because false positives are not a bug.
894
00:33:02,560 --> 00:33:04,160
They're a feature of pattern-based detection
895
00:33:04,160 --> 00:33:05,800
meeting messy enterprise data.
896
00:33:05,800 --> 00:33:09,080
So you design an escalation path and attuning loop on purpose.
897
00:33:09,080 --> 00:33:11,400
When the system blocks a legitimate business action,
898
00:33:11,400 --> 00:33:13,280
there must be a known place to go.
899
00:33:13,280 --> 00:33:15,720
A request path, a review queue,
900
00:33:15,720 --> 00:33:18,600
a policy exception process that is time bound
901
00:33:18,600 --> 00:33:20,080
and tied to an owner.
902
00:33:20,080 --> 00:33:22,640
And when the system allows something with justification,
903
00:33:22,640 --> 00:33:26,760
that justification data becomes input into policy refinement.
904
00:33:26,760 --> 00:33:29,240
Over time, the policy stops being theoretical
905
00:33:29,240 --> 00:33:32,280
and starts reflecting how the business actually moves data.
906
00:33:32,280 --> 00:33:34,120
Here's the part automation teams miss.
907
00:33:34,120 --> 00:33:37,000
DLP has to understand your automation identities.
908
00:33:37,000 --> 00:33:39,120
If a flow runs under a service principle
909
00:33:39,120 --> 00:33:42,280
or managed identity, the DLP posture needs to account for it.
910
00:33:42,280 --> 00:33:44,480
Otherwise, you end up with the worst outcome.
911
00:33:44,480 --> 00:33:45,760
Humans blocked.
912
00:33:45,760 --> 00:33:47,520
Automations free.
913
00:33:47,520 --> 00:33:50,560
That is how we lockdown sharing turns into the workflow
914
00:33:50,560 --> 00:33:52,600
emailed the file externally anyway.
915
00:33:52,600 --> 00:33:54,600
So the blueprint requires this.
916
00:33:54,600 --> 00:33:57,960
Every automation pathway that exports, shares, or transforms
917
00:33:57,960 --> 00:34:00,960
content gets treated as a data egress point.
918
00:34:00,960 --> 00:34:02,720
It's evaluated, it's locked, and it
919
00:34:02,720 --> 00:34:04,880
has an owner who can explain why it exists.
920
00:34:04,880 --> 00:34:07,480
Now connect DLP back to quick steps and approvals.
921
00:34:07,480 --> 00:34:10,600
Quick steps reduce friction, which means they increase usage,
922
00:34:10,600 --> 00:34:12,720
which means they increase risk surface.
923
00:34:12,720 --> 00:34:15,080
If execute flow is available on sensitive libraries,
924
00:34:15,080 --> 00:34:17,320
then DLP and labeling must sit behind it
925
00:34:17,320 --> 00:34:18,880
as a non-negotiable gate.
926
00:34:18,880 --> 00:34:22,000
Approvals create state, but they don't enforce classification.
927
00:34:22,000 --> 00:34:23,720
So the enforcement must happen at the moment
928
00:34:23,720 --> 00:34:26,960
of sharing, moving, exporting, or posting to other systems.
929
00:34:26,960 --> 00:34:28,600
Especially when the action is triggered
930
00:34:28,600 --> 00:34:32,760
by approved status and nobody is watching the downstream step.
931
00:34:32,760 --> 00:34:34,680
So the DLP design goal is brutally simple.
932
00:34:34,680 --> 00:34:36,760
Stop leakage, log intent, allow business.
933
00:34:36,760 --> 00:34:39,160
And if you do it right, DLP becomes less
934
00:34:39,160 --> 00:34:42,040
about security theater and more about engineering reality,
935
00:34:42,040 --> 00:34:43,880
a runtime decision engine that reduces
936
00:34:43,880 --> 00:34:46,240
blast radius while producing evidence.
937
00:34:46,240 --> 00:34:47,520
Now none of this matters if you can't
938
00:34:47,520 --> 00:34:48,640
see what the system is doing.
939
00:34:48,640 --> 00:34:51,440
A runtime gate without observability is just silent failure
940
00:34:51,440 --> 00:34:52,520
with better branding.
941
00:34:52,520 --> 00:34:55,600
Observability architecture, audit logs, diagnostics,
942
00:34:55,600 --> 00:34:57,520
Sentinel and real signals.
943
00:34:57,520 --> 00:35:00,600
If governance is enforcement, observability is proof.
944
00:35:00,600 --> 00:35:03,640
And enterprises don't fail because they lacked policies.
945
00:35:03,640 --> 00:35:05,560
They fail because they couldn't prove what happened
946
00:35:05,560 --> 00:35:08,360
when automation did something weird at 2.13 a.m.
947
00:35:08,360 --> 00:35:11,480
Observability is how a workflow platform stays a platform
948
00:35:11,480 --> 00:35:14,560
instead of becoming a haunted house of it usually works.
949
00:35:14,560 --> 00:35:16,040
Start with the unified audit log
950
00:35:16,040 --> 00:35:18,440
because it's the thing everyone vaguely knows exists
951
00:35:18,440 --> 00:35:20,560
and almost nobody designs around.
952
00:35:20,560 --> 00:35:21,880
The audit log is good at answering
953
00:35:21,880 --> 00:35:24,160
who did what to which object and when.
954
00:35:24,160 --> 00:35:27,400
File access, file shared, permission changed,
955
00:35:27,400 --> 00:35:30,000
sensitivity label applied, guest invited,
956
00:35:30,000 --> 00:35:31,560
that's the compliance great trail.
957
00:35:31,560 --> 00:35:33,320
It's the ledger you pull when legal asks
958
00:35:33,320 --> 00:35:35,880
or when an incident responder needs attribution.
959
00:35:35,880 --> 00:35:37,440
But it's not operational telemetry.
960
00:35:37,440 --> 00:35:39,520
It won't tell you why you're flow-run five times.
961
00:35:39,520 --> 00:35:41,320
It won't show you latency distributions.
962
00:35:41,320 --> 00:35:43,160
It won't give you an execution graph.
963
00:35:43,160 --> 00:35:45,240
And it definitely won't explain failure modes
964
00:35:45,240 --> 00:35:48,160
inside power automate, Azure functions or logic apps.
965
00:35:48,160 --> 00:35:51,240
So treat the audit log as the what happened source.
966
00:35:51,240 --> 00:35:53,720
Not the how is it behaving source.
967
00:35:53,720 --> 00:35:55,240
That distinction matters.
968
00:35:55,240 --> 00:35:58,280
Next, diagnostic logs, SharePoint, Entra,
969
00:35:58,280 --> 00:36:01,040
and the automation runtime all generate diagnostics
970
00:36:01,040 --> 00:36:03,200
that are closer to engineering reality.
971
00:36:03,200 --> 00:36:05,560
Requests, throttles, API responses,
972
00:36:05,560 --> 00:36:08,640
connector errors, job durations, queue depth,
973
00:36:08,640 --> 00:36:09,960
retry counts.
974
00:36:09,960 --> 00:36:11,280
These belong in log analytics
975
00:36:11,280 --> 00:36:14,560
because you want one place where you can correlate identity signals,
976
00:36:14,560 --> 00:36:17,440
SharePoint activity and workflow execution.
977
00:36:17,440 --> 00:36:19,520
This is where most orgs quietly lose.
978
00:36:19,520 --> 00:36:20,960
They log in each silo.
979
00:36:20,960 --> 00:36:23,080
Power automate run history sits in one place,
980
00:36:23,080 --> 00:36:26,160
function logs sit in another SharePoint activity sits somewhere else.
981
00:36:26,160 --> 00:36:28,000
Sentinel has alerts but not context.
982
00:36:28,000 --> 00:36:31,120
And then during an incident, someone screenshots five portals
983
00:36:31,120 --> 00:36:33,080
and calls it root cause analysis.
984
00:36:33,080 --> 00:36:34,000
But that's not analysis.
985
00:36:34,000 --> 00:36:34,960
That's archaeology.
986
00:36:34,960 --> 00:36:37,280
So the observability architecture is explicit,
987
00:36:37,280 --> 00:36:39,680
centralized telemetry, normalized correlation,
988
00:36:39,680 --> 00:36:41,400
and make queries repeatable.
989
00:36:41,400 --> 00:36:43,440
A practical pattern is to stamp everything
990
00:36:43,440 --> 00:36:46,640
with correlation identifiers you can carry across the system.
991
00:36:46,640 --> 00:36:49,160
Event ID, site ID, item ID, flow run ID,
992
00:36:49,160 --> 00:36:51,920
function invocation ID, user ID, service principle ID.
993
00:36:51,920 --> 00:36:54,800
If you can't join the data, you can't reason about the system.
994
00:36:54,800 --> 00:36:57,120
And if you can't reason about it, you can't scale it.
995
00:36:57,120 --> 00:36:58,240
Now Sentinel.
996
00:36:58,240 --> 00:37:00,400
Sentinel is not the place you dump logs
997
00:37:00,400 --> 00:37:02,120
and hope intelligence happens.
998
00:37:02,120 --> 00:37:04,080
Sentinel is where you codify detections
999
00:37:04,080 --> 00:37:06,120
that matter for SharePoint automation.
1000
00:37:06,120 --> 00:37:08,320
Oversharing patterns, abnormal access
1001
00:37:08,320 --> 00:37:11,160
and automation identities, doing suspicious things.
1002
00:37:11,160 --> 00:37:13,120
Start with Oversharing detections.
1003
00:37:13,120 --> 00:37:16,640
New anonymous links created on a library that should never allow them.
1004
00:37:16,640 --> 00:37:19,480
A spike in shared with external user's events.
1005
00:37:19,480 --> 00:37:21,160
A folder with broken inheritance
1006
00:37:21,160 --> 00:37:23,600
that suddenly starts receiving labeled content.
1007
00:37:23,600 --> 00:37:25,120
Those are high signal events
1008
00:37:25,120 --> 00:37:27,960
because they represent boundary failure, not just activity.
1009
00:37:27,960 --> 00:37:29,640
Then abnormal access patterns,
1010
00:37:29,640 --> 00:37:32,200
a guest account downloading hundreds of files.
1011
00:37:32,200 --> 00:37:34,680
A user accessing a site they never touched before
1012
00:37:34,680 --> 00:37:36,280
right after an invitation,
1013
00:37:36,280 --> 00:37:38,600
a service principle reading across many sites
1014
00:37:38,600 --> 00:37:40,320
outside its normal scope.
1015
00:37:40,320 --> 00:37:42,080
Those aren't maybe incidences.
1016
00:37:42,080 --> 00:37:42,960
They're the kinds of patterns
1017
00:37:42,960 --> 00:37:45,560
that if you ignore them, become breach narratives.
1018
00:37:45,560 --> 00:37:49,120
And now the part most org skip automation failure signals.
1019
00:37:49,120 --> 00:37:51,040
A flow failing is not an IT problem.
1020
00:37:51,040 --> 00:37:52,360
It's a business process outage.
1021
00:37:52,360 --> 00:37:55,240
So your detections need to include sustained failure rates
1022
00:37:55,240 --> 00:37:57,240
above a threshold, dead letter growth,
1023
00:37:57,240 --> 00:37:59,840
retreats exceeding normal QAG exceeding SLA
1024
00:37:59,840 --> 00:38:02,840
and flows with no owners receiving failure notifications.
1025
00:38:02,840 --> 00:38:05,880
Failure without alerting is just deferred surprise.
1026
00:38:05,880 --> 00:38:07,320
That leads to the brutal question,
1027
00:38:07,320 --> 00:38:08,880
what metrics actually matter?
1028
00:38:08,880 --> 00:38:10,320
Most dashboards are vanity.
1029
00:38:10,320 --> 00:38:13,280
The real signals are latency, throughput, failure rate
1030
00:38:13,280 --> 00:38:15,480
and drift, latency.
1031
00:38:15,480 --> 00:38:17,840
How long from event to enforcement?
1032
00:38:17,840 --> 00:38:20,160
Not run duration and to end time.
1033
00:38:20,160 --> 00:38:22,160
Even approval takes two days fine.
1034
00:38:22,160 --> 00:38:25,120
But if label applied after upload takes 30 minutes,
1035
00:38:25,120 --> 00:38:26,960
you've just created an exposure window.
1036
00:38:26,960 --> 00:38:30,920
throughput, events processed per unit time
1037
00:38:30,920 --> 00:38:33,480
and how that changes during predictable spikes.
1038
00:38:33,480 --> 00:38:36,360
Month end, Monday morning, quarter close,
1039
00:38:36,360 --> 00:38:39,160
the system must survive reality, not average load.
1040
00:38:39,160 --> 00:38:41,240
Failure rate not did it fail once.
1041
00:38:41,240 --> 00:38:42,800
Failure distribution by connector,
1042
00:38:42,800 --> 00:38:46,120
by side, by label, by identity, by workflow version.
1043
00:38:46,120 --> 00:38:48,600
This is how you find systemic brittleness.
1044
00:38:48,600 --> 00:38:50,880
Drift trend lines.
1045
00:38:50,880 --> 00:38:52,920
Permissions inheritance breaks over time,
1046
00:38:52,920 --> 00:38:55,560
guest count per site, number of flows per site,
1047
00:38:55,560 --> 00:38:57,320
number of quick step invocation points,
1048
00:38:57,320 --> 00:38:58,720
number of exceptions.
1049
00:38:58,720 --> 00:39:00,280
Drift is your entropy meter.
1050
00:39:00,280 --> 00:39:01,800
And here's the governance outcome.
1051
00:39:01,800 --> 00:39:04,640
Observability isn't optional because you like monitoring.
1052
00:39:04,640 --> 00:39:06,120
And it's required because automation
1053
00:39:06,120 --> 00:39:08,000
without observability is blind execution
1054
00:39:08,000 --> 00:39:10,320
and blind execution eventually hits the one library
1055
00:39:10,320 --> 00:39:13,080
that contained the one document that triggers the one audit.
1056
00:39:13,080 --> 00:39:15,240
So once you've built the control plane,
1057
00:39:15,240 --> 00:39:17,360
identity labels, DLP and telemetry,
1058
00:39:17,360 --> 00:39:19,200
you can finally talk about scale scenarios
1059
00:39:19,200 --> 00:39:20,520
without lying to yourself.
1060
00:39:20,520 --> 00:39:22,880
And the first one is the most common enterprise fantasy,
1061
00:39:22,880 --> 00:39:25,200
provisioning, scenario one framing.
1062
00:39:25,200 --> 00:39:27,960
Provisioning is a factory line, not a request form.
1063
00:39:27,960 --> 00:39:30,320
Provisioning is where SharePoint automation stops
1064
00:39:30,320 --> 00:39:32,080
being a convenience feature and becomes
1065
00:39:32,080 --> 00:39:34,160
an enterprise liability generator
1066
00:39:34,160 --> 00:39:36,120
because every organization starts the same way.
1067
00:39:36,120 --> 00:39:38,680
Someone creates a site for a project, then another.
1068
00:39:38,680 --> 00:39:40,360
Someone uses a template.
1069
00:39:40,360 --> 00:39:41,200
Someone doesn't.
1070
00:39:41,200 --> 00:39:42,480
Someone adds owners directly.
1071
00:39:42,480 --> 00:39:44,240
Someone breaks inheritance on a folder
1072
00:39:44,240 --> 00:39:46,080
because finance needs privacy.
1073
00:39:46,080 --> 00:39:47,920
Guests get invited because it's urgent.
1074
00:39:47,920 --> 00:39:51,280
A year later, nobody remembers why half of these sites exist,
1075
00:39:51,280 --> 00:39:54,520
who owns them or which ones contain regulated content.
1076
00:39:54,520 --> 00:39:56,120
That isn't user failure.
1077
00:39:56,120 --> 00:39:57,520
That's a missing factory.
1078
00:39:57,520 --> 00:40:00,600
Most enterprises treat provisioning
1079
00:40:00,600 --> 00:40:02,280
like a request form problem.
1080
00:40:02,280 --> 00:40:04,040
Let's make a form, ask a few questions
1081
00:40:04,040 --> 00:40:05,480
and route it for approval.
1082
00:40:05,480 --> 00:40:06,280
They get the form.
1083
00:40:06,280 --> 00:40:07,640
They even get the approval.
1084
00:40:07,640 --> 00:40:10,160
What they never build is the assembly line behind it.
1085
00:40:10,160 --> 00:40:12,840
Deterministic creation, deterministic configuration,
1086
00:40:12,840 --> 00:40:15,400
deterministic access model and deterministic life cycle.
1087
00:40:15,400 --> 00:40:16,680
So the framing is strict.
1088
00:40:16,680 --> 00:40:18,040
Provisioning is manufacturing.
1089
00:40:18,040 --> 00:40:20,160
A request is just demand signal.
1090
00:40:20,160 --> 00:40:22,600
The product is a workspace with known properties
1091
00:40:22,600 --> 00:40:24,600
and if you don't build it like manufacturing,
1092
00:40:24,600 --> 00:40:26,560
you don't get some inconsistency.
1093
00:40:26,560 --> 00:40:28,280
Are you getting uncontrolled estate?
1094
00:40:28,280 --> 00:40:30,120
Thousands of workspaces that behave differently,
1095
00:40:30,120 --> 00:40:32,440
leak differently and fail audits differently.
1096
00:40:32,440 --> 00:40:35,080
The factory line model starts with a few non-negotiables.
1097
00:40:35,080 --> 00:40:38,920
First, every site is created from a template, not usually.
1098
00:40:38,920 --> 00:40:41,040
Always, the template isn't only branding.
1099
00:40:41,040 --> 00:40:43,920
It's baseline controls, default sharing posture,
1100
00:40:43,920 --> 00:40:46,280
default sensitivity label expectations,
1101
00:40:46,280 --> 00:40:48,920
default library structure, default navigation,
1102
00:40:48,920 --> 00:40:51,120
default owners and members mapping,
1103
00:40:51,120 --> 00:40:53,800
default retention configuration where applicable
1104
00:40:53,800 --> 00:40:56,040
and the metadata standards that make automation
1105
00:40:56,040 --> 00:40:57,520
reliable later.
1106
00:40:57,520 --> 00:41:01,080
Second, every site has a countable ownership at creation time.
1107
00:41:01,080 --> 00:41:03,760
Not a person's name typed into a text field.
1108
00:41:03,760 --> 00:41:06,680
An Entra group as the owner with at least two human owners
1109
00:41:06,680 --> 00:41:09,400
inside it and an actual life cycle expectation.
1110
00:41:09,400 --> 00:41:11,360
If ownership is optional, the estate becomes
1111
00:41:11,360 --> 00:41:12,960
often on day one.
1112
00:41:12,960 --> 00:41:15,280
Then your life cycle policy becomes a clean up script
1113
00:41:15,280 --> 00:41:16,880
that no one wants to run because it will
1114
00:41:16,880 --> 00:41:18,480
delete something important.
1115
00:41:18,480 --> 00:41:20,680
Third, permissions come from the group model,
1116
00:41:20,680 --> 00:41:22,160
not from creativity.
1117
00:41:22,160 --> 00:41:24,680
The provisioning pipeline doesn't ask who should have access.
1118
00:41:24,680 --> 00:41:26,960
And it asks which access model applies.
1119
00:41:26,960 --> 00:41:29,440
Internal project, external collaboration zone,
1120
00:41:29,440 --> 00:41:31,840
records repository, department hub,
1121
00:41:31,840 --> 00:41:35,240
each one maps to a predefined set of groups and site settings.
1122
00:41:35,240 --> 00:41:37,400
That's how you stop every new workspace
1123
00:41:37,400 --> 00:41:41,200
from being a custom snowflake with a custom risk profile.
1124
00:41:41,200 --> 00:41:44,160
Now the part lead is always under estimate volume.
1125
00:41:44,160 --> 00:41:48,080
At enterprise scale, provisioning isn't a few sites per week.
1126
00:41:48,080 --> 00:41:50,000
It's constant background noise, new teams,
1127
00:41:50,000 --> 00:41:52,960
new initiatives, new partners, reorganizations, acquisitions,
1128
00:41:52,960 --> 00:41:54,960
divestitures and compliance requirements
1129
00:41:54,960 --> 00:41:56,720
that force new segregation.
1130
00:41:56,720 --> 00:41:59,480
The demand doesn't slow down because governance is busy.
1131
00:41:59,480 --> 00:42:01,240
It speeds up because the business is busy.
1132
00:42:01,240 --> 00:42:02,600
That means the provisioning system
1133
00:42:02,600 --> 00:42:03,920
can't be a human pipeline.
1134
00:42:03,920 --> 00:42:06,560
It has to be event driven and async
1135
00:42:06,560 --> 00:42:09,160
with predictable throughput and failure handling.
1136
00:42:09,160 --> 00:42:11,240
Because a manual synchronous provisioning flow
1137
00:42:11,240 --> 00:42:12,760
doesn't just create delays.
1138
00:42:12,760 --> 00:42:14,120
It creates bypass behavior.
1139
00:42:14,120 --> 00:42:15,520
People will create sites directly
1140
00:42:15,520 --> 00:42:17,240
because it's urgent and your factory
1141
00:42:17,240 --> 00:42:19,320
gets quietly replaced by shadow manufacturing.
1142
00:42:19,320 --> 00:42:21,600
So a scalable provisioning pattern looks like this.
1143
00:42:21,600 --> 00:42:25,920
Intake, validate, approve, provision, enforce and register.
1144
00:42:25,920 --> 00:42:29,160
Intake is your request portal form or agent-driven entry point.
1145
00:42:29,160 --> 00:42:30,920
That's the only place you collect human intent.
1146
00:42:30,920 --> 00:42:33,720
Validation is where you enforce naming standards,
1147
00:42:33,720 --> 00:42:36,520
required fields and policy eligibility.
1148
00:42:36,520 --> 00:42:39,680
Can this user request an external collaboration site?
1149
00:42:39,680 --> 00:42:43,320
Is this business unit allowed to create a hub site association?
1150
00:42:43,320 --> 00:42:46,600
Does this workload require a retention label?
1151
00:42:46,600 --> 00:42:49,960
The validation step is where you reject bad requests quickly
1152
00:42:49,960 --> 00:42:52,480
before you create infrastructure you'll regret.
1153
00:42:52,480 --> 00:42:54,560
Approval is not about gatekeeping creation.
1154
00:42:54,560 --> 00:42:56,280
Approval is about allocating risk.
1155
00:42:56,280 --> 00:42:57,960
Someone with actual authority signs
1156
00:42:57,960 --> 00:42:59,800
of that this workspace should exist
1157
00:42:59,800 --> 00:43:00,840
with these boundaries.
1158
00:43:00,840 --> 00:43:03,240
And the approval must be tied to the same identity model
1159
00:43:03,240 --> 00:43:04,600
you'll enforce later.
1160
00:43:04,600 --> 00:43:06,640
If approvers are ad hoc, you've created a loophole
1161
00:43:06,640 --> 00:43:08,120
with a pretty UI.
1162
00:43:08,120 --> 00:43:10,640
Provisioning itself is pure execution.
1163
00:43:10,640 --> 00:43:13,800
Create the site using graph, apply the template,
1164
00:43:13,800 --> 00:43:17,040
associate to the correct hub, create libraries and lists,
1165
00:43:17,040 --> 00:43:20,320
apply baseline settings, create the owner member groups
1166
00:43:20,320 --> 00:43:21,720
and apply permissions.
1167
00:43:21,720 --> 00:43:24,760
No branching business logic scattered across 20 flow steps,
1168
00:43:24,760 --> 00:43:28,200
one provisioning service, versioned, testable and repeatable.
1169
00:43:28,200 --> 00:43:29,960
And then the thing everyone forgets.
1170
00:43:29,960 --> 00:43:30,880
Registration.
1171
00:43:30,880 --> 00:43:33,360
If a site exists but isn't registered in an inventory
1172
00:43:33,360 --> 00:43:35,920
with purpose, owner group, classification expectations
1173
00:43:35,920 --> 00:43:37,560
and lifecycle policy, it's invisible.
1174
00:43:37,560 --> 00:43:39,400
Invisible becomes ungovernable.
1175
00:43:39,400 --> 00:43:41,840
Ungovernable becomes, we didn't know it was there
1176
00:43:41,840 --> 00:43:43,560
when co-pilot start surfacing it
1177
00:43:43,560 --> 00:43:46,320
or when an auditor asks why a partner still has access
1178
00:43:46,320 --> 00:43:48,080
two years after the contract ended.
1179
00:43:48,080 --> 00:43:49,680
Finally, lifecycle.
1180
00:43:49,680 --> 00:43:52,240
Provisioning without lifecycle is just automated sprawl.
1181
00:43:52,240 --> 00:43:54,560
So the factory must include in activity thresholds
1182
00:43:54,560 --> 00:43:56,160
renewal prompts for ownership,
1183
00:43:56,160 --> 00:43:59,160
enforced transfer of ownership when owners leave archival pathways
1184
00:43:59,160 --> 00:44:01,680
and retirement that's policy driven instead of emotional.
1185
00:44:01,680 --> 00:44:03,720
The system doesn't ask humans to remember.
1186
00:44:03,720 --> 00:44:06,680
It detects, notifies, escalates and then enforces.
1187
00:44:06,680 --> 00:44:07,440
That's the frame.
1188
00:44:07,440 --> 00:44:10,360
Provisioning is a factory line, not a request form.
1189
00:44:10,360 --> 00:44:12,920
And once you accept that, the next section gets concrete.
1190
00:44:12,920 --> 00:44:15,160
The reference architecture that implements this factory
1191
00:44:15,160 --> 00:44:18,280
with graph provisioning and queue-based orchestration.
1192
00:44:18,280 --> 00:44:20,640
Scenario one reference architecture, graph provisioning
1193
00:44:20,640 --> 00:44:22,440
plus queue-based orchestration.
1194
00:44:22,440 --> 00:44:24,480
The reference architecture is deliberately boring
1195
00:44:24,480 --> 00:44:27,480
because boring is what survives enterprise scale.
1196
00:44:27,480 --> 00:44:30,120
It starts with an entry point that looks like a request
1197
00:44:30,120 --> 00:44:33,760
but behaves like a contract, a form, a portal, an agent.
1198
00:44:33,760 --> 00:44:34,680
It doesn't matter.
1199
00:44:34,680 --> 00:44:36,280
What matters is the payload.
1200
00:44:36,280 --> 00:44:38,720
Purpose, data classification expectations,
1201
00:44:38,720 --> 00:44:41,440
internal versus external, requested owners group
1202
00:44:41,440 --> 00:44:43,440
and any required lifecycle dates.
1203
00:44:43,440 --> 00:44:45,160
And if the request can't express intent
1204
00:44:45,160 --> 00:44:47,280
in a structured way, the provisioning pipeline
1205
00:44:47,280 --> 00:44:49,440
can't enforce it later, you'll be guessing.
1206
00:44:49,440 --> 00:44:51,600
Systems guess badly.
1207
00:44:51,600 --> 00:44:54,160
From there, the first component is validation.
1208
00:44:54,160 --> 00:44:57,040
Not does the form have values, policy validation,
1209
00:44:57,040 --> 00:45:01,000
naming conventions, allowed site types, allowed hubs,
1210
00:45:01,000 --> 00:45:02,640
allowed sharing posture.
1211
00:45:02,640 --> 00:45:05,840
If the request asks for an external collaboration site,
1212
00:45:05,840 --> 00:45:07,840
the validator checks whether the requester
1213
00:45:07,840 --> 00:45:10,160
is allowed to sponsor external access,
1214
00:45:10,160 --> 00:45:12,360
whether the tenant policy allows it
1215
00:45:12,360 --> 00:45:15,520
and whether the right collaboration zone exists.
1216
00:45:15,520 --> 00:45:18,080
If the request fails validation, it stops here,
1217
00:45:18,080 --> 00:45:19,600
cleanly, with a reason.
1218
00:45:19,600 --> 00:45:22,040
The goal is to fail fast before anything exists.
1219
00:45:22,040 --> 00:45:22,920
Then approval.
1220
00:45:22,920 --> 00:45:23,880
This is the risk gate.
1221
00:45:23,880 --> 00:45:26,480
The approver isn't someone in IT.
1222
00:45:26,480 --> 00:45:28,880
It's the authority that owns the risk, business owner
1223
00:45:28,880 --> 00:45:32,080
for the workspace plus, when required, compliance,
1224
00:45:32,080 --> 00:45:34,600
or security for specific data classes.
1225
00:45:34,600 --> 00:45:36,760
The approval object is stored as evidence,
1226
00:45:36,760 --> 00:45:38,600
who approved what they approved
1227
00:45:38,600 --> 00:45:40,560
and what policy profile was applied.
1228
00:45:40,560 --> 00:45:42,080
And if you can't reconstruct that later,
1229
00:45:42,080 --> 00:45:44,520
you don't have governance, you have folklore.
1230
00:45:44,520 --> 00:45:46,560
Now the actual provisioning path, Microsoft Graph,
1231
00:45:46,560 --> 00:45:49,160
Graph creates the site, but the provisioning service
1232
00:45:49,160 --> 00:45:50,800
owns the choreography.
1233
00:45:50,800 --> 00:45:54,360
Site creation, hub association, baseline site settings,
1234
00:45:54,360 --> 00:45:57,000
default sharing posture, feature toggles that matter,
1235
00:45:57,000 --> 00:45:59,600
library creation, list creation, navigation, homepage,
1236
00:45:59,600 --> 00:46:01,720
this is where teams get tempted to embed logic
1237
00:46:01,720 --> 00:46:04,440
into a 200 step flow, don't.
1238
00:46:04,440 --> 00:46:06,440
The provisioning service should be one unit,
1239
00:46:06,440 --> 00:46:08,600
versioned, testable, and repeatable.
1240
00:46:08,600 --> 00:46:09,880
If you can't redeploy it safely,
1241
00:46:09,880 --> 00:46:11,560
you'll end up with old sites and new sites
1242
00:46:11,560 --> 00:46:13,520
that behave differently, and then your support team
1243
00:46:13,520 --> 00:46:16,440
lives in a split-brainer state, permissions are applied next,
1244
00:46:16,440 --> 00:46:18,080
and they are not optional.
1245
00:46:18,080 --> 00:46:20,200
Owners and members map to entra-groups,
1246
00:46:20,200 --> 00:46:22,600
nested groups where you need roll separation.
1247
00:46:22,600 --> 00:46:24,680
No direct assignments because direct assignments
1248
00:46:24,680 --> 00:46:27,680
don't scale and they don't survive staff turnover.
1249
00:46:27,680 --> 00:46:29,480
The provisioning service sets the groups,
1250
00:46:29,480 --> 00:46:32,480
assigns them to the site, and writes the group IDs
1251
00:46:32,480 --> 00:46:35,200
back into the site metadata or a central inventory,
1252
00:46:35,200 --> 00:46:37,000
so you can later prove which group
1253
00:46:37,000 --> 00:46:38,760
was supposed to control access.
1254
00:46:38,760 --> 00:46:40,720
Now the part that makes this actually scale,
1255
00:46:40,720 --> 00:46:42,360
queue-based orchestration.
1256
00:46:42,360 --> 00:46:44,760
The intake and approval pipeline should not do the work.
1257
00:46:44,760 --> 00:46:46,800
It should include the work, a queue message includes
1258
00:46:46,800 --> 00:46:48,760
the request ID, the target site profile,
1259
00:46:48,760 --> 00:46:51,400
the damp-potency key, and the desired state,
1260
00:46:51,400 --> 00:46:54,160
then workers pull from the queue and execute provisioning steps.
1261
00:46:54,160 --> 00:46:56,080
Why? Because you need retries, you need back-off,
1262
00:46:56,080 --> 00:46:57,760
and you need to survive graph throttling
1263
00:46:57,760 --> 00:47:00,240
without turning provisioning into a timeout festival.
1264
00:47:00,240 --> 00:47:02,080
IDem potency is the hard requirement.
1265
00:47:02,080 --> 00:47:04,160
If the same request gets processed twice,
1266
00:47:04,160 --> 00:47:07,160
the second run must detect this site already exists,
1267
00:47:07,160 --> 00:47:09,400
and converge it to the desired configuration,
1268
00:47:09,400 --> 00:47:10,600
not create a duplicate.
1269
00:47:10,600 --> 00:47:13,840
That means the system keeps a durable state record.
1270
00:47:13,840 --> 00:47:16,040
Request received approved site-created,
1271
00:47:16,040 --> 00:47:19,080
hub-joined permissions applied baseline configured registration
1272
00:47:19,080 --> 00:47:19,680
completed.
1273
00:47:19,680 --> 00:47:22,200
If a worker dies halfway, the next worker resumes.
1274
00:47:22,200 --> 00:47:23,200
No guesswork.
1275
00:47:23,200 --> 00:47:25,160
Retries are engineered, not hoped for.
1276
00:47:25,160 --> 00:47:26,960
Transient graph errors get retried
1277
00:47:26,960 --> 00:47:28,400
with exponential back-off.
1278
00:47:28,400 --> 00:47:30,760
Permanent errors get sent to a dead-letter queue
1279
00:47:30,760 --> 00:47:33,400
with the full context needed to replay safely,
1280
00:47:33,400 --> 00:47:35,080
and replay isn't click-run again for it.
1281
00:47:35,080 --> 00:47:37,040
Replay is, re-inqueue the same request
1282
00:47:37,040 --> 00:47:39,840
with the same IDem potency key and let the system converge.
1283
00:47:39,840 --> 00:47:42,520
Finally, registration and reporting.
1284
00:47:42,520 --> 00:47:45,120
Every provisioned site is written to an inventory.
1285
00:47:45,120 --> 00:47:48,360
Purpose, owner group, sensitivity expectations,
1286
00:47:48,360 --> 00:47:51,920
external collaboration status, and life cycle policy.
1287
00:47:51,920 --> 00:47:54,160
This inventory feeds monitoring and governance.
1288
00:47:54,160 --> 00:47:56,240
It's also how you answer the only question leaders
1289
00:47:56,240 --> 00:47:59,920
care about during audits, how many exist, who owns them,
1290
00:47:59,920 --> 00:48:01,120
and are they compliant?
1291
00:48:01,120 --> 00:48:03,360
That's the reference architecture, contract intake,
1292
00:48:03,360 --> 00:48:05,960
policy validation, explicit approval evidence,
1293
00:48:05,960 --> 00:48:08,480
graph-based provisioning, group first permissions,
1294
00:48:08,480 --> 00:48:11,120
and queue-driven orchestration with IDem potency.
1295
00:48:11,120 --> 00:48:12,120
It's not glamorous.
1296
00:48:12,120 --> 00:48:13,200
It's operable.
1297
00:48:13,200 --> 00:48:15,440
Scenario one, SharePoint Native layer,
1298
00:48:15,440 --> 00:48:19,000
Quick steps and integrated workflows as front ends.
1299
00:48:19,000 --> 00:48:20,720
Now comes the part that confuses people
1300
00:48:20,720 --> 00:48:23,880
because they think provisioning ends when the site exists.
1301
00:48:23,880 --> 00:48:24,720
It doesn't.
1302
00:48:24,720 --> 00:48:27,320
Provisioning ends when users can do the right thing by default.
1303
00:48:27,320 --> 00:48:30,520
This is where SharePoint Native automation features fit.
1304
00:48:30,520 --> 00:48:34,480
Quick steps, integrated workflows, and lightweight approvals,
1305
00:48:34,480 --> 00:48:35,840
not as the provisioning system,
1306
00:48:35,840 --> 00:48:37,880
but as the front ends that let humans interact
1307
00:48:37,880 --> 00:48:40,360
with the factory without having to understand the factory.
1308
00:48:40,360 --> 00:48:42,240
Start with Quick steps.
1309
00:48:42,240 --> 00:48:44,800
In this architecture, Quick steps are not random convenience
1310
00:48:44,800 --> 00:48:47,160
buttons created by whoever has edit rights.
1311
00:48:47,160 --> 00:48:49,960
Quick steps are standardized in vocation points.
1312
00:48:49,960 --> 00:48:53,120
The sanctioned set of actions uses can take on content
1313
00:48:53,120 --> 00:48:55,920
that will always root into the governed automation path.
1314
00:48:55,920 --> 00:48:58,880
That means you treat Quick steps like an API surface.
1315
00:48:58,880 --> 00:49:01,440
You decide which actions exist beside template.
1316
00:49:01,440 --> 00:49:04,320
You decide which libraries get which Quick steps,
1317
00:49:04,320 --> 00:49:06,760
and you decide what those Quick steps are allowed to trigger.
1318
00:49:06,760 --> 00:49:09,080
Because the biggest mistake is letting every library owner
1319
00:49:09,080 --> 00:49:12,800
invent their own buttons and accidentally create a shadow process landscape.
1320
00:49:12,800 --> 00:49:16,840
The simple pattern is, Quick steps give users consistent verbs,
1321
00:49:16,840 --> 00:49:18,040
submit for review.
1322
00:49:18,040 --> 00:49:19,320
Request external share.
1323
00:49:19,320 --> 00:49:20,280
Move to funded.
1324
00:49:20,280 --> 00:49:21,200
Create case.
1325
00:49:21,200 --> 00:49:23,800
Those verbs should map to explicit metadata transitions,
1326
00:49:23,800 --> 00:49:25,240
not direct side effects.
1327
00:49:25,240 --> 00:49:28,760
A Quick step that sets status from draft to submit it is predictable.
1328
00:49:28,760 --> 00:49:32,040
A Quick step that moves files between libraries, changes permissions,
1329
00:49:32,040 --> 00:49:34,280
and emails external recipients is not.
1330
00:49:34,280 --> 00:49:37,400
Side effects belong in orchestration, not in UI buttons.
1331
00:49:37,400 --> 00:49:40,840
So you design Quick steps to do one job, mark intent.
1332
00:49:40,840 --> 00:49:42,800
Then your pipeline listens for that intent
1333
00:49:42,800 --> 00:49:45,920
and executes the controlled steps behind it.
1334
00:49:45,920 --> 00:49:49,560
This also makes idempotency easier because status change to submitted
1335
00:49:49,560 --> 00:49:51,560
becomes your stable event rather than user
1336
00:49:51,560 --> 00:49:54,320
click the button five times because the UI lagged.
1337
00:49:54,320 --> 00:49:55,880
Now integrated workflows.
1338
00:49:55,880 --> 00:49:59,080
Microsoft is bringing a workflows UX into SharePoint
1339
00:49:59,080 --> 00:50:03,240
that looks like Teams workflows, templates, pre-configured connections,
1340
00:50:03,240 --> 00:50:06,840
simple edits, and a build from scratch path.
1341
00:50:06,840 --> 00:50:09,480
For enterprise automation, the value isn't that it's easier to build.
1342
00:50:09,480 --> 00:50:13,040
The value is that it's easier to standardize if you treat it correctly.
1343
00:50:13,040 --> 00:50:15,520
Integrated workflows should exist as approved templates
1344
00:50:15,520 --> 00:50:19,360
that implement front and patterns, notifications, reminders, lightweight
1345
00:50:19,360 --> 00:50:21,320
routing, and simple post-approval steps
1346
00:50:21,320 --> 00:50:23,680
that don't cross major governance boundaries.
1347
00:50:23,680 --> 00:50:26,760
They're allowed to accelerate the last mile of team productivity
1348
00:50:26,760 --> 00:50:28,680
because they run inside the site context
1349
00:50:28,680 --> 00:50:30,360
and make the experience cohesive.
1350
00:50:30,360 --> 00:50:32,160
But the system law stays intact.
1351
00:50:32,160 --> 00:50:35,080
Anything that looks like a backend service does not live here.
1352
00:50:35,080 --> 00:50:37,520
Provisioning doesn't live here, life cycle doesn't live here,
1353
00:50:37,520 --> 00:50:41,280
compliance enforcement doesn't live here, high volume event processing doesn't live here.
1354
00:50:41,280 --> 00:50:44,160
Those belong in the central orchestration layer you already designed
1355
00:50:44,160 --> 00:50:46,680
because you need versioning, deployment control,
1356
00:50:46,680 --> 00:50:49,600
retries, and a single place to observe system behavior.
1357
00:50:49,600 --> 00:50:52,560
So the enterprise rule is SharePoint native workflows
1358
00:50:52,560 --> 00:50:54,720
are front ends, not foundations.
1359
00:50:54,720 --> 00:50:56,680
They handle the human facing edges.
1360
00:50:56,680 --> 00:51:00,640
The places where people start a process, get notified, provide input,
1361
00:51:00,640 --> 00:51:01,640
and see status.
1362
00:51:01,640 --> 00:51:04,240
The moment the workflow needs to do something irreversible
1363
00:51:04,240 --> 00:51:07,680
cross boundary or high risk, it hands off to the central pipeline
1364
00:51:07,680 --> 00:51:11,720
through a controlled mechanism, a queue message, a call to a function,
1365
00:51:11,720 --> 00:51:15,640
or a standardized connector action that hits your orchestration endpoint,
1366
00:51:15,640 --> 00:51:19,880
that handoff is the line between team automation and enterprise automation.
1367
00:51:19,880 --> 00:51:23,800
Now the ugly feature, execute flow inside quick steps.
1368
00:51:23,800 --> 00:51:27,760
It's powerful because it turns any document library into a launch pad for process.
1369
00:51:27,760 --> 00:51:31,240
It's dangerous because it turns any document library into a launch pad for process.
1370
00:51:31,240 --> 00:51:33,760
The governance issue isn't that it can trigger a flow.
1371
00:51:33,760 --> 00:51:38,520
The issue is that it can trigger a flow that lives outside the mental model of the site.
1372
00:51:38,520 --> 00:51:41,400
And because it can target flows outside the default environment,
1373
00:51:41,400 --> 00:51:44,600
you can end up with a button in a library that invokes automation
1374
00:51:44,600 --> 00:51:49,120
in an environment your governance team doesn't associate with that site's risk profile.
1375
00:51:49,120 --> 00:51:52,880
So the control is simple, don't govern flows, govern invocation.
1376
00:51:52,880 --> 00:51:55,040
Only approved quick steps can execute flows.
1377
00:51:55,040 --> 00:51:57,880
Only approved flows can be executed from quick steps.
1378
00:51:57,880 --> 00:52:01,440
And those approvals need to be enforced by environment strategy and ownership rules,
1379
00:52:01,440 --> 00:52:03,080
not by please don't.
1380
00:52:03,080 --> 00:52:07,080
This is where power platform governance intersects with SharePoint design.
1381
00:52:07,080 --> 00:52:10,880
If your environment strategy is loose, quick steps become a convenient bypass.
1382
00:52:10,880 --> 00:52:15,080
If your environment strategy is strict, quick steps become a safe accelerator.
1383
00:52:15,080 --> 00:52:20,200
Now talk about accountability because enterprise workflows don't fail gracefully when nobody owns them.
1384
00:52:20,200 --> 00:52:24,120
SharePoints workflows pay and exposes things like run history and owners.
1385
00:52:24,120 --> 00:52:27,840
That's useful, but it's not enough unless you standardize ownership as a requirement.
1386
00:52:27,840 --> 00:52:30,480
Every workflow must have an owner group, not a person.
1387
00:52:30,480 --> 00:52:35,160
Every workflow must emit failure signals to a monitored channel, not to someone's inbox.
1388
00:52:35,160 --> 00:52:38,880
And every workflow must be tied to the site inventory so you can answer
1389
00:52:38,880 --> 00:52:42,280
what automations exist here, who owns them and what happens when they break.
1390
00:52:42,280 --> 00:52:47,880
This is also why the SharePoint native layer should be deployed through templates, not created ad hoc.
1391
00:52:47,880 --> 00:52:51,800
The template defines the quick steps, the allowed workflows, the approval settings,
1392
00:52:51,800 --> 00:52:54,000
and the metadata columns that represent state.
1393
00:52:54,000 --> 00:52:57,600
Users get a clean experience, the enterprise gets a predictable control surface.
1394
00:52:57,600 --> 00:53:00,600
And with that, the front end and the factory finally align.
1395
00:53:00,600 --> 00:53:05,320
People click a simple button, metadata moves to a new state, the event pipeline triggers,
1396
00:53:05,320 --> 00:53:10,080
the orchestration executes, and enforcement applies labels, permissions, and logging.
1397
00:53:10,080 --> 00:53:12,560
The UI stays simple, the architecture stays real.
1398
00:53:12,560 --> 00:53:16,800
Scenario one, lifecycle enforcement archive, log transfer ownership, retire.
1399
00:53:16,800 --> 00:53:20,760
Lifecycle enforcement is the part everyone agrees with in theory and then quietly avoids
1400
00:53:20,760 --> 00:53:24,080
because it forces the organization to admit something uncomfortable.
1401
00:53:24,080 --> 00:53:26,240
Workspaces are liabilities.
1402
00:53:26,240 --> 00:53:28,600
A SharePoint site is not a place to collaborate.
1403
00:53:28,600 --> 00:53:32,120
It's a permission boundary, a data container, and a long-term obligation.
1404
00:53:32,120 --> 00:53:36,760
If the lifecycle is optional, your automation program doesn't scale into productivity.
1405
00:53:36,760 --> 00:53:39,320
It scales into an estate, you can't explain.
1406
00:53:39,320 --> 00:53:43,160
So the lifecycle pattern has to be designed like enforcement, not like reminders.
1407
00:53:43,160 --> 00:53:47,040
Start with inactivity handling because that's the cleanest signal you'll ever get.
1408
00:53:47,040 --> 00:53:52,280
A site stops being used, file stop changing, pages stop being edited, membership stops shifting.
1409
00:53:52,280 --> 00:53:55,520
And yes, there are edge cases, a site can be quiet and still important.
1410
00:53:55,520 --> 00:53:57,520
That's why the system doesn't delete first.
1411
00:53:57,520 --> 00:54:02,720
It detects, then it notifies, then it escalates, then it enforces.
1412
00:54:02,720 --> 00:54:04,720
A scalable policy looks like this.
1413
00:54:04,720 --> 00:54:08,880
After end days of inactivity, notify the owner group with a simple choice.
1414
00:54:08,880 --> 00:54:11,520
Extend, archive, or retire.
1415
00:54:11,520 --> 00:54:14,480
If they extend, they must supply a reason and an end date.
1416
00:54:14,480 --> 00:54:17,720
That reason becomes evidence, not because auditors love text fields,
1417
00:54:17,720 --> 00:54:21,240
but because future humans need to understand why the exception existed.
1418
00:54:21,240 --> 00:54:23,920
If nobody responds, the system does what humans always avoid.
1419
00:54:23,920 --> 00:54:24,920
It proceeds.
1420
00:54:24,920 --> 00:54:27,240
Archival is not a vibe, it's a state transition.
1421
00:54:27,240 --> 00:54:31,400
Archived means membership is locked down, editing is restricted,
1422
00:54:31,400 --> 00:54:37,320
external sharing is disabled, and the site becomes read only, or near read only, depending on your policy.
1423
00:54:37,320 --> 00:54:41,800
If the business needs to reopen it, they can, but reopening is an explicit action
1424
00:54:41,800 --> 00:54:45,880
with an audit trail, not an accident caused by someone stumbling into ad member,
1425
00:54:45,880 --> 00:54:50,440
then you implement locking because some content should remain accessible but not mutable.
1426
00:54:50,440 --> 00:54:54,640
Locking is the difference between we kept it and we preserved evidence.
1427
00:54:54,640 --> 00:54:59,840
Now if a project is over, you don't want someone to upload final documents six months later and rewrite history.
1428
00:54:59,840 --> 00:55:02,080
So the policy defines when the system locks.
1429
00:55:02,080 --> 00:55:07,320
Project end date, contract termination, regulatory trigger, or a status transition like closed.
1430
00:55:07,320 --> 00:55:12,080
The lock should be enforced by permission changes and sharing posture, not by telling users to behave.
1431
00:55:12,080 --> 00:55:15,760
Now ownership often sites are the default outcome of staff turnover.
1432
00:55:15,760 --> 00:55:19,360
People change roles, leave the company, or stop caring about the project.
1433
00:55:19,360 --> 00:55:24,560
If site ownership is tied to individuals, the system will inevitably lose its accountable humans
1434
00:55:24,560 --> 00:55:28,880
and your life cycle engine becomes a dead process, emailing an empty inbox.
1435
00:55:28,880 --> 00:55:31,440
So ownership enforcement is an identity workflow.
1436
00:55:31,440 --> 00:55:36,080
On a schedule, the system checks whether the owner group still has active human owners.
1437
00:55:36,080 --> 00:55:39,520
If not, it triggers a transfer policy, notify the business unit sponsor,
1438
00:55:39,520 --> 00:55:42,720
require reassignment within a time window, and if that doesn't happen,
1439
00:55:42,720 --> 00:55:48,560
the site moves to a restricted state, not deleted, restricted, because unowned mutable collaboration zones
1440
00:55:48,560 --> 00:55:51,920
are how data leaks and governance collapses, and yes, this feels harsh.
1441
00:55:51,920 --> 00:55:52,720
Good.
1442
00:55:52,720 --> 00:55:54,800
Harsh is what prevents your future incident review.
1443
00:55:54,800 --> 00:55:59,520
The next step is content hygiene, which is where people want magic and the platform provides reality.
1444
00:55:59,520 --> 00:56:05,200
Stale pages, broken links, duplicate documents, and we have five versions of the same policy in five sites.
1445
00:56:05,200 --> 00:56:07,920
Some of this can be detected, some of it can't.
1446
00:56:07,920 --> 00:56:09,840
The architecture principle stays simple.
1447
00:56:09,840 --> 00:56:13,120
Hygiene is a signal generator, not a cleanup promise.
1448
00:56:13,120 --> 00:56:15,920
So you run periodic scans where capabilities exist.
1449
00:56:15,920 --> 00:56:20,160
Detect orphaned pages, detect broken links, detect duplicate files by hash,
1450
00:56:20,160 --> 00:56:24,160
where your tooling supports it, flag libraries with extreme item counts,
1451
00:56:24,160 --> 00:56:27,120
and flag unlabeled content in high risk locations.
1452
00:56:27,120 --> 00:56:30,080
The outcome isn't the system fixes everything.
1453
00:56:30,080 --> 00:56:34,240
The outcome is the system produces a prioritized backlog for the owner group,
1454
00:56:34,240 --> 00:56:38,400
and it can gait future automation on unresolved hygiene when risk requires it.
1455
00:56:38,400 --> 00:56:43,840
Now automation failure handling, because life cycle workflows are long running and long running workflows fail.
1456
00:56:43,840 --> 00:56:47,200
At scale, a life cycle engine needs dead letter patterns.
1457
00:56:47,200 --> 00:56:51,200
When an archive action fails, the message goes to a dead letter queue with context,
1458
00:56:51,200 --> 00:56:52,720
not to a buried run history.
1459
00:56:52,720 --> 00:56:54,080
It needs retreats with back off.
1460
00:56:54,080 --> 00:56:59,280
It needs idempotency, so you don't lock and unlock repeatedly because of duplicate events.
1461
00:56:59,280 --> 00:57:01,920
And it needs a human override path that's logged in time bound,
1462
00:57:01,920 --> 00:57:05,040
because someone fixed it manually is not an operational model.
1463
00:57:05,040 --> 00:57:07,760
The retirement step is the one everyone wants to skip.
1464
00:57:07,760 --> 00:57:11,520
Retire means content is disposed according to retention policy.
1465
00:57:11,520 --> 00:57:15,200
The site is deleted when it is legally allowed, and the inventory record is updated,
1466
00:57:15,200 --> 00:57:16,640
so you can prove it happened.
1467
00:57:16,640 --> 00:57:19,280
Retire is not a button, it's a governed outcome.
1468
00:57:19,280 --> 00:57:21,360
And the whole life cycle model has one purpose.
1469
00:57:21,360 --> 00:57:25,360
Keep your share point automation estate converging toward policy over time,
1470
00:57:25,360 --> 00:57:26,880
instead of drifting away from it.
1471
00:57:26,880 --> 00:57:31,360
Because automation doesn't create order, enforcement does, scenario two framing.
1472
00:57:31,360 --> 00:57:33,920
Compliance isn't a project, it's continuous evidence.
1473
00:57:33,920 --> 00:57:36,880
Compliance is where we'll clean it up later, goes to die.
1474
00:57:36,880 --> 00:57:39,520
Because leaders keep treating compliance like a project,
1475
00:57:39,520 --> 00:57:42,160
hire someone right-of-policy runner-migration,
1476
00:57:42,160 --> 00:57:44,320
do an audit, celebrate, and move on.
1477
00:57:44,320 --> 00:57:46,400
That model works only if content stops changing.
1478
00:57:46,400 --> 00:57:47,920
SharePoint does not stop changing.
1479
00:57:47,920 --> 00:57:49,920
Automation makes it change faster.
1480
00:57:49,920 --> 00:57:51,760
AI makes it change in more places at once,
1481
00:57:51,760 --> 00:57:53,360
so compliance can't be an initiative.
1482
00:57:53,360 --> 00:57:55,360
It has to be a continuous evidence system.
1483
00:57:55,360 --> 00:57:59,280
That distinction matters because regulators don't ask whether you had good intentions.
1484
00:57:59,280 --> 00:58:01,040
They ask whether you can prove outcomes.
1485
00:58:01,040 --> 00:58:03,840
Retention happened, holes were honored, access was controlled,
1486
00:58:03,840 --> 00:58:05,760
and you can reconstruct who did what,
1487
00:58:05,760 --> 00:58:09,360
to which record, under which authority, at which time.
1488
00:58:09,360 --> 00:58:12,240
And proof means evidence you can generate on demand.
1489
00:58:12,240 --> 00:58:14,480
Not a spreadsheet someone updated manually,
1490
00:58:14,480 --> 00:58:15,920
not a screenshot from a portal,
1491
00:58:15,920 --> 00:58:18,960
not a story that begins with, normally, our process is.
1492
00:58:18,960 --> 00:58:21,520
The compliance reality is this.
1493
00:58:21,520 --> 00:58:25,760
Once automation exists, the blast radius of a failure becomes a legal event.
1494
00:58:25,760 --> 00:58:28,800
If a workflow mis-roots a document underhold,
1495
00:58:28,800 --> 00:58:31,520
or a label gets skipped, or a library becomes overshared,
1496
00:58:31,520 --> 00:58:34,080
and an agent surfaces it, the impact isn't only technical,
1497
00:58:34,080 --> 00:58:35,280
it's defensibility.
1498
00:58:35,280 --> 00:58:37,520
So scenario two is built around one idea.
1499
00:58:37,520 --> 00:58:41,280
Compliance is continuous because the system never stops producing new content,
1500
00:58:41,280 --> 00:58:43,840
new copies, new links, and new access parts.
1501
00:58:43,840 --> 00:58:46,400
Start with the regulatory requirements you actually face.
1502
00:58:46,400 --> 00:58:49,440
Retention and disposal, what must be kept,
1503
00:58:49,440 --> 00:58:51,920
for how long, and what must be deleted when allowed.
1504
00:58:51,920 --> 00:58:56,560
Legal hold, what must be preserved immediately and indefinitely when a case triggers it.
1505
00:58:56,560 --> 00:59:00,720
Immutability, where records must not be altered even by administrators.
1506
00:59:00,720 --> 00:59:05,120
Audit trail, the ability to show a chain of custody for content and decisions.
1507
00:59:05,120 --> 00:59:07,280
Those aren't features, their system properties.
1508
00:59:07,280 --> 00:59:10,640
And this is where organizations make the foundational mistake,
1509
00:59:10,640 --> 00:59:13,280
they try to bolt these properties onto a chaotic estate.
1510
00:59:13,280 --> 00:59:16,880
They treat records management as a set of labels you apply after the fact.
1511
00:59:16,880 --> 00:59:19,680
But at scale, retroactive compliance is fantasy.
1512
00:59:19,680 --> 00:59:21,680
It always becomes a backlog that never ends,
1513
00:59:21,680 --> 00:59:24,880
because the platform produces content faster than you can classify it.
1514
00:59:24,880 --> 00:59:26,000
So the framing has to flip.
1515
00:59:26,000 --> 00:59:28,800
Compliance begins at creation, not at audit time.
1516
00:59:28,800 --> 00:59:31,280
That leads directly into the records model,
1517
00:59:31,280 --> 00:59:33,760
because compliance isn't just keep everything.
1518
00:59:33,760 --> 00:59:35,920
You have to define what becomes a record,
1519
00:59:35,920 --> 00:59:38,960
when it becomes a record, and who has the authority to declare it.
1520
00:59:38,960 --> 00:59:42,240
A draft contract in negotiation is not the same as an executed contract.
1521
00:59:42,240 --> 00:59:45,360
A policy page in progress is not the same as an approved policy.
1522
00:59:45,360 --> 00:59:48,720
A project document under review is not the same as the final deliverable
1523
00:59:48,720 --> 00:59:50,320
that drives a regulated decision.
1524
00:59:50,320 --> 00:59:52,560
If you don't encode that difference into the system,
1525
00:59:52,560 --> 00:59:55,600
you end up retaining everything forever because nobody trusts,
1526
00:59:55,600 --> 00:59:57,360
disposal, then storage explodes.
1527
00:59:57,360 --> 01:00:00,720
Discovery becomes impossible, and audits become painful.
1528
01:00:00,720 --> 01:00:04,560
So the records model has to be expressed as deterministic state transitions.
1529
01:00:04,560 --> 01:00:06,640
Approved becomes record.
1530
01:00:07,280 --> 01:00:08,880
Published becomes record.
1531
01:00:08,880 --> 01:00:11,040
Case opened, applies, hold.
1532
01:00:11,040 --> 01:00:13,440
That's the only model that scales because it ties compliance
1533
01:00:13,440 --> 01:00:15,680
to workflow outcomes the platform can observe.
1534
01:00:15,680 --> 01:00:17,920
Now, here's the part people try to negotiate.
1535
01:00:17,920 --> 01:00:18,880
Label first.
1536
01:00:18,880 --> 01:00:22,080
They want to treat labeling as optional because it slows users down.
1537
01:00:22,080 --> 01:00:25,280
But in compliance workloads, label first is not optional.
1538
01:00:25,280 --> 01:00:27,920
It's the only scalable classifier under pressure.
1539
01:00:27,920 --> 01:00:30,480
Without labels, retention policies can't target correctly,
1540
01:00:30,480 --> 01:00:32,400
DLP can't reason consistently,
1541
01:00:32,400 --> 01:00:34,240
and audit evidence becomes ambiguous.
1542
01:00:34,240 --> 01:00:37,440
And ambiguities what gets organizations hurt in audits.
1543
01:00:37,440 --> 01:00:40,800
So the compliance blueprint forces label assignment into the system.
1544
01:00:40,800 --> 01:00:43,680
Templates apply default sensitivity expectations.
1545
01:00:43,680 --> 01:00:46,960
Workflows validate labeling before moving content across boundaries.
1546
01:00:46,960 --> 01:00:50,080
Approval completion triggers retention outcomes where required,
1547
01:00:50,080 --> 01:00:52,160
and exceptions are not allowed silently.
1548
01:00:52,160 --> 01:00:56,240
If something can't be labeled, it goes into an exception lane with an owner and a timer.
1549
01:00:56,240 --> 01:00:57,600
That's what leaders need to understand.
1550
01:00:57,600 --> 01:01:00,240
You don't get compliance by asking people to care.
1551
01:01:00,240 --> 01:01:04,160
You get compliance by making the compliant path the path of least resistance.
1552
01:01:04,160 --> 01:01:06,640
Now, layer in the continuous evidence part.
1553
01:01:06,640 --> 01:01:09,200
Continuous evidence means the system continuously
1554
01:01:09,200 --> 01:01:10,720
emits proof artifacts.
1555
01:01:10,720 --> 01:01:13,840
Label applied events, retention policy evaluation,
1556
01:01:13,840 --> 01:01:17,200
sharing decisions, access changes, and workflow actions
1557
01:01:17,200 --> 01:01:18,800
that affect records state.
1558
01:01:18,800 --> 01:01:22,240
It also means the organization can answer hard questions quickly.
1559
01:01:22,240 --> 01:01:24,320
Show all records in this category.
1560
01:01:24,320 --> 01:01:25,920
Show all items under hold.
1561
01:01:25,920 --> 01:01:28,400
Show all external shares for labeled content.
1562
01:01:28,400 --> 01:01:32,560
Show all workflows that moved content out of a retention scope location.
1563
01:01:32,560 --> 01:01:35,520
If that query requires five teams in two weeks, you don't have evidence.
1564
01:01:35,520 --> 01:01:37,200
You have organizational memory.
1565
01:01:37,200 --> 01:01:40,560
An organizational memory fails exactly when you need it most.
1566
01:01:40,560 --> 01:01:42,960
So scenario two isn't how to do retention.
1567
01:01:42,960 --> 01:01:45,200
It's how to design an enterprise compliance plane
1568
01:01:45,200 --> 01:01:48,080
that stays true as automation accelerates change.
1569
01:01:48,080 --> 01:01:49,840
Deterministic records state.
1570
01:01:49,840 --> 01:01:51,920
Label first classification, enforced holds,
1571
01:01:51,920 --> 01:01:54,800
and evidence you can stream into monitoring and investigations.
1572
01:01:54,800 --> 01:01:56,640
And once that framing is clear,
1573
01:01:56,640 --> 01:01:58,480
the next section becomes straightforward.
1574
01:01:58,480 --> 01:01:59,680
The actual architecture,
1575
01:01:59,680 --> 01:02:03,120
purview for retention and labels, DLP as runtime enforcement,
1576
01:02:03,120 --> 01:02:05,360
and audit streaming for defensibility.
1577
01:02:05,360 --> 01:02:08,400
Scenario two architecture retention, legal hold,
1578
01:02:08,400 --> 01:02:10,400
and audit defensibility by design.
1579
01:02:10,400 --> 01:02:13,680
So the architecture for compliance has to do three things at once.
1580
01:02:13,680 --> 01:02:15,440
Enforced retention outcomes,
1581
01:02:15,440 --> 01:02:17,920
freeze content instantly when legal says so,
1582
01:02:17,920 --> 01:02:21,040
and generate evidence without begging humans for screenshots.
1583
01:02:21,040 --> 01:02:24,640
Start with purview retention labels and retention policies
1584
01:02:24,640 --> 01:02:27,360
because that's where you declare the immutable truth.
1585
01:02:27,360 --> 01:02:30,480
What gets kept for how long and what happens at the end.
1586
01:02:30,480 --> 01:02:32,400
Labels are the per-item truth.
1587
01:02:32,400 --> 01:02:35,040
Policies are the where does this truth apply?
1588
01:02:35,040 --> 01:02:36,480
And in enterprise terms,
1589
01:02:36,480 --> 01:02:39,920
the only design that survives scale is scope intentionally,
1590
01:02:39,920 --> 01:02:42,000
publish intentionally, improve intentionally.
1591
01:02:42,000 --> 01:02:44,480
Scope means you don't spray retention across the tenant
1592
01:02:44,480 --> 01:02:45,440
and hope it works.
1593
01:02:45,440 --> 01:02:48,400
You define locations and categories that map to business purpose,
1594
01:02:48,400 --> 01:02:49,600
a contracts library,
1595
01:02:49,600 --> 01:02:52,080
an HRK site, a finance record center,
1596
01:02:52,080 --> 01:02:53,360
a regulated project hub.
1597
01:02:53,360 --> 01:02:56,160
Then you publish the label or policy into those places
1598
01:02:56,160 --> 01:02:58,160
so the system can defend the claim,
1599
01:02:58,160 --> 01:03:02,400
content of this type in this location follows this rule.
1600
01:03:02,400 --> 01:03:05,360
And yes, that means you need fewer clearer locations
1601
01:03:05,360 --> 01:03:07,280
because retention can't fix architecture.
1602
01:03:07,280 --> 01:03:08,960
It can only enforce what you designed.
1603
01:03:08,960 --> 01:03:09,840
Now legal hold.
1604
01:03:09,840 --> 01:03:13,840
Legal hold is where automation usually embarrasses people
1605
01:03:13,840 --> 01:03:15,760
because the business thinks hold is a label
1606
01:03:15,760 --> 01:03:18,560
and IT thinks hold is an e-discovery case
1607
01:03:18,560 --> 01:03:21,360
and nobody designs the state transition in between.
1608
01:03:21,360 --> 01:03:23,920
Architecturally, a hold is a freeze order
1609
01:03:23,920 --> 01:03:26,640
that must override every convenience feature,
1610
01:03:26,640 --> 01:03:29,680
deletion overrides, clean up scripts,
1611
01:03:29,680 --> 01:03:31,120
life cycle retirement,
1612
01:03:31,120 --> 01:03:33,520
and will just move the files.
1613
01:03:33,520 --> 01:03:36,880
So the blueprint is holds are triggered centrally,
1614
01:03:36,880 --> 01:03:38,400
applied automatically,
1615
01:03:38,400 --> 01:03:41,840
and treated as higher priority than every life cycle mechanism.
1616
01:03:41,840 --> 01:03:43,040
If a site is under hold,
1617
01:03:43,040 --> 01:03:45,040
the life cycle engine can still archive it,
1618
01:03:45,040 --> 01:03:46,160
but it cannot dispose it.
1619
01:03:46,160 --> 01:03:48,160
If a record is under hold,
1620
01:03:48,160 --> 01:03:49,440
a workflow can still root it,
1621
01:03:49,440 --> 01:03:51,040
but it cannot transform it into a new
1622
01:03:51,040 --> 01:03:53,920
untracked copy without logging and policy review.
1623
01:03:53,920 --> 01:03:55,040
Holds don't stop work.
1624
01:03:55,040 --> 01:03:56,560
They stop irreversible outcomes.
1625
01:03:56,560 --> 01:03:57,840
That distinction matters.
1626
01:03:57,840 --> 01:04:00,400
Now sensitivity labels.
1627
01:04:00,400 --> 01:04:02,800
Sensitivity is the access expectation layer
1628
01:04:02,800 --> 01:04:04,480
and for compliance it's the difference between
1629
01:04:04,480 --> 01:04:06,560
we retain it and we retain it safely.
1630
01:04:06,560 --> 01:04:09,600
If the organization retains regulated data
1631
01:04:09,600 --> 01:04:10,960
but allows broad sharing,
1632
01:04:10,960 --> 01:04:13,680
then retention just preserves the evidence of failure longer.
1633
01:04:13,680 --> 01:04:15,040
So you use sensitivity labels
1634
01:04:15,040 --> 01:04:16,240
to carry enforcement behaviors
1635
01:04:16,240 --> 01:04:18,160
that align with your compliance model.
1636
01:04:18,160 --> 01:04:19,920
Encryption where required,
1637
01:04:19,920 --> 01:04:22,560
restrictions on external sharing where required,
1638
01:04:22,560 --> 01:04:24,560
and consistent user experience signals.
1639
01:04:24,560 --> 01:04:27,040
So people don't accidentally treat sensitive content
1640
01:04:27,040 --> 01:04:29,040
as general collaboration content.
1641
01:04:29,040 --> 01:04:30,560
And this is where the platform's behavior
1642
01:04:30,560 --> 01:04:31,520
becomes uncomfortable.
1643
01:04:31,520 --> 01:04:32,880
Labels need to be applied early
1644
01:04:32,880 --> 01:04:34,720
because retroactive labeling after exposure
1645
01:04:34,720 --> 01:04:37,040
is just an audit artifact, not protection.
1646
01:04:37,040 --> 01:04:39,440
So your architecture wires labeling into creation
1647
01:04:39,440 --> 01:04:41,120
and into state transitions.
1648
01:04:41,120 --> 01:04:43,200
New site created with a compliance profile
1649
01:04:43,200 --> 01:04:45,520
gets a default sensitivity expectation.
1650
01:04:45,520 --> 01:04:48,160
Content declared as a record gets a label validation step.
1651
01:04:48,160 --> 01:04:51,200
Content moved into a records library gets labeling enforced
1652
01:04:51,200 --> 01:04:53,760
as part of the move, not after it lands.
1653
01:04:53,760 --> 01:04:54,560
Then DLP.
1654
01:04:54,560 --> 01:04:58,320
In this scenario, DLP is the runtime enforcement
1655
01:04:58,320 --> 01:05:00,560
that stops the most common compliance violation
1656
01:05:00,560 --> 01:05:02,400
exporting regulated content into a path
1657
01:05:02,400 --> 01:05:04,640
that retention and hold controls can't see.
1658
01:05:04,640 --> 01:05:06,080
That includes email attachments,
1659
01:05:06,080 --> 01:05:08,080
unmanaged connectors, external shares
1660
01:05:08,080 --> 01:05:10,240
and temporary copies to personal locations.
1661
01:05:10,240 --> 01:05:11,680
DLP doesn't replace retention.
1662
01:05:11,680 --> 01:05:13,680
It protects retention scope boundaries.
1663
01:05:13,680 --> 01:05:16,640
So you design DLP to align with your retention locations
1664
01:05:16,640 --> 01:05:18,400
and your sensitivity labels.
1665
01:05:18,400 --> 01:05:20,560
If content carries a regulated label,
1666
01:05:20,560 --> 01:05:23,120
DLP blocks the obvious exfiltration paths
1667
01:05:23,120 --> 01:05:24,560
and where the business must proceed,
1668
01:05:24,560 --> 01:05:26,560
DLP allows with justification
1669
01:05:26,560 --> 01:05:28,720
and logs the event as a compliance signal.
1670
01:05:28,720 --> 01:05:30,160
Now audit defensibility.
1671
01:05:30,160 --> 01:05:31,920
This is the part everyone says they want,
1672
01:05:31,920 --> 01:05:34,560
but almost nobody implements beyond default logging.
1673
01:05:34,560 --> 01:05:37,440
Defensibility requires correlation,
1674
01:05:37,440 --> 01:05:38,880
a retention decision,
1675
01:05:38,880 --> 01:05:40,240
a hold application,
1676
01:05:40,240 --> 01:05:42,080
a label change, a sharing event,
1677
01:05:42,080 --> 01:05:45,680
and a workflow action all need to be explainable as one narrative.
1678
01:05:45,680 --> 01:05:47,600
So you stream audit logs into a place
1679
01:05:47,600 --> 01:05:49,600
where investigations can actually happen at speed.
1680
01:05:49,600 --> 01:05:52,160
Microsoft's unified audit log gives you the compliance trail
1681
01:05:52,160 --> 01:05:53,920
but you need correlation and detection,
1682
01:05:53,920 --> 01:05:57,120
which means connecting audit signals to Sentinel
1683
01:05:57,120 --> 01:05:59,600
or another seam workflow where you can build queries
1684
01:05:59,600 --> 01:06:01,760
and alerts that answer real questions.
1685
01:06:01,760 --> 01:06:03,760
Show all external shares of content
1686
01:06:03,760 --> 01:06:05,200
with this sensitivity label.
1687
01:06:05,200 --> 01:06:07,600
Show all attempts to delete content under hold,
1688
01:06:07,600 --> 01:06:09,120
show all automation identities
1689
01:06:09,120 --> 01:06:11,600
that modified records libraries show all sites
1690
01:06:11,600 --> 01:06:14,080
where retention policies were removed or changed.
1691
01:06:14,080 --> 01:06:16,160
And because compliance is continuous evidence,
1692
01:06:16,160 --> 01:06:17,840
you don't only investigate incidents,
1693
01:06:17,840 --> 01:06:20,160
you generate proof packs on a schedule.
1694
01:06:20,160 --> 01:06:23,280
For leadership, that means the architecture
1695
01:06:23,280 --> 01:06:25,200
includes reporting by design,
1696
01:06:25,200 --> 01:06:27,120
retention coverage by location,
1697
01:06:27,120 --> 01:06:28,640
hold coverage by case,
1698
01:06:28,640 --> 01:06:30,720
oversharing for regulated labels
1699
01:06:30,720 --> 01:06:33,440
and workflow pathways that touch regulated content.
1700
01:06:33,440 --> 01:06:37,040
If those reports require a one-time project to assemble,
1701
01:06:37,040 --> 01:06:39,120
they won't exist when the auditor asks,
1702
01:06:39,120 --> 01:06:42,240
so the compliance architecture is not turn on retention.
1703
01:06:42,240 --> 01:06:43,200
It is.
1704
01:06:43,200 --> 01:06:46,240
Scoped retention enforcement centralised hold priority,
1705
01:06:46,240 --> 01:06:48,320
label-driven access expectations,
1706
01:06:48,320 --> 01:06:49,920
DLP as boundary protection
1707
01:06:49,920 --> 01:06:52,640
and audit streaming that produces defensible narratives
1708
01:06:52,640 --> 01:06:53,520
without heroics.
1709
01:06:53,520 --> 01:06:56,320
Scenario two workflows,
1710
01:06:56,320 --> 01:06:58,400
lightweight approvals versus custom flows
1711
01:06:58,400 --> 01:07:00,080
versus backend orchestration.
1712
01:07:00,080 --> 01:07:01,600
Now the workflows question,
1713
01:07:01,600 --> 01:07:03,520
because this is where compliance programs
1714
01:07:03,520 --> 01:07:05,520
quietly sabotage themselves.
1715
01:07:05,520 --> 01:07:06,880
They take a regulated process,
1716
01:07:06,880 --> 01:07:08,560
then they scatter its logic across
1717
01:07:08,560 --> 01:07:10,560
whatever automation primitive was easiest
1718
01:07:10,560 --> 01:07:11,840
for the last person who touched it.
1719
01:07:11,840 --> 01:07:13,200
A lightweight approval here,
1720
01:07:13,200 --> 01:07:14,240
a personal flow there,
1721
01:07:14,240 --> 01:07:17,200
a temporary branching workflow in someone's environment.
1722
01:07:17,200 --> 01:07:18,400
Then they call it covered.
1723
01:07:18,400 --> 01:07:21,600
It isn't compliance workflows need one property above all others.
1724
01:07:21,600 --> 01:07:24,080
The decision path must be reconstructable later,
1725
01:07:24,080 --> 01:07:26,080
not just approved or rejected,
1726
01:07:26,080 --> 01:07:27,920
but who approved in what order,
1727
01:07:27,920 --> 01:07:29,120
under what policy,
1728
01:07:29,120 --> 01:07:30,560
with what evidence attached
1729
01:07:30,560 --> 01:07:32,160
and what happened after the approval.
1730
01:07:32,160 --> 01:07:33,680
If you can't replay the logic,
1731
01:07:33,680 --> 01:07:34,960
you can't defend the outcome,
1732
01:07:34,960 --> 01:07:37,600
so pick the primitive based on what must be provable,
1733
01:07:37,600 --> 01:07:39,200
not what is fastest to build.
1734
01:07:39,200 --> 01:07:40,560
Start with lightweight approvals
1735
01:07:40,560 --> 01:07:42,240
in SharePoint lists and libraries.
1736
01:07:42,240 --> 01:07:44,400
They are useful specifically because they keep state
1737
01:07:44,400 --> 01:07:45,200
close to the content,
1738
01:07:45,200 --> 01:07:47,200
the approval status becomes metadata.
1739
01:07:47,200 --> 01:07:48,720
The experience stays in the grid.
1740
01:07:48,720 --> 01:07:50,400
You can define default approvals
1741
01:07:50,400 --> 01:07:52,720
and you can stage and sequence them.
1742
01:07:52,720 --> 01:07:54,880
That's a clean pattern for simple gates.
1743
01:07:54,880 --> 01:07:57,680
This document must be approved before it becomes visible,
1744
01:07:57,680 --> 01:08:00,560
or this item must be reviewed before it gets published.
1745
01:08:00,560 --> 01:08:02,240
And the hidden advantage is governance.
1746
01:08:02,240 --> 01:08:04,240
When the approval status stored on the item,
1747
01:08:04,240 --> 01:08:05,680
it's harder to lose the trail.
1748
01:08:05,680 --> 01:08:07,760
You're not hunting across flow run histories
1749
01:08:07,760 --> 01:08:09,600
and emails to figure out what happened.
1750
01:08:09,600 --> 01:08:12,400
But lightweight approvals have a hard boundary.
1751
01:08:12,400 --> 01:08:14,640
They are not a compliance workflow engine.
1752
01:08:14,640 --> 01:08:16,400
They don't model complex branching,
1753
01:08:16,400 --> 01:08:17,920
conditional attestations,
1754
01:08:17,920 --> 01:08:19,360
dynamic evidence collection,
1755
01:08:19,360 --> 01:08:20,880
or multi-path escalation.
1756
01:08:20,880 --> 01:08:23,840
They also don't replace your need for centralized monitoring.
1757
01:08:23,840 --> 01:08:25,360
They're a front and gate that works
1758
01:08:25,360 --> 01:08:26,560
when the policy is simple
1759
01:08:26,560 --> 01:08:28,480
and the blast radius is contained.
1760
01:08:28,480 --> 01:08:30,400
Now custom power automate approvals.
1761
01:08:30,400 --> 01:08:31,440
This is where people go
1762
01:08:31,440 --> 01:08:33,520
when they need real workflow behavior.
1763
01:08:33,520 --> 01:08:35,200
Branching based on metadata,
1764
01:08:35,200 --> 01:08:36,960
parallel versus sequential approvals,
1765
01:08:36,960 --> 01:08:37,920
conditional routing,
1766
01:08:37,920 --> 01:08:39,920
reminders, SLA's exception handling,
1767
01:08:39,920 --> 01:08:41,440
and recorded justifications.
1768
01:08:41,440 --> 01:08:43,120
And yes, power automate can do it.
1769
01:08:43,120 --> 01:08:44,880
The problem is scale and life cycle.
1770
01:08:44,880 --> 01:08:47,600
A power automate approval flow is a software artifact.
1771
01:08:47,600 --> 01:08:48,560
It needs versioning.
1772
01:08:48,560 --> 01:08:50,080
It needs a deployment model.
1773
01:08:50,080 --> 01:08:52,240
It needs ownership that survives turnover.
1774
01:08:52,240 --> 01:08:53,680
And it needs to be designed
1775
01:08:53,680 --> 01:08:55,600
so that an approver can't be bypassed
1776
01:08:55,600 --> 01:08:58,320
by someone cloning a flow and tweaking one condition.
1777
01:08:58,320 --> 01:09:00,000
The uncomfortable truth is that
1778
01:09:00,000 --> 01:09:02,080
power automate makes it easy to create
1779
01:09:02,080 --> 01:09:04,080
production logic without production discipline.
1780
01:09:04,080 --> 01:09:06,880
That's why compliance teams end up with approval sprawl.
1781
01:09:06,880 --> 01:09:08,560
Dozens of nearly identical flows,
1782
01:09:08,560 --> 01:09:09,680
each slightly different,
1783
01:09:09,680 --> 01:09:11,600
each with its own connector assumptions,
1784
01:09:11,600 --> 01:09:13,520
each with its own failure mode.
1785
01:09:13,520 --> 01:09:14,720
So the rule is strict.
1786
01:09:14,720 --> 01:09:16,880
If you use custom flows for compliance,
1787
01:09:16,880 --> 01:09:19,200
you standardize them as managed assets.
1788
01:09:19,200 --> 01:09:22,560
Solutions, environments naming owners and run visibility.
1789
01:09:22,560 --> 01:09:25,200
No personal flows, no, I'll just fix it in my account.
1790
01:09:25,200 --> 01:09:28,080
EZN says, "Temperties in beer, how is it?"
1791
01:09:28,080 --> 01:09:30,640
That's not automation that's delegated risk.
1792
01:09:30,640 --> 01:09:33,280
Now back-end orchestration logic apps are Azure Functions.
1793
01:09:33,280 --> 01:09:36,000
This is for when the workflow is either high volume,
1794
01:09:36,000 --> 01:09:38,320
high complexity or high consequence.
1795
01:09:38,320 --> 01:09:40,160
High volume means you can't tolerate
1796
01:09:40,160 --> 01:09:43,280
per-run UX, throttles, and fragile connector behavior.
1797
01:09:43,280 --> 01:09:45,520
High complexity means you're transforming content
1798
01:09:45,520 --> 01:09:47,280
calling multiple systems using cues
1799
01:09:47,280 --> 01:09:49,920
and you need deterministic retreatries and idempotency.
1800
01:09:49,920 --> 01:09:53,680
High consequence means a mistake creates legal exposure.
1801
01:09:53,680 --> 01:09:55,760
Records declaration, hold enforcement,
1802
01:09:55,760 --> 01:09:58,560
regulated exports, or irreversible state changes.
1803
01:09:58,560 --> 01:10:00,720
In those cases, the workflow belongs
1804
01:10:00,720 --> 01:10:03,760
in an orchestration layer that behaves like software.
1805
01:10:03,760 --> 01:10:07,440
Source control, deployment pipelines, unit tests where possible,
1806
01:10:07,440 --> 01:10:11,600
structured logging, and a clear separation between decision and execution.
1807
01:10:11,600 --> 01:10:14,160
This is where the approval becomes a service boundary.
1808
01:10:14,160 --> 01:10:16,960
The approval interaction can still happen in SharePoint or Teams
1809
01:10:16,960 --> 01:10:18,800
because humans need a place to click buttons.
1810
01:10:18,800 --> 01:10:20,800
But the system that interprets that approval
1811
01:10:20,800 --> 01:10:23,760
and performs downstream actions lives in the back-end
1812
01:10:23,760 --> 01:10:25,360
where you can actually control it.
1813
01:10:25,360 --> 01:10:27,920
And here's the anti-pattern to call out clearly.
1814
01:10:27,920 --> 01:10:30,800
Approval logic scattered across personal flows.
1815
01:10:30,800 --> 01:10:32,560
That design fails three ways at scale.
1816
01:10:32,560 --> 01:10:35,280
First, it destroys audit defensibility
1817
01:10:35,280 --> 01:10:37,600
because you can't prove which version ran and why.
1818
01:10:37,600 --> 01:10:40,480
Second, it breaks continuity
1819
01:10:40,480 --> 01:10:42,640
because the flow dies when the owner leaves
1820
01:10:42,640 --> 01:10:45,040
or changes their password or loses a license.
1821
01:10:45,040 --> 01:10:47,120
Third, it creates inconsistent enforcement
1822
01:10:47,120 --> 01:10:49,920
because two teams will implement the same policy differently
1823
01:10:49,920 --> 01:10:51,440
and both will swear they're compliant.
1824
01:10:51,440 --> 01:10:52,000
They aren't.
1825
01:10:52,000 --> 01:10:53,440
So the decision matrix is simple.
1826
01:10:53,440 --> 01:10:56,480
If you need a lightweight gate and the state should live on the item,
1827
01:10:56,480 --> 01:10:58,080
use lightweight approvals.
1828
01:10:58,080 --> 01:11:00,560
If you need richer branching, but the process stays inside
1829
01:11:00,560 --> 01:11:02,960
the team boundary use power automate approvals
1830
01:11:02,960 --> 01:11:05,200
but only as a governed managed asset.
1831
01:11:05,200 --> 01:11:07,600
If the workflow crosses systems, crosses tenants,
1832
01:11:07,600 --> 01:11:09,840
touches regulated data at scale
1833
01:11:09,840 --> 01:11:12,160
or must survive organizational entropy,
1834
01:11:12,160 --> 01:11:13,920
move it to back-end orchestration
1835
01:11:13,920 --> 01:11:17,040
and treat approvals as inputs, not as the engine.
1836
01:11:17,040 --> 01:11:18,560
And that sets up the next scenario
1837
01:11:18,560 --> 01:11:20,720
because external collaboration is where approval
1838
01:11:20,720 --> 01:11:23,440
stop being workflow questions and become boundary questions.
1839
01:11:23,440 --> 01:11:24,640
Scenario three framing.
1840
01:11:24,640 --> 01:11:26,480
External sharing is a controlled zone,
1841
01:11:26,480 --> 01:11:27,920
not a per-side preference.
1842
01:11:27,920 --> 01:11:29,600
External sharing is where SharePoint
1843
01:11:29,600 --> 01:11:30,880
stops being collaboration
1844
01:11:30,880 --> 01:11:33,520
and becomes a boundary negotiation with your legal team.
1845
01:11:33,520 --> 01:11:35,600
And the foundational mistake is predictable.
1846
01:11:35,600 --> 01:11:39,040
Organizations treat external sharing as a per-side preference,
1847
01:11:39,040 --> 01:11:42,080
a toggle, a convenient setting the site owner can adjust
1848
01:11:42,080 --> 01:11:44,400
when the partner relationship feels urgent.
1849
01:11:44,400 --> 01:11:45,760
That model is not governance,
1850
01:11:45,760 --> 01:11:47,760
it's delegated risk with a ribbon on it
1851
01:11:47,760 --> 01:11:50,880
because once you allow external sharing as a local preference,
1852
01:11:50,880 --> 01:11:53,200
you don't get one external sharing posture.
1853
01:11:53,200 --> 01:11:55,600
You get hundreds, each one with different link types,
1854
01:11:55,600 --> 01:11:58,240
different expiration behaviors, different guest controls
1855
01:11:58,240 --> 01:12:00,960
and different expectations about what safe means.
1856
01:12:00,960 --> 01:12:02,960
Then the business asks for co-pilot.
1857
01:12:02,960 --> 01:12:05,440
And suddenly your partner side is no longer a quiet place
1858
01:12:05,440 --> 01:12:06,720
to upload documents.
1859
01:12:06,720 --> 01:12:08,480
It's an AI-grounded knowledge surface
1860
01:12:08,480 --> 01:12:10,720
that can summarize, search, and surface content
1861
01:12:10,720 --> 01:12:11,600
at machine speed.
1862
01:12:11,600 --> 01:12:13,760
So the framing for scenario three is strict.
1863
01:12:13,760 --> 01:12:15,760
External sharing is a controlled zone.
1864
01:12:15,760 --> 01:12:17,360
A zone is not a site template.
1865
01:12:17,360 --> 01:12:19,920
A zone is a policy boundary with dedicated defaults,
1866
01:12:19,920 --> 01:12:22,480
dedicated monitoring and dedicated lifecycle rules.
1867
01:12:22,480 --> 01:12:26,400
It exists because external collaboration is not a feature request.
1868
01:12:26,400 --> 01:12:29,120
It's a threat model. Start with the problem reality.
1869
01:12:29,120 --> 01:12:31,280
Partner workspace is happened constantly.
1870
01:12:31,280 --> 01:12:35,360
Vendors, joint ventures, auditors, contractors, client delivery teams.
1871
01:12:35,360 --> 01:12:38,080
And even if IT blocks external sharing broadly,
1872
01:12:38,080 --> 01:12:39,680
users will still share externally.
1873
01:12:39,680 --> 01:12:42,080
They'll email attachments, use personal storage
1874
01:12:42,080 --> 01:12:43,280
or spin-up shadow tools.
1875
01:12:43,280 --> 01:12:46,240
So no external sharing is not a strategy.
1876
01:12:46,240 --> 01:12:47,440
It's denial.
1877
01:12:47,440 --> 01:12:50,000
The strategy is provide an approved path
1878
01:12:50,000 --> 01:12:51,840
that is safer than the bypass.
1879
01:12:51,840 --> 01:12:54,160
That path is the external collaboration zone.
1880
01:12:54,160 --> 01:12:56,400
It's a dedicated site or hub structure
1881
01:12:56,400 --> 01:12:59,120
where every site inherits hard and defaults.
1882
01:12:59,120 --> 01:13:01,680
No anonymous links required authentication,
1883
01:13:01,680 --> 01:13:04,560
enforced expiration, restricted download where needed,
1884
01:13:04,560 --> 01:13:07,920
and labels that reflect the data types allowed in that zone.
1885
01:13:07,920 --> 01:13:10,320
If the business needs to collaborate with partners,
1886
01:13:10,320 --> 01:13:13,040
they do it here, not in random internal project sites,
1887
01:13:13,040 --> 01:13:15,840
not in HR team sites, not in someone's personal one drive.
1888
01:13:15,840 --> 01:13:17,360
This is also where you stop pretending
1889
01:13:17,360 --> 01:13:19,600
that site owner education scales.
1890
01:13:19,600 --> 01:13:21,440
Owners change. They get busy.
1891
01:13:21,440 --> 01:13:23,280
They forget. They inherit sites.
1892
01:13:23,280 --> 01:13:24,400
They didn't create.
1893
01:13:24,400 --> 01:13:26,160
And they will make exceptions under pressure
1894
01:13:26,160 --> 01:13:27,760
because the partner relationship matters
1895
01:13:27,760 --> 01:13:29,120
more than your policy document.
1896
01:13:29,120 --> 01:13:31,920
So the zone has to survive convenience pressure by design.
1897
01:13:31,920 --> 01:13:33,920
Policy is inherited and enforced,
1898
01:13:33,920 --> 01:13:35,200
not configured repeatedly.
1899
01:13:35,200 --> 01:13:37,200
Now the uncomfortable truth about external sharing.
1900
01:13:37,200 --> 01:13:38,640
It's not just about guests.
1901
01:13:38,640 --> 01:13:39,360
It's about links.
1902
01:13:39,360 --> 01:13:42,880
Most leakage happens through links that outlive intent.
1903
01:13:42,880 --> 01:13:44,720
Links created for a short term partner.
1904
01:13:44,720 --> 01:13:46,240
Links forwarded to the wrong person.
1905
01:13:46,240 --> 01:13:47,440
Links never revoked.
1906
01:13:47,440 --> 01:13:49,680
Links that keep working after the contract ends
1907
01:13:49,680 --> 01:13:51,280
because nobody remembered they existed.
1908
01:13:51,280 --> 01:13:53,280
So the zone model treats link creation
1909
01:13:53,280 --> 01:13:55,200
as an auditable action with life cycle.
1910
01:13:55,200 --> 01:13:57,440
Exploration is the default, not the exception.
1911
01:13:57,440 --> 01:13:59,840
High risk labels require shorter expiration.
1912
01:13:59,840 --> 01:14:01,920
And if the business needs no expiration,
1913
01:14:01,920 --> 01:14:04,160
that's an exception with explicit owner approval
1914
01:14:04,160 --> 01:14:05,280
and ongoing review.
1915
01:14:05,280 --> 01:14:06,640
Then guest life cycle.
1916
01:14:06,640 --> 01:14:07,440
Guests aren't users.
1917
01:14:07,440 --> 01:14:09,040
They're temporary risk allocations.
1918
01:14:09,040 --> 01:14:11,280
So every guest needs sponsorship.
1919
01:14:11,280 --> 01:14:13,360
And that sponsorship has to be enforceable.
1920
01:14:13,360 --> 01:14:15,200
If a guest loses their sponsor,
1921
01:14:15,200 --> 01:14:16,560
they don't remain in the tenant
1922
01:14:16,560 --> 01:14:18,080
as a ghost identity with access.
1923
01:14:18,080 --> 01:14:19,040
Nobody can explain.
1924
01:14:19,040 --> 01:14:20,560
They get reviewed and removed.
1925
01:14:20,560 --> 01:14:24,800
If a partner project ends, guests get deprovisioned automatically,
1926
01:14:24,800 --> 01:14:26,720
not when someone remembers.
1927
01:14:26,720 --> 01:14:28,400
That means external collaboration zones
1928
01:14:28,400 --> 01:14:30,960
need life cycle hooks, start date, end date,
1929
01:14:30,960 --> 01:14:32,960
renewal prompts and a clean tear down path.
1930
01:14:32,960 --> 01:14:34,720
Otherwise, your tenant becomes a museum
1931
01:14:34,720 --> 01:14:37,280
of expired partnerships with valid access.
1932
01:14:37,280 --> 01:14:39,520
Now add GDPR and data sovereignty pressure
1933
01:14:39,520 --> 01:14:41,760
because this is where regulators stop accepting
1934
01:14:41,760 --> 01:14:42,800
we didn't mean to.
1935
01:14:42,800 --> 01:14:44,800
If PII enters an external zone,
1936
01:14:44,800 --> 01:14:46,560
you need deterministic controls
1937
01:14:46,560 --> 01:14:48,000
that prevent it from spreading.
1938
01:14:48,000 --> 01:14:50,480
Sensitivity labels that restrict sharing behavior
1939
01:14:50,480 --> 01:14:53,440
DLP rules that block obvious exfiltration
1940
01:14:53,440 --> 01:14:55,840
and an audit trail you can produce without panic.
1941
01:14:55,840 --> 01:14:58,240
External collaboration is where
1942
01:14:58,240 --> 01:14:59,680
least privilege becomes real
1943
01:14:59,680 --> 01:15:01,040
because you are now collaborating
1944
01:15:01,040 --> 01:15:02,800
with identities you don't fully control
1945
01:15:02,800 --> 01:15:04,480
which is why the zone is not optional.
1946
01:15:04,480 --> 01:15:05,840
It's the only way to separate
1947
01:15:05,840 --> 01:15:07,520
internal collaboration ergonomics
1948
01:15:07,520 --> 01:15:09,120
from external boundary enforcement
1949
01:15:09,120 --> 01:15:12,000
without trying to do per-site exceptions forever.
1950
01:15:12,000 --> 01:15:13,440
And yes, business units will ask,
1951
01:15:13,440 --> 01:15:15,280
why can't we just enable external sharing
1952
01:15:15,280 --> 01:15:16,800
on this one internal site?
1953
01:15:16,800 --> 01:15:19,840
Because this one internal site becomes 50.
1954
01:15:19,840 --> 01:15:21,760
Then 500, then it's normal,
1955
01:15:21,760 --> 01:15:24,000
then your data classification doesn't mean anything
1956
01:15:24,000 --> 01:15:25,760
because anything can be shared from anywhere
1957
01:15:25,760 --> 01:15:27,760
with the right owner clicking the right button.
1958
01:15:27,760 --> 01:15:28,880
That is the drift model.
1959
01:15:28,880 --> 01:15:32,320
So scenario three starts with a design decision,
1960
01:15:32,320 --> 01:15:33,680
not a tool decision.
1961
01:15:33,680 --> 01:15:36,160
External collaboration happens in controlled zones
1962
01:15:36,160 --> 01:15:37,360
with hardened defaults
1963
01:15:37,360 --> 01:15:39,680
and everything else is internal by default.
1964
01:15:39,680 --> 01:15:40,960
Once that line exists,
1965
01:15:40,960 --> 01:15:42,200
you can implement it with
1966
01:15:42,200 --> 01:15:45,520
Entra B2B controls conditional access sensitivity labels
1967
01:15:45,520 --> 01:15:47,760
and DLP and that's the next section.
1968
01:15:47,760 --> 01:15:50,400
The architecture that makes cross-tenant collaboration
1969
01:15:50,400 --> 01:15:51,600
survivable.
1970
01:15:51,600 --> 01:15:53,520
Scenario three, architecture,
1971
01:15:53,520 --> 01:15:55,760
cross-tenant collaboration with least privilege
1972
01:15:55,760 --> 01:15:57,120
and continuous audit.
1973
01:15:57,120 --> 01:16:00,560
The architecture for external collaboration has one job.
1974
01:16:00,560 --> 01:16:03,840
Make working with outsiders behave like a controlled system,
1975
01:16:03,840 --> 01:16:06,080
not a series of one-off exceptions.
1976
01:16:06,080 --> 01:16:07,440
Start with Entra B2B
1977
01:16:07,440 --> 01:16:09,840
because that's where the boundary becomes enforceable.
1978
01:16:09,840 --> 01:16:11,920
Guests need a defined onboarding path
1979
01:16:11,920 --> 01:16:14,400
and that path must be policy-driven.
1980
01:16:14,400 --> 01:16:15,440
Who can invite?
1981
01:16:15,440 --> 01:16:17,680
Which domains are allowed, what terms apply
1982
01:16:17,680 --> 01:16:20,160
and what happens when the sponsor disappears?
1983
01:16:20,160 --> 01:16:22,480
A guest is not a user object you tolerate.
1984
01:16:22,480 --> 01:16:24,560
It's a time-bound access allocation
1985
01:16:24,560 --> 01:16:26,640
with an accountable human attached to it.
1986
01:16:26,640 --> 01:16:28,640
That's why sponsorship and life cycle matter
1987
01:16:28,640 --> 01:16:30,000
more than the invite itself.
1988
01:16:30,000 --> 01:16:31,120
If the sponsor leaves,
1989
01:16:31,120 --> 01:16:33,200
access should not quietly persist.
1990
01:16:33,200 --> 01:16:35,280
The system must trigger an access review,
1991
01:16:35,280 --> 01:16:37,920
then remove the guest if no one reclaims ownership.
1992
01:16:37,920 --> 01:16:39,280
That is not bureaucracy.
1993
01:16:39,280 --> 01:16:40,960
It is how you prevent former partners
1994
01:16:40,960 --> 01:16:43,840
still downloading files from becoming a quarterly tradition.
1995
01:16:43,840 --> 01:16:45,040
Then conditional access.
1996
01:16:45,040 --> 01:16:47,280
External collaboration without conditional access
1997
01:16:47,280 --> 01:16:49,440
is just a shared folder with better marketing.
1998
01:16:49,440 --> 01:16:50,960
Require MFA for guests.
1999
01:16:50,960 --> 01:16:52,480
Block legacy authentication.
2000
01:16:52,480 --> 01:16:54,160
Apply device controls where you can.
2001
01:16:54,160 --> 01:16:57,440
And most importantly, separate the guest experience by zone.
2002
01:16:57,440 --> 01:16:58,960
External collaboration sites
2003
01:16:58,960 --> 01:17:00,640
should enforce stricter access conditions
2004
01:17:00,640 --> 01:17:01,840
than internal project sites
2005
01:17:01,840 --> 01:17:03,360
because the threat model is different.
2006
01:17:03,360 --> 01:17:04,640
Treat this as deterministic.
2007
01:17:04,640 --> 01:17:07,760
If it's a guest, the access decision is harder by default.
2008
01:17:07,760 --> 01:17:08,960
Now cross-tenant patterns.
2009
01:17:08,960 --> 01:17:11,520
Most organizations default to B2B guests everywhere
2010
01:17:11,520 --> 01:17:12,560
because it's familiar.
2011
01:17:12,560 --> 01:17:14,960
But in some partner relationships B2B direct connect
2012
01:17:14,960 --> 01:17:17,680
makes sense to organizations with mature identity,
2013
01:17:17,680 --> 01:17:18,880
deliberate trust,
2014
01:17:18,880 --> 01:17:20,880
and a need for persistent collaboration
2015
01:17:20,880 --> 01:17:22,640
without endless guest churn.
2016
01:17:22,640 --> 01:17:24,080
The point isn't which feature wins.
2017
01:17:24,080 --> 01:17:25,440
The point is boundary clarity.
2018
01:17:25,440 --> 01:17:26,800
If you use direct connect,
2019
01:17:26,800 --> 01:17:28,320
you document the trust relationship,
2020
01:17:28,320 --> 01:17:30,400
you constrain it to the collaboration zone
2021
01:17:30,400 --> 01:17:32,720
and you monitor it like a production dependency.
2022
01:17:32,720 --> 01:17:33,840
Because that's what it is.
2023
01:17:33,840 --> 01:17:35,280
Next permissions.
2024
01:17:35,280 --> 01:17:36,960
This is where entropy explodes
2025
01:17:36,960 --> 01:17:38,400
so the model has to be boring.
2026
01:17:38,400 --> 01:17:40,080
Group-based access only.
2027
01:17:40,080 --> 01:17:41,840
Guests assigned to guest access groups
2028
01:17:41,840 --> 01:17:43,760
never directly to share point items.
2029
01:17:43,760 --> 01:17:46,400
Owners assigned through owner groups, not individuals,
2030
01:17:46,400 --> 01:17:48,800
and guest access should be limited to the minimum roles
2031
01:17:48,800 --> 01:17:50,160
that make the project function.
2032
01:17:50,160 --> 01:17:52,160
If a partner needs edit rights, fine.
2033
01:17:52,160 --> 01:17:53,760
But granted through a controlled group
2034
01:17:53,760 --> 01:17:55,120
that you can review and rotate,
2035
01:17:55,120 --> 01:17:56,800
not through a pile of direct permissions
2036
01:17:56,800 --> 01:17:58,720
that no one can inventory later.
2037
01:17:58,720 --> 01:18:00,080
Then sensitivity labels
2038
01:18:00,080 --> 01:18:02,240
because they encode the collaboration contract
2039
01:18:02,240 --> 01:18:03,360
into the content itself.
2040
01:18:03,360 --> 01:18:05,200
In this zone labels shouldn't be decorative.
2041
01:18:05,200 --> 01:18:07,040
They should drive enforcement outcomes.
2042
01:18:07,040 --> 01:18:08,960
Encryption, restricted sharing,
2043
01:18:08,960 --> 01:18:10,880
and download controls were required.
2044
01:18:10,880 --> 01:18:13,440
The label is how you prevent someone copied the file
2045
01:18:13,440 --> 01:18:15,360
to a different site and now it's ungoverned
2046
01:18:15,360 --> 01:18:17,120
from becoming the default data flow.
2047
01:18:17,120 --> 01:18:18,960
When content moves, the label travels
2048
01:18:18,960 --> 01:18:21,760
and when the label travels your policy intent travels.
2049
01:18:21,760 --> 01:18:22,960
Auto-labeling can help here,
2050
01:18:22,960 --> 01:18:25,120
but only inside boundaries you can defend.
2051
01:18:25,120 --> 01:18:26,480
Models will misclassify.
2052
01:18:26,480 --> 01:18:27,520
They always do.
2053
01:18:27,520 --> 01:18:29,680
So use auto-labeling for obvious cases
2054
01:18:29,680 --> 01:18:31,040
and high-confidence patterns
2055
01:18:31,040 --> 01:18:32,800
and make humans own exceptions.
2056
01:18:32,800 --> 01:18:36,000
The worst design is pretending the model is a compliance officer.
2057
01:18:36,000 --> 01:18:36,560
It isn't.
2058
01:18:36,560 --> 01:18:38,960
It's a classifier with probabilistic outcomes.
2059
01:18:38,960 --> 01:18:39,600
Now DLP.
2060
01:18:39,600 --> 01:18:42,160
In external collaboration, DLP isn't optional friction.
2061
01:18:42,160 --> 01:18:43,440
It's the runtime guardrail
2062
01:18:43,440 --> 01:18:45,600
that stops the obvious leakage paths.
2063
01:18:45,600 --> 01:18:47,760
PII copied into a partner space,
2064
01:18:47,760 --> 01:18:49,680
regulated documents shared by link,
2065
01:18:49,680 --> 01:18:51,440
or content exported through connectors
2066
01:18:51,440 --> 01:18:54,240
that bypass SharePoint's native controls.
2067
01:18:54,240 --> 01:18:56,080
And the stratification still applies.
2068
01:18:56,080 --> 01:18:57,920
PII policies behave differently
2069
01:18:57,920 --> 01:18:59,520
than source code policies.
2070
01:18:59,520 --> 01:19:00,960
Your finance team's tolerance
2071
01:19:00,960 --> 01:19:03,920
for false positives is not your engineering team's tolerance
2072
01:19:03,920 --> 01:19:05,280
designed for that reality.
2073
01:19:05,280 --> 01:19:08,000
A key pattern here is allow with justification
2074
01:19:08,000 --> 01:19:09,200
in the external zone,
2075
01:19:09,200 --> 01:19:11,520
but only when the business has a defensible need.
2076
01:19:11,520 --> 01:19:13,200
The justification isn't for feelings.
2077
01:19:13,200 --> 01:19:14,000
It's for evidence.
2078
01:19:14,000 --> 01:19:16,080
If an exception happens, you want a named human,
2079
01:19:16,080 --> 01:19:18,560
a reason, and a timestamp, you can query later.
2080
01:19:18,560 --> 01:19:20,000
Otherwise, you don't have governance.
2081
01:19:20,000 --> 01:19:21,280
You have vibes.
2082
01:19:21,280 --> 01:19:22,720
Now, continuous audit.
2083
01:19:22,720 --> 01:19:24,640
External collaboration is where you need
2084
01:19:24,640 --> 01:19:26,000
near-real time detection,
2085
01:19:26,000 --> 01:19:27,360
not end-of-quarter review.
2086
01:19:27,360 --> 01:19:28,880
Stream the right signals.
2087
01:19:28,880 --> 01:19:30,080
Guest invitations.
2088
01:19:30,080 --> 01:19:31,280
Guest sign-ins.
2089
01:19:31,280 --> 01:19:32,400
Link creation.
2090
01:19:32,400 --> 01:19:33,520
Sharing events.
2091
01:19:33,520 --> 01:19:34,720
Download spikes.
2092
01:19:34,720 --> 01:19:37,520
Permission changes and DLP overrides.
2093
01:19:37,520 --> 01:19:38,960
Then correlate them with identities
2094
01:19:38,960 --> 01:19:40,560
which user, which guest,
2095
01:19:40,560 --> 01:19:41,760
which service principal,
2096
01:19:41,760 --> 01:19:42,960
which site, which label.
2097
01:19:42,960 --> 01:19:44,400
If you can't join those dots,
2098
01:19:44,400 --> 01:19:45,760
you can't investigate quickly
2099
01:19:45,760 --> 01:19:46,960
and you will lose the narrative
2100
01:19:46,960 --> 01:19:48,240
when something goes wrong.
2101
01:19:48,240 --> 01:19:49,840
And watch for the specific anomalies
2102
01:19:49,840 --> 01:19:51,440
that matter in cross-tenant work.
2103
01:19:51,440 --> 01:19:53,440
A guest suddenly accessing a new site
2104
01:19:53,440 --> 01:19:54,960
outside their normal zone,
2105
01:19:54,960 --> 01:19:56,800
a wave of anonymous links appearing
2106
01:19:56,800 --> 01:19:58,160
where they should be forbidden,
2107
01:19:58,160 --> 01:19:59,520
or a service principal reading
2108
01:19:59,520 --> 01:20:02,000
across multiple external sites in a short window.
2109
01:20:02,000 --> 01:20:04,800
Those are not interesting logs.
2110
01:20:04,800 --> 01:20:06,320
They're breach precursors.
2111
01:20:06,320 --> 01:20:08,080
So the architecture closes the loop.
2112
01:20:08,080 --> 01:20:09,840
Entra controls the identities.
2113
01:20:09,840 --> 01:20:12,000
Conditional access controls the sessions.
2114
01:20:12,000 --> 01:20:14,400
Group-based access controls the permissions.
2115
01:20:14,400 --> 01:20:17,120
Sensitivity labels control the content behavior.
2116
01:20:17,120 --> 01:20:19,040
DLP controls the egress
2117
01:20:19,040 --> 01:20:21,040
and Sentinel controls the story you'll need
2118
01:20:21,040 --> 01:20:22,640
when leadership asks what happened.
2119
01:20:22,640 --> 01:20:24,480
Agents in the enterprise
2120
01:20:24,480 --> 01:20:26,880
where autonomy fits, where it must be caged.
2121
01:20:26,880 --> 01:20:28,640
Now the part everyone wants to talk about
2122
01:20:28,640 --> 01:20:31,040
usually in the least useful way, agents.
2123
01:20:31,040 --> 01:20:33,840
Most organizations treat agents like the next UI.
2124
01:20:33,840 --> 01:20:35,760
A chat box bolted onto a site.
2125
01:20:35,760 --> 01:20:37,680
Asked anything about this library.
2126
01:20:37,680 --> 01:20:39,520
That's fine, but it's not the enterprise problem.
2127
01:20:39,520 --> 01:20:41,360
The enterprise problem is that agents turn
2128
01:20:41,360 --> 01:20:44,560
SharePoint from a workflow surface into a decision surface
2129
01:20:44,560 --> 01:20:46,080
and decisions create liability
2130
01:20:46,080 --> 01:20:48,160
when nobody can explain why they happened.
2131
01:20:48,160 --> 01:20:49,120
So the framing is simple.
2132
01:20:49,120 --> 01:20:50,480
Agents are interfaces first.
2133
01:20:50,480 --> 01:20:51,360
They are not pipelines.
2134
01:20:51,360 --> 01:20:53,760
They sit at the edge, helping humans find,
2135
01:20:53,760 --> 01:20:55,520
summarize, and initiate.
2136
01:20:55,520 --> 01:20:57,680
They do not replace deterministic enforcement.
2137
01:20:57,680 --> 01:20:59,600
They do not own compliance outcomes.
2138
01:20:59,600 --> 01:21:02,080
And they absolutely do not get to freestyle changes
2139
01:21:02,080 --> 01:21:04,640
across systems because the prompt sounded confident.
2140
01:21:04,640 --> 01:21:06,480
Where agents fit is the reasoning layer
2141
01:21:06,480 --> 01:21:08,960
when the output is advisory or bounded.
2142
01:21:08,960 --> 01:21:10,640
Knowledge retrieval on a site.
2143
01:21:10,640 --> 01:21:13,360
Guided actions that map to approved workflows.
2144
01:21:13,360 --> 01:21:14,160
Triage.
2145
01:21:14,160 --> 01:21:15,360
Which policy applies?
2146
01:21:15,360 --> 01:21:16,400
Who owns this?
2147
01:21:16,400 --> 01:21:18,160
Where is the latest approved version?
2148
01:21:18,160 --> 01:21:19,680
What template should we use?
2149
01:21:19,680 --> 01:21:21,360
Which intake form is correct?
2150
01:21:21,360 --> 01:21:24,240
Those tasks reduce cognitive load without changing system state.
2151
01:21:24,240 --> 01:21:27,520
Everything clicked for enterprises when they realize the pattern.
2152
01:21:27,520 --> 01:21:29,280
The agent can decide what to ask,
2153
01:21:29,280 --> 01:21:30,960
but it must not decide what to do.
2154
01:21:30,960 --> 01:21:32,240
If it's going to do something,
2155
01:21:32,240 --> 01:21:34,000
it does it through a cage.
2156
01:21:34,000 --> 01:21:37,520
A controlled tool set with explicit permissions, explicit inputs,
2157
01:21:37,520 --> 01:21:39,520
explicit logging, and an approval gate
2158
01:21:39,520 --> 01:21:41,760
when the action crosses a boundary.
2159
01:21:41,760 --> 01:21:43,200
That cage can be technical.
2160
01:21:43,200 --> 01:21:46,080
A set of graph scopes limited to one-side collection
2161
01:21:46,080 --> 01:21:47,600
read only by default,
2162
01:21:47,600 --> 01:21:50,000
write actions routed through an orchestration service
2163
01:21:50,000 --> 01:21:52,800
that validates policy and state before it commits.
2164
01:21:52,800 --> 01:21:54,080
It can be organizational.
2165
01:21:54,080 --> 01:21:56,000
Agents require sponsors have life cycles
2166
01:21:56,000 --> 01:21:58,000
and get deleted when the sponsor disappears.
2167
01:21:58,000 --> 01:21:59,760
But the cage must exist because autonomy
2168
01:21:59,760 --> 01:22:01,840
without containment isn't innovation.
2169
01:22:01,840 --> 01:22:03,120
It's conditional chaos.
2170
01:22:03,760 --> 01:22:06,560
The other mistake is treating agents as smart users.
2171
01:22:06,560 --> 01:22:07,680
They're not.
2172
01:22:07,680 --> 01:22:09,920
In architectural terms,
2173
01:22:09,920 --> 01:22:12,000
an agent is a non-human identity
2174
01:22:12,000 --> 01:22:14,560
with tool access and a probabilistic reasoning engine.
2175
01:22:14,560 --> 01:22:16,960
That means it inherits the two worst properties
2176
01:22:16,960 --> 01:22:18,240
of enterprise systems.
2177
01:22:18,240 --> 01:22:20,400
It can act quickly and it can be wrong quickly.
2178
01:22:20,400 --> 01:22:23,120
So the enterprise model treats agents as identities,
2179
01:22:23,120 --> 01:22:25,440
registered, permissioned, monitored, and reviewed.
2180
01:22:25,440 --> 01:22:27,520
The same rules apply as with service principles
2181
01:22:27,520 --> 01:22:28,880
and managed identities.
2182
01:22:28,880 --> 01:22:30,720
Leased privilege, group-based access
2183
01:22:30,720 --> 01:22:32,080
and zero standing privilege.
2184
01:22:32,080 --> 01:22:34,240
If an agent needs to perform privileged actions,
2185
01:22:34,240 --> 01:22:36,160
it does it under just-in-time elevation
2186
01:22:36,160 --> 01:22:38,160
and logs every action with correlation IDs
2187
01:22:38,160 --> 01:22:39,600
you can join in Sentinel.
2188
01:22:39,600 --> 01:22:42,640
Now the risk model because this is where leader stops smiling.
2189
01:22:42,640 --> 01:22:45,920
There's a failure triangle that always shows up with agents.
2190
01:22:45,920 --> 01:22:48,000
Oversharing, untrusted input,
2191
01:22:48,000 --> 01:22:49,360
and external actions.
2192
01:22:49,360 --> 01:22:52,160
Oversharing means the underlying SharePoint permission model
2193
01:22:52,160 --> 01:22:55,600
is messy and the agent faithfully surfaces what it can see.
2194
01:22:55,600 --> 01:22:57,040
That's not an AI failure.
2195
01:22:57,040 --> 01:22:59,840
That's your access model showing up at machine speed.
2196
01:22:59,840 --> 01:23:03,200
Untrusted input means the agent reads content it didn't control,
2197
01:23:03,200 --> 01:23:06,800
uploaded files, emails, partner documents, pages edited by anyone.
2198
01:23:06,800 --> 01:23:09,120
If you don't assume malicious or misleading content
2199
01:23:09,120 --> 01:23:11,040
will enter the system, you will eventually learn
2200
01:23:11,040 --> 01:23:12,160
that assumption was wrong.
2201
01:23:12,160 --> 01:23:14,720
External actions means the agent can call tools,
2202
01:23:14,720 --> 01:23:17,360
send messages, change permissions, create links,
2203
01:23:17,360 --> 01:23:19,120
move files, trigger flows.
2204
01:23:19,120 --> 01:23:21,360
The moment an agent can act outside its own boundary,
2205
01:23:21,360 --> 01:23:24,160
prompt injection stops being a theory and becomes an incident type.
2206
01:23:24,160 --> 01:23:26,640
So the enterprise pattern is to break that triangle.
2207
01:23:26,640 --> 01:23:30,800
You reduce oversharing with the group model labels and DLP you already built.
2208
01:23:30,800 --> 01:23:33,680
You treat untrusted input as normal and sanitize
2209
01:23:33,680 --> 01:23:35,840
what the agent can use as instructions.
2210
01:23:35,840 --> 01:23:37,840
And you tightly constrain external actions,
2211
01:23:37,840 --> 01:23:41,840
read before write and write only through policy enforcement services.
2212
01:23:41,840 --> 01:23:43,920
Now, a practical architecture view.
2213
01:23:43,920 --> 01:23:47,280
Agents become entry points into your existing automation stack.
2214
01:23:47,280 --> 01:23:49,120
A site agent can answer questions,
2215
01:23:49,120 --> 01:23:52,080
then offer approved actions that map two quick steps
2216
01:23:52,080 --> 01:23:53,360
or orchestrated workflows.
2217
01:23:53,360 --> 01:23:55,360
A knowledge agent can propose metadata fixes
2218
01:23:55,360 --> 01:23:56,560
but humans confirm.
2219
01:23:56,560 --> 01:23:58,560
An admin agent can serve as drift signals
2220
01:23:58,560 --> 01:24:01,360
but enforcement runs through deterministic controls
2221
01:24:01,360 --> 01:24:03,920
and log remediation that keeps your system stable.
2222
01:24:03,920 --> 01:24:06,240
Humans get speed but governance stays real.
2223
01:24:06,240 --> 01:24:08,880
Because the truth is agents don't reduce governance needs.
2224
01:24:08,880 --> 01:24:10,000
They amplify them.
2225
01:24:10,000 --> 01:24:11,920
The blueprint that survives growth.
2226
01:24:11,920 --> 01:24:15,120
Scalable SharePoint automation isn't more flows or more AI.
2227
01:24:15,120 --> 01:24:16,720
It's enforced intent.
2228
01:24:16,720 --> 01:24:19,120
Entra identity, purview labels,
2229
01:24:19,120 --> 01:24:21,520
DLP gates and observable orchestration
2230
01:24:21,520 --> 01:24:24,000
that converges instead of drifting.
2231
01:24:24,000 --> 01:24:26,080
If you want the next layer, watch the episode
2232
01:24:26,080 --> 01:24:27,760
on designing the Entra group model
2233
01:24:27,760 --> 01:24:29,360
that prevents permission fanfiction
2234
01:24:29,360 --> 01:24:31,520
because everything depends on that perimeter.
2235
01:24:31,520 --> 01:24:33,440
Subscribe to M365FM
2236
01:24:33,440 --> 01:24:35,280
and connect with milk-o-peaters on LinkedIn
2237
01:24:35,280 --> 01:24:37,360
with your hardest SharePoint automation problem
2238
01:24:37,360 --> 01:24:38,800
for a future breakdown.
















