WEBVTT

1
00:00:00.080 --> 00:00:03.080
<v Speaker 1>Ever feel like deploying power platform solutions is one step forward,

2
00:00:03.120 --> 00:00:05.639
<v Speaker 1>two steps back. If you're tired of watching your data

3
00:00:05.719 --> 00:00:10.080
<v Speaker 1>verse changes break in QA or seeing dependencies tank your deployments, you're.

4
00:00:10.000 --> 00:00:11.199
<v Speaker 2>Exactly who this video is for.

5
00:00:11.480 --> 00:00:15.439
<v Speaker 1>Today, we'll break down the Azure DevOps pipeline component by component,

6
00:00:15.679 --> 00:00:18.480
<v Speaker 1>so your deployments run like a well oiled machine, not

7
00:00:18.519 --> 00:00:22.399
<v Speaker 1>a gamble. Curious how rollback really works when automation gets complicated,

8
00:00:22.800 --> 00:00:25.960
<v Speaker 1>Let's unravel what the dogs never tell you manual deployments

9
00:00:26.039 --> 00:00:29.719
<v Speaker 1>versus automated pipelines where the pain really starts. If you

10
00:00:29.800 --> 00:00:34.280
<v Speaker 1>work with power platform, you've probably had that moment. Hours

11
00:00:34.359 --> 00:00:38.399
<v Speaker 1>of tweaking a model driven app, finessing a power automate flow,

12
00:00:39.240 --> 00:00:42.799
<v Speaker 1>carefully tuning security roles the whole checklist. You've double checked

13
00:00:42.840 --> 00:00:46.079
<v Speaker 1>every field, hit export solution, uploaded your ZIP, and crossed

14
00:00:46.119 --> 00:00:49.200
<v Speaker 1>your fingers as QA gets a new build. Then right

15
00:00:49.240 --> 00:00:51.840
<v Speaker 1>as everyone's getting ready for a demo or go live,

16
00:00:52.759 --> 00:00:56.000
<v Speaker 1>something falls over, a table, doesn't show up, a flow

17
00:00:56.079 --> 00:00:58.799
<v Speaker 1>triggers in the wrong environment, or worse, the import fails

18
00:00:58.840 --> 00:01:01.439
<v Speaker 1>with one of those cryptic error codes that only means

19
00:01:01.840 --> 00:01:03.240
<v Speaker 1>something somewhere didn't.

20
00:01:03.000 --> 00:01:06.400
<v Speaker 2>Match up the room suddenly feels quieter.

21
00:01:06.640 --> 00:01:09.560
<v Speaker 1>That familiar pit in your stomach sets in, and it's

22
00:01:09.599 --> 00:01:12.599
<v Speaker 1>back to trying to hunt down what failed, where and why.

23
00:01:12.879 --> 00:01:15.359
<v Speaker 1>This is the daily reality for teams relying on manual

24
00:01:15.400 --> 00:01:19.159
<v Speaker 1>deployments in Power Platform. You're juggling solution exports to your desktop,

25
00:01:19.239 --> 00:01:22.959
<v Speaker 1>moving ZIP files between environments, sometimes using an old Excel

26
00:01:23.000 --> 00:01:26.400
<v Speaker 1>sheet or a team's chat to log what's moved and when.

27
00:01:26.879 --> 00:01:29.200
<v Speaker 1>If you miss a customization, maybe it's a new table

28
00:01:29.280 --> 00:01:32.000
<v Speaker 1>or a connection reference for a flow. Your deployment is

29
00:01:32.000 --> 00:01:35.519
<v Speaker 1>halfway done but completely broken. The classic it works in dev,

30
00:01:35.599 --> 00:01:37.840
<v Speaker 1>but QA has no clue what you just sent over.

31
00:01:38.040 --> 00:01:40.640
<v Speaker 1>Now everyone's in slack or teams trying to figure out

32
00:01:40.640 --> 00:01:43.760
<v Speaker 1>what's missing or who last exported the real version of

33
00:01:43.760 --> 00:01:46.760
<v Speaker 1>the app. Manual deployments are sneakier in their fragility than

34
00:01:46.799 --> 00:01:50.000
<v Speaker 1>teams expect. It isn't just about missing steps. You're dealing

35
00:01:50.000 --> 00:01:53.840
<v Speaker 1>with environments that quietly drift out of alignment over weeks

36
00:01:53.879 --> 00:01:57.879
<v Speaker 1>of changes. DEV gets a new connector or permission, but

37
00:01:57.959 --> 00:02:00.200
<v Speaker 1>no one logs it for the next deployment. Maybe if

38
00:02:00.200 --> 00:02:03.040
<v Speaker 1>someone tweaks a flow's trigger details, but only in DEV.

39
00:02:03.159 --> 00:02:05.359
<v Speaker 1>By the time you're in production, there's a patchwork of

40
00:02:05.400 --> 00:02:09.199
<v Speaker 1>configuration drift. Even if you try to document everything, human

41
00:02:09.319 --> 00:02:12.039
<v Speaker 1>error always finds a way in one late night change,

42
00:02:12.080 --> 00:02:14.919
<v Speaker 1>after a stand up an overlooked security role or a

43
00:02:15.000 --> 00:02:19.280
<v Speaker 1>hand migrated environment variable, suddenly you're chasing a problem that

44
00:02:19.599 --> 00:02:22.159
<v Speaker 1>wasn't obvious two days ago, but is now blocking user

45
00:02:22.199 --> 00:02:25.719
<v Speaker 1>adoption or corrupted data in a critical integration. Here's a

46
00:02:25.759 --> 00:02:29.719
<v Speaker 1>story that probably sounds familiar. A business critical power automate

47
00:02:29.800 --> 00:02:33.280
<v Speaker 1>flow was humming along in DEV, moving rows between debtaverse

48
00:02:33.319 --> 00:02:37.919
<v Speaker 1>tables using some new connection references. Export to QA import

49
00:02:37.919 --> 00:02:41.080
<v Speaker 1>looks fine, but nothing triggers. After hours of combing through

50
00:02:41.120 --> 00:02:45.520
<v Speaker 1>logs and rechecking permissions, someone realizes the QA environment never

51
00:02:45.560 --> 00:02:48.840
<v Speaker 1>had the right connection reference. There's no warning in the UI,

52
00:02:49.000 --> 00:02:51.879
<v Speaker 1>nothing flagged in the import step. It required a deep

53
00:02:51.960 --> 00:02:55.439
<v Speaker 1>dive into solution layers and component dependencies, and meanwhile the

54
00:02:55.439 --> 00:02:57.919
<v Speaker 1>business had a broken process for the better part of

55
00:02:57.960 --> 00:03:01.960
<v Speaker 1>a week. Microsoft openly calls out this pain point in

56
00:03:02.000 --> 00:03:06.840
<v Speaker 1>their documentation, which is almost reassuring even experienced administrators. Folks

57
00:03:06.840 --> 00:03:09.360
<v Speaker 1>who live and breathe data verse loose track of hidden

58
00:03:09.400 --> 00:03:13.639
<v Speaker 1>dependencies or nuanced environment differences, stuff that barely gets a

59
00:03:13.639 --> 00:03:15.639
<v Speaker 1>line in the docks is often the exact thing that

60
00:03:15.719 --> 00:03:19.080
<v Speaker 1>derails a go live. These aren't rookie mistakes. They're the

61
00:03:19.120 --> 00:03:22.199
<v Speaker 1>fallout of a platform that's flexible but quietly full of

62
00:03:22.240 --> 00:03:25.039
<v Speaker 1>cross links and dependencies. When you rely on people to

63
00:03:25.120 --> 00:03:28.240
<v Speaker 1>remember every setting, it's just a matter of time before

64
00:03:28.280 --> 00:03:31.240
<v Speaker 1>something slips. So the big pitch is automation, as your

65
00:03:31.240 --> 00:03:35.000
<v Speaker 1>DevOps sits at the edge of this problem, promising to

66
00:03:35.120 --> 00:03:40.000
<v Speaker 1>turn those manual, error prone steps into repeatable, traceable, and

67
00:03:40.120 --> 00:03:43.960
<v Speaker 1>hopefully bulletproof pipelines. The idea looks good on paper. You

68
00:03:44.000 --> 00:03:46.719
<v Speaker 1>wire up a pipeline, feed it your power platform solution

69
00:03:46.840 --> 00:03:50.759
<v Speaker 1>and let it handle the heavy lifting. Solution gets exported,

70
00:03:50.840 --> 00:03:54.360
<v Speaker 1>imported dependencies are checked, and if anything fails you spot

71
00:03:54.400 --> 00:03:57.120
<v Speaker 1>it right away. You get real timestamped logs, so there's

72
00:03:57.120 --> 00:03:59.319
<v Speaker 1>no more wondering if Alice or Bob has the latest

73
00:03:59.319 --> 00:04:03.000
<v Speaker 1>copy done right. Every deployment is versioned and traceable back

74
00:04:03.039 --> 00:04:06.599
<v Speaker 1>to source. No more dependency roulette or last minute surprises.

75
00:04:06.840 --> 00:04:09.599
<v Speaker 1>And here's the number everyone likes to share in presentations.

76
00:04:09.599 --> 00:04:13.520
<v Speaker 1>Teams that move from manual processes to automated pipelines see

77
00:04:13.520 --> 00:04:16.439
<v Speaker 1>feedback loops that are not just faster but actually close

78
00:04:16.519 --> 00:04:20.040
<v Speaker 1>the door on most failed deployments. Sure, mistakes still happen,

79
00:04:20.160 --> 00:04:23.560
<v Speaker 1>but they're caught early and you don't spend hours untangling

80
00:04:23.600 --> 00:04:26.600
<v Speaker 1>what went wrong. More importantly, you get auditability. You can

81
00:04:26.639 --> 00:04:30.160
<v Speaker 1>trace each deployment, know exactly who shipped what and yes,

82
00:04:30.279 --> 00:04:33.439
<v Speaker 1>pinpoint where and how something failed. But the reality is

83
00:04:33.480 --> 00:04:36.240
<v Speaker 1>this is about trust, not just speed. If your team

84
00:04:36.279 --> 00:04:39.000
<v Speaker 1>can't trust the deployment process, if every release feels like

85
00:04:39.040 --> 00:04:41.319
<v Speaker 1>a dice roll, then every good feature you build is

86
00:04:41.360 --> 00:04:44.920
<v Speaker 1>at risk. Stakeholders hesitate to release, users get frustrated by

87
00:04:44.920 --> 00:04:48.279
<v Speaker 1>outages or missing features. The promise of rapid low code

88
00:04:48.279 --> 00:04:53.040
<v Speaker 1>innovation falls flat when the last mile remains unreliable. Automation

89
00:04:53.199 --> 00:04:57.600
<v Speaker 1>isn't just about saving time or impressing leadership by going DevOps.

90
00:04:58.040 --> 00:04:58.920
<v Speaker 2>It's the only.

91
00:04:58.680 --> 00:05:01.480
<v Speaker 1>Realistic way to deliver power platform solutions that work the

92
00:05:01.480 --> 00:05:05.079
<v Speaker 1>same way every single time, across every environment. So with

93
00:05:05.199 --> 00:05:08.920
<v Speaker 1>automated pipelines you get predictability. You get a reliable record

94
00:05:08.959 --> 00:05:13.079
<v Speaker 1>of every deployment, dependency and step taken. True CICD for

95
00:05:13.199 --> 00:05:17.959
<v Speaker 1>power platform becomes possible, and troubleshooting becomes a matter of

96
00:05:18.120 --> 00:05:21.519
<v Speaker 1>logs not guesswork. Of course, none of this happens by magic.

97
00:05:21.680 --> 00:05:23.959
<v Speaker 1>Automation is only as strong as the links between your

98
00:05:23.959 --> 00:05:27.879
<v Speaker 1>pipeline and your environments. That's where things can still go sideways.

99
00:05:28.480 --> 00:05:32.240
<v Speaker 1>So next up, let's talk about wiring up Azure DevOps

100
00:05:32.720 --> 00:05:36.399
<v Speaker 1>to your power platform in a way that's stable, secure,

101
00:05:36.439 --> 00:05:39.079
<v Speaker 1>and doesn't break at three in the morning. The glue

102
00:05:39.199 --> 00:05:43.000
<v Speaker 1>service connections and agent pools that don't break. If you've

103
00:05:43.040 --> 00:05:46.360
<v Speaker 1>tried connecting Azure DevOps to power Platform and watched the

104
00:05:46.399 --> 00:05:50.399
<v Speaker 1>pipeline instantly throw a permissions error or just hang for

105
00:05:50.439 --> 00:05:53.920
<v Speaker 1>what feels like forever, you're in good company. Nearly every

106
00:05:53.920 --> 00:05:57.040
<v Speaker 1>team hits this wall at some point. The pipeline might

107
00:05:57.079 --> 00:06:00.519
<v Speaker 1>be beautifully designed, your YAMA might be flawless, but just

108
00:06:00.639 --> 00:06:05.040
<v Speaker 1>one misconfigured service connection or missing agent setting and you're

109
00:06:05.079 --> 00:06:08.680
<v Speaker 1>staring at authentication errors or wondering why nothing ever kicks off.

110
00:06:08.800 --> 00:06:12.160
<v Speaker 1>The reality is power platform deployments live or die on

111
00:06:12.199 --> 00:06:14.360
<v Speaker 1>what's happening behind the scenes, what I like to call

112
00:06:14.399 --> 00:06:19.040
<v Speaker 1>the invisible plumbing. We're talking about service connections, authentication flows,

113
00:06:19.079 --> 00:06:22.000
<v Speaker 1>agent pools, and those little settings that quietly hold everything

114
00:06:22.040 --> 00:06:24.959
<v Speaker 1>together or quietly wreck your day. Let's be honest, the

115
00:06:25.000 --> 00:06:29.240
<v Speaker 1>concept feels deceptively simple. You create a service connection in

116
00:06:29.319 --> 00:06:33.920
<v Speaker 1>Azure DevOps, give it some credentials, point it at your environment,

117
00:06:34.360 --> 00:06:36.720
<v Speaker 1>and get back to building your flows under the hood.

118
00:06:36.759 --> 00:06:40.120
<v Speaker 1>Though it's a web of permissions, tokens and API handshacks.

119
00:06:40.680 --> 00:06:43.519
<v Speaker 1>Miss one and you might break not just your pipeline,

120
00:06:43.560 --> 00:06:46.959
<v Speaker 1>but potentially the underlying integration for everyone else using the

121
00:06:47.000 --> 00:06:50.639
<v Speaker 1>same service principle. This isn't just theoretical. I've seen teams

122
00:06:50.680 --> 00:06:53.839
<v Speaker 1>work perfectly for months only to run into a single

123
00:06:53.879 --> 00:06:56.680
<v Speaker 1>deployment that refused to go through. It always comes down

124
00:06:56.720 --> 00:07:01.319
<v Speaker 1>to some backstage detail, an expired secret role missing from

125
00:07:01.319 --> 00:07:04.120
<v Speaker 1>the service account, or a changed permission scope in as

126
00:07:04.160 --> 00:07:08.399
<v Speaker 1>your active directory. Worst case, you can accidentally lock yourself

127
00:07:08.519 --> 00:07:10.959
<v Speaker 1>or your team out of environments if you get too

128
00:07:11.000 --> 00:07:14.439
<v Speaker 1>aggressive with role assignments. Imagine the setup you finally get

129
00:07:14.480 --> 00:07:18.319
<v Speaker 1>approval to use a service principle for your pipeline, aiming

130
00:07:18.399 --> 00:07:21.920
<v Speaker 1>for real security and separation of duties. The theory makes sense.

131
00:07:21.920 --> 00:07:24.959
<v Speaker 1>You've got one identity per environment and everything should just work.

132
00:07:25.120 --> 00:07:27.920
<v Speaker 1>But then deployment day comes. You run your pipeline and

133
00:07:27.959 --> 00:07:30.720
<v Speaker 1>it fails at the very first authentication step. The error

134
00:07:30.759 --> 00:07:33.879
<v Speaker 1>messages are obscure. You dig through logs, only to find

135
00:07:34.040 --> 00:07:37.720
<v Speaker 1>that you missed a tiny data verse role assignment one checkbox,

136
00:07:37.879 --> 00:07:40.480
<v Speaker 1>and now your agent can't access the environment. Of course,

137
00:07:40.519 --> 00:07:42.920
<v Speaker 1>the logs don't call this out. They just spit back

138
00:07:42.920 --> 00:07:45.480
<v Speaker 1>a generic not authorized message. So you're poking around the

139
00:07:45.519 --> 00:07:49.279
<v Speaker 1>Azure portal at eleven PM, toggling permissions and hoping not

140
00:07:49.319 --> 00:07:53.000
<v Speaker 1>to break something else in the process. It's equal parts

141
00:07:53.040 --> 00:07:57.439
<v Speaker 1>frustrating and completely avoidable. There's a pattern here. One missed

142
00:07:57.439 --> 00:08:01.079
<v Speaker 1>permission or a non standard setup can block the whole show.

143
00:08:01.680 --> 00:08:04.240
<v Speaker 1>This is why best practice is to use a dedicated

144
00:08:04.279 --> 00:08:08.279
<v Speaker 1>service principle. And here's the kicker. Don't just assign it

145
00:08:08.319 --> 00:08:11.959
<v Speaker 1>admin rights everywhere out of convenience. Assign only the minimal

146
00:08:12.040 --> 00:08:15.120
<v Speaker 1>data verse roles needed for its specific environment and task.

147
00:08:15.680 --> 00:08:18.040
<v Speaker 1>That might sound like overkill if you're new to DevOps,

148
00:08:18.040 --> 00:08:20.240
<v Speaker 1>but in the real world this saves you from someone

149
00:08:20.319 --> 00:08:23.639
<v Speaker 1>accidentally deleting or corrupting data because an all powerful service

150
00:08:23.680 --> 00:08:27.279
<v Speaker 1>principle had access everywhere. It also means rolling keys or

151
00:08:27.360 --> 00:08:30.279
<v Speaker 1>changing secrets is cleaner. If you need to revoke a

152
00:08:30.319 --> 00:08:34.480
<v Speaker 1>connection from QA, you don't risk blowing up production. Teams

153
00:08:34.519 --> 00:08:38.120
<v Speaker 1>that stick to this separation rarely have the all environments

154
00:08:38.159 --> 00:08:38.559
<v Speaker 1>go down.

155
00:08:38.639 --> 00:08:39.000
<v Speaker 2>Panic.

156
00:08:39.519 --> 00:08:43.480
<v Speaker 1>Now let's talk about agent pools, because oddly they're usually

157
00:08:43.559 --> 00:08:47.679
<v Speaker 1>treated like an afterthought. You get two main options, Microsoft

158
00:08:47.679 --> 00:08:52.120
<v Speaker 1>hosted agents and self hosted agents. Most folks grab whatever's

159
00:08:52.159 --> 00:08:56.159
<v Speaker 1>default in their Azure DevOps project and hope it just works.

160
00:08:56.919 --> 00:09:00.720
<v Speaker 1>For basic dot net or web jobs. This usually flies,

161
00:09:01.080 --> 00:09:04.120
<v Speaker 1>but with power Platform you'll eventually hit a wall. Microsoft

162
00:09:04.120 --> 00:09:07.200
<v Speaker 1>hosted agents are great for basic build tasks, but since

163
00:09:07.200 --> 00:09:10.840
<v Speaker 1>they're dynamically provisioned and shared, you can't guarantee all pre

164
00:09:10.919 --> 00:09:14.600
<v Speaker 1>RECs are present, like specific versions of the power Platform

165
00:09:14.600 --> 00:09:17.639
<v Speaker 1>built tools or custom PowerShell modules you need for more

166
00:09:17.639 --> 00:09:21.559
<v Speaker 1>complex solution tasks. Plus, if you need custom software or

167
00:09:21.600 --> 00:09:24.759
<v Speaker 1>integration anything that isn't in the standard image, you're stuck

168
00:09:25.039 --> 00:09:28.519
<v Speaker 1>and good luck troubleshooting isolated failures across environments you don't own.

169
00:09:28.960 --> 00:09:32.200
<v Speaker 1>Self hosted agents give you full control over the environment,

170
00:09:32.279 --> 00:09:34.919
<v Speaker 1>which is a blessing and a curse. On one hand,

171
00:09:34.960 --> 00:09:39.840
<v Speaker 1>you can pre install build tools, SDKs, scripts, whatever your

172
00:09:39.840 --> 00:09:43.399
<v Speaker 1>project requires. If you've got unique connectors or a stable

173
00:09:43.440 --> 00:09:46.440
<v Speaker 1>set of dependencies, this can save piles of time. On

174
00:09:46.480 --> 00:09:50.600
<v Speaker 1>the other hand, you're fully on the hook for machine updates, patching,

175
00:09:50.919 --> 00:09:53.559
<v Speaker 1>and keeping the agent up and running. Still, plenty of

176
00:09:53.600 --> 00:09:56.200
<v Speaker 1>teams prefer this route, especially if their power platform work

177
00:09:56.200 --> 00:09:59.240
<v Speaker 1>includes a lot of custom build steps or integrations that

178
00:09:59.320 --> 00:10:02.720
<v Speaker 1>don't play well with the shared Microsoft images. One tip

179
00:10:02.720 --> 00:10:05.000
<v Speaker 1>that gets overlooked always run a dry run, test your

180
00:10:05.039 --> 00:10:07.559
<v Speaker 1>service connection and do a trial export before you feed

181
00:10:07.600 --> 00:10:10.960
<v Speaker 1>anything important through your pipeline. Just because your pipeline says

182
00:10:11.000 --> 00:10:13.799
<v Speaker 1>connected doesn't mean it has the right level of access

183
00:10:13.840 --> 00:10:16.879
<v Speaker 1>for every operation. You want to perform that test export.

184
00:10:16.960 --> 00:10:20.000
<v Speaker 1>It's your safety net. You'll catch permissions gaps, roll issues,

185
00:10:20.039 --> 00:10:22.639
<v Speaker 1>and even basic network weirdness before you're knee deep in

186
00:10:22.679 --> 00:10:25.399
<v Speaker 1>a production deployment. Better to find out now than when

187
00:10:25.440 --> 00:10:27.720
<v Speaker 1>you're racing against the go live windows. So what you

188
00:10:27.759 --> 00:10:31.240
<v Speaker 1>really want is reliability without surprises. Durable service connections and

189
00:10:31.279 --> 00:10:34.600
<v Speaker 1>agent pools are the foundation for everything that comes after.

190
00:10:35.639 --> 00:10:37.919
<v Speaker 1>Get these wrong, and it doesn't matter how polished your

191
00:10:37.960 --> 00:10:41.240
<v Speaker 1>YAML or how fancy your pipeline tasks are, they'll fail

192
00:10:41.279 --> 00:10:44.519
<v Speaker 1>because the basics aren't wired upright. Once you nail this

193
00:10:44.639 --> 00:10:47.799
<v Speaker 1>invisible plumbing, the rest of the pipeline process falls into

194
00:10:47.879 --> 00:10:51.399
<v Speaker 1>place with a lot less drama a lot more predictability.

195
00:10:51.559 --> 00:10:54.320
<v Speaker 1>The headaches move from why did my pipeline never start

196
00:10:54.600 --> 00:10:56.960
<v Speaker 1>to how do I make my pipeline even smarter? Which

197
00:10:57.000 --> 00:10:59.080
<v Speaker 1>is a much more fun problem to solve. With those

198
00:10:59.120 --> 00:11:02.360
<v Speaker 1>connections stable and your agents reliably humming along, you've just

199
00:11:02.399 --> 00:11:05.840
<v Speaker 1>cleared the first real hurdle. But solid plumbing isn't guaranteed

200
00:11:05.879 --> 00:11:09.039
<v Speaker 1>to catch solution issues before they hit production. Next up,

201
00:11:09.120 --> 00:11:12.039
<v Speaker 1>let's dive into how automated checks and validations protect your

202
00:11:12.080 --> 00:11:17.039
<v Speaker 1>environments from silent errors before they spread. Automated guardrails dependency

203
00:11:17.120 --> 00:11:20.519
<v Speaker 1>checks and pre deployment validations. If you've ever watched a

204
00:11:20.559 --> 00:11:24.320
<v Speaker 1>power platform deployment pass in DEV, go through the motions

205
00:11:24.320 --> 00:11:27.320
<v Speaker 1>in QA and then set off alarms the minute it

206
00:11:27.399 --> 00:11:30.440
<v Speaker 1>lands in production, you know where this is heading. Problems

207
00:11:30.480 --> 00:11:33.879
<v Speaker 1>almost never announce themselves ahead of time. Instead, you get

208
00:11:33.879 --> 00:11:37.200
<v Speaker 1>those quietly hidden dependencies, the kind that sit two or

209
00:11:37.200 --> 00:11:40.120
<v Speaker 1>three clicks deep in a canvas app or buried inside

210
00:11:40.120 --> 00:11:43.360
<v Speaker 1>a model driven apps subflows. As far as DEV is concerned,

211
00:11:43.440 --> 00:11:47.080
<v Speaker 1>everything looks good, but production, with its own connectors, different

212
00:11:47.120 --> 00:11:50.639
<v Speaker 1>licensed users, or a subtle difference in data verse security roles,

213
00:11:50.840 --> 00:11:54.080
<v Speaker 1>finds the weak link immediately. Now people are scramblings. Sometimes

214
00:11:54.080 --> 00:11:55.879
<v Speaker 1>the only warning you get is a user saying, hey,

215
00:11:55.919 --> 00:11:58.639
<v Speaker 1>this data isn't updating or support ticket with a stack

216
00:11:58.679 --> 00:12:02.120
<v Speaker 1>trace that offers nothing helpful the underlying problem. No one

217
00:12:02.200 --> 00:12:05.240
<v Speaker 1>checked if all the moving pieces actually survived the move.

218
00:12:05.679 --> 00:12:09.279
<v Speaker 1>This is why dependency checks and pre deployment validations aren't

219
00:12:09.360 --> 00:12:12.519
<v Speaker 1>just nice to have there your pipeline's immune system. Think

220
00:12:12.559 --> 00:12:14.879
<v Speaker 1>of them as traveling ahead of your deployment and shining

221
00:12:14.879 --> 00:12:18.200
<v Speaker 1>a flashlight into all the corners where issues love to hide.

222
00:12:18.519 --> 00:12:22.799
<v Speaker 1>These automated guardrails catch things like missing child flows, absent

223
00:12:22.840 --> 00:12:26.200
<v Speaker 1>connection references, or unmanaged components that never got added to

224
00:12:26.240 --> 00:12:29.879
<v Speaker 1>your export. Without these checks, every deployment is an act

225
00:12:29.879 --> 00:12:32.519
<v Speaker 1>of faith. You just hope the plumbing underneath your app

226
00:12:32.559 --> 00:12:35.000
<v Speaker 1>looks the same in each environment, and you only know

227
00:12:35.080 --> 00:12:37.600
<v Speaker 1>it didn't once the incident report lands in your inbox.

228
00:12:37.759 --> 00:12:39.480
<v Speaker 2>I've seen this play out more times than I care

229
00:12:39.519 --> 00:12:39.919
<v Speaker 2>to admit.

230
00:12:40.320 --> 00:12:43.639
<v Speaker 1>One project had a recurring nightmare, a power automate flow

231
00:12:43.679 --> 00:12:46.519
<v Speaker 1>that worked beautifully in every dev test, only to completely

232
00:12:46.559 --> 00:12:48.240
<v Speaker 1>disappear from a production deployment.

233
00:12:48.879 --> 00:12:49.480
<v Speaker 2>What happened.

234
00:12:49.480 --> 00:12:51.320
<v Speaker 1>It turned out a quick fix had added a child

235
00:12:51.360 --> 00:12:54.159
<v Speaker 1>flow as a dependency, and the export process didn't catch

236
00:12:54.159 --> 00:12:57.360
<v Speaker 1>that the childflow was outside the managed solution. When that

237
00:12:57.720 --> 00:13:00.879
<v Speaker 1>child flow failed to show up in quay and production,

238
00:13:01.320 --> 00:13:04.799
<v Speaker 1>the parent logic just silently failed, no error, no warning,

239
00:13:04.919 --> 00:13:07.759
<v Speaker 1>just a process that silently turned off and users confused

240
00:13:07.759 --> 00:13:11.000
<v Speaker 1>about why their tasks were suddenly stuck. We only realize

241
00:13:11.000 --> 00:13:14.679
<v Speaker 1>after enough users called out missing updates that someone finally

242
00:13:14.720 --> 00:13:17.519
<v Speaker 1>found the missing link. By then, hours had gone into

243
00:13:17.559 --> 00:13:21.639
<v Speaker 1>combing through export XML files and running manual checks. One

244
00:13:21.759 --> 00:13:24.960
<v Speaker 1>overlooked dependency caused chaos that could have been flagged with

245
00:13:25.000 --> 00:13:28.000
<v Speaker 1>the right guardrail in place. The real kicker is how

246
00:13:28.039 --> 00:13:30.519
<v Speaker 1>preventable this is now. The tools like solution Checker in

247
00:13:30.600 --> 00:13:33.200
<v Speaker 1>power Platform let you set up automated scans as a

248
00:13:33.200 --> 00:13:37.960
<v Speaker 1>pipeline step, giving you upfront warnings about issues with solution layering,

249
00:13:38.399 --> 00:13:44.240
<v Speaker 1>missing dependencies, app performance, and even security recommendations. The power

250
00:13:44.279 --> 00:13:48.399
<v Speaker 1>platform built tools for Azure DevOps bring this even closer

251
00:13:48.440 --> 00:13:52.360
<v Speaker 1>to CICD reality. With the right pipeline step, you're doing

252
00:13:52.360 --> 00:13:55.519
<v Speaker 1>far more than a straightforward import export. You're running validation

253
00:13:55.639 --> 00:13:58.240
<v Speaker 1>checks against both the solution and its connections to the

254
00:13:58.240 --> 00:14:02.360
<v Speaker 1>target environment. If you have extra requirements, custom PowerShell scripts

255
00:14:02.399 --> 00:14:05.879
<v Speaker 1>let you go even deeper, scanning for things like required

256
00:14:06.039 --> 00:14:12.639
<v Speaker 1>environment variables, validating connections for premium APIs or checking permission

257
00:14:12.639 --> 00:14:16.639
<v Speaker 1>scopes on AD integrated flows. What's interesting is just how

258
00:14:16.720 --> 00:14:20.320
<v Speaker 1>much these automated guardrails catch compared to the old exported

259
00:14:20.399 --> 00:14:23.519
<v Speaker 1>and hope methods. Community studies say these checks flag up

260
00:14:23.519 --> 00:14:26.879
<v Speaker 1>to seventy percent of the issues before anything goes live.

261
00:14:27.120 --> 00:14:30.879
<v Speaker 1>That means fewer after hours calls, fewer catch up sprints

262
00:14:30.879 --> 00:14:35.960
<v Speaker 1>to fix what broke, and way fewer awkward meetings explaining

263
00:14:35.960 --> 00:14:39.159
<v Speaker 1>to leadership why a golf became a go LIMP. Microsoft's

264
00:14:39.159 --> 00:14:42.000
<v Speaker 1>own research and case studies back this up. Teams running

265
00:14:42.000 --> 00:14:44.720
<v Speaker 1>pre deployment validation as a rule see a dramatic drop

266
00:14:44.759 --> 00:14:47.840
<v Speaker 1>in production breakage and problems get caught so early they

267
00:14:47.879 --> 00:14:50.840
<v Speaker 1>barely register as incidents. A solid pipeline step for this

268
00:14:51.039 --> 00:14:55.000
<v Speaker 1>is straightforward but effective. Export your solution from source, but

269
00:14:55.200 --> 00:14:58.200
<v Speaker 1>before you even consider importing it to the target environment,

270
00:14:58.399 --> 00:15:01.159
<v Speaker 1>kick off a sequence that runs solution checker and any

271
00:15:01.200 --> 00:15:04.240
<v Speaker 1>custom tests you've added. Don't just stop at the build.

272
00:15:04.440 --> 00:15:06.759
<v Speaker 1>Run queries against the production data verse to make sure

273
00:15:06.799 --> 00:15:10.080
<v Speaker 1>the entities you're about to overwrite don't have schema differences

274
00:15:10.080 --> 00:15:13.600
<v Speaker 1>that will cause a silent error. Validate connection references don't

275
00:15:13.639 --> 00:15:16.720
<v Speaker 1>assume everyone who had permissions in dev or QA will

276
00:15:16.720 --> 00:15:19.200
<v Speaker 1>have the same role in PROD. Having these steps in

277
00:15:19.240 --> 00:15:22.559
<v Speaker 1>the pipeline means the script fails early if anything's missing,

278
00:15:22.600 --> 00:15:25.080
<v Speaker 1>and you get useful logs telling you exactly where the

279
00:15:25.080 --> 00:15:28.639
<v Speaker 1>gap is. These automated checks are the difference between spending

280
00:15:28.639 --> 00:15:31.879
<v Speaker 1>your day building useful features and spending your evening firefighting

281
00:15:31.960 --> 00:15:35.559
<v Speaker 1>broken deployments. They don't just keep the environment stable, they

282
00:15:35.600 --> 00:15:39.080
<v Speaker 1>actually give the entire team confidence that changes moving through

283
00:15:39.159 --> 00:15:42.840
<v Speaker 1>the pipeline haven't skipped some crucial step or missed a

284
00:15:42.919 --> 00:15:46.639
<v Speaker 1>last minute dependency. It turns deployment day from something tense

285
00:15:46.639 --> 00:15:50.559
<v Speaker 1>into something routine. When someone asks did the deployment finish,

286
00:15:50.879 --> 00:15:52.960
<v Speaker 1>you can actually answer with more than I think so

287
00:15:53.080 --> 00:15:56.240
<v Speaker 1>because you've got the guardrails to prove it. It's easy

288
00:15:56.279 --> 00:16:00.679
<v Speaker 1>to dismiss pre deployment checks as another box to, but

289
00:16:00.759 --> 00:16:03.639
<v Speaker 1>in the power platform world they save more time and

290
00:16:03.720 --> 00:16:07.519
<v Speaker 1>phase than almost any other automation. Instead of working backwards

291
00:16:07.559 --> 00:16:12.279
<v Speaker 1>from outages and complaints, you're getting proactive sentinel alerts, early,

292
00:16:12.480 --> 00:16:15.879
<v Speaker 1>actionable and tied directly to components. Think of them less

293
00:16:15.879 --> 00:16:17.919
<v Speaker 1>as a safety net and more as a radar system

294
00:16:18.320 --> 00:16:20.840
<v Speaker 1>of course, even with the best guardrails in place, things

295
00:16:20.879 --> 00:16:24.600
<v Speaker 1>can still go sideways. Nothing's bulletproof, and every team needs

296
00:16:24.639 --> 00:16:27.320
<v Speaker 1>a way to back out changes when something slips past.

297
00:16:27.519 --> 00:16:30.600
<v Speaker 1>So let's get into what a real rollback and backup

298
00:16:30.600 --> 00:16:33.720
<v Speaker 1>plan looks like for power Platform beyond just hoping the

299
00:16:33.879 --> 00:16:38.720
<v Speaker 1>undoe button works when things break building a real rollback

300
00:16:38.759 --> 00:16:39.720
<v Speaker 1>and backup strategy.

301
00:16:40.080 --> 00:16:41.919
<v Speaker 2>Let's talk about what rollback.

302
00:16:41.600 --> 00:16:45.279
<v Speaker 1>Really means for power Platform because it's easy to assume

303
00:16:45.360 --> 00:16:48.159
<v Speaker 1>there's a big undue button waiting to rescue you when

304
00:16:48.159 --> 00:16:52.000
<v Speaker 1>a deployment melts down. But unlike code projects, where a

305
00:16:52.120 --> 00:16:54.720
<v Speaker 1>rollback is just a Git reset or a package redeploy,

306
00:16:54.879 --> 00:16:57.879
<v Speaker 1>the power Platform world is far less forgiving. There is

307
00:16:58.000 --> 00:17:02.799
<v Speaker 1>no native revert deployment option. Once an import happens, changes

308
00:17:02.879 --> 00:17:07.359
<v Speaker 1>are baked into the environment. Tables might update, components, shift versions,

309
00:17:07.400 --> 00:17:11.359
<v Speaker 1>and data relationships can quietly reshuffle themselves. If something fails

310
00:17:11.400 --> 00:17:14.480
<v Speaker 1>mid import, the result could be half a solution deployed,

311
00:17:15.000 --> 00:17:19.200
<v Speaker 1>broken integrations, or users locked out of apps they rely on.

312
00:17:19.559 --> 00:17:21.920
<v Speaker 1>The stakes are rarely obvious until they hit, and by

313
00:17:21.960 --> 00:17:25.119
<v Speaker 1>then the fix requires finesse. The hard truth is that

314
00:17:25.160 --> 00:17:28.119
<v Speaker 1>a botched import leaves your environment in a kind of limbo.

315
00:17:28.359 --> 00:17:32.200
<v Speaker 1>Some components might upgrade, others stay at their old version,

316
00:17:32.759 --> 00:17:35.920
<v Speaker 1>and connections or roles could be in an undefined state.

317
00:17:36.200 --> 00:17:39.319
<v Speaker 1>Configurations slip out of sync fast, and you're left with

318
00:17:39.440 --> 00:17:42.240
<v Speaker 1>a system that doesn't really match what anyone intended.

319
00:17:42.359 --> 00:17:43.240
<v Speaker 2>What looks like a.

320
00:17:43.160 --> 00:17:46.119
<v Speaker 1>Minor tweak in a managed solution can knock out entire

321
00:17:46.160 --> 00:17:49.799
<v Speaker 1>business processes downstream. This is where most admins get caught.

322
00:17:49.880 --> 00:17:51.759
<v Speaker 1>There's a sense that you can just run it again

323
00:17:52.200 --> 00:17:55.319
<v Speaker 1>or undo a step, when in practice you're dealing with

324
00:17:55.359 --> 00:17:58.599
<v Speaker 1>a live application that users count on to do their jobs.

325
00:17:59.079 --> 00:18:02.160
<v Speaker 1>Now picture the state with a real example. One large

326
00:18:02.200 --> 00:18:05.319
<v Speaker 1>financial company had a new feature queued up for their

327
00:18:05.720 --> 00:18:09.640
<v Speaker 1>power Apps portal, some workflow tweaks, a couple of shiny

328
00:18:09.680 --> 00:18:13.640
<v Speaker 1>new dashboards, and a reconfigured data table. The change zipped

329
00:18:13.640 --> 00:18:16.519
<v Speaker 1>through QA, so they greenlit the import to production late

330
00:18:16.559 --> 00:18:19.119
<v Speaker 1>on a Friday, hoping to smooth things over before Monday's

331
00:18:19.119 --> 00:18:23.240
<v Speaker 1>reporting deadline. The import erroored out halfway through the end result,

332
00:18:23.440 --> 00:18:27.279
<v Speaker 1>users who logged in Monday morning found broken dashboards, failed automations,

333
00:18:27.559 --> 00:18:30.440
<v Speaker 1>and a handful of canvas apps that wouldn't load. To

334
00:18:30.440 --> 00:18:34.359
<v Speaker 1>make matters worse, their last full environment backup was weeks

335
00:18:34.359 --> 00:18:37.440
<v Speaker 1>old and they hadn't exported the latest solution version after

336
00:18:37.559 --> 00:18:40.839
<v Speaker 1>last minute dev changes, Restore options were limited, and the

337
00:18:40.880 --> 00:18:43.720
<v Speaker 1>business lost a full day's worth of work while admins

338
00:18:43.799 --> 00:18:47.559
<v Speaker 1>pieced the environment back together. No single step caused the disaster.

339
00:18:47.680 --> 00:18:50.720
<v Speaker 1>It was a missed backup window, a belief in quick fixes,

340
00:18:50.920 --> 00:18:53.640
<v Speaker 1>and a lack of flexible rollback planning that left them

341
00:18:53.680 --> 00:18:56.960
<v Speaker 1>exposeds So what can you actually do to avoid ending

342
00:18:57.000 --> 00:19:00.680
<v Speaker 1>up in rollback limbo? The first and most reliable layer

343
00:19:00.839 --> 00:19:05.359
<v Speaker 1>is automating solution exports at every stage. Instead of trusting

344
00:19:05.359 --> 00:19:08.319
<v Speaker 1>that latest version in a dev folder, your pipeline should

345
00:19:08.359 --> 00:19:11.960
<v Speaker 1>automatically export the solution to a secure location, ideally into

346
00:19:12.000 --> 00:19:15.759
<v Speaker 1>source Control. That way, every release, whether successful or failed,

347
00:19:15.799 --> 00:19:19.200
<v Speaker 1>has a corresponding backup. If today's deployment goes south, you

348
00:19:19.240 --> 00:19:21.559
<v Speaker 1>aren't stuck with whatever happens to be on your desktop.

349
00:19:21.920 --> 00:19:24.920
<v Speaker 1>You always have access to the last known good package.

350
00:19:25.359 --> 00:19:28.680
<v Speaker 1>Nightly environment backups are another practical move, even if you

351
00:19:28.720 --> 00:19:32.000
<v Speaker 1>think you'll never need them. Microsoft does offer full environment

352
00:19:32.039 --> 00:19:34.799
<v Speaker 1>backup features, especially for data verse environments, but you'd be

353
00:19:34.839 --> 00:19:38.160
<v Speaker 1>surprised how many teams don't actually automate their use the

354
00:19:38.200 --> 00:19:41.640
<v Speaker 1>official guidance is clear, always run a complete environment backup

355
00:19:41.680 --> 00:19:44.839
<v Speaker 1>before touching production, Yet in the field a lot of

356
00:19:44.880 --> 00:19:47.799
<v Speaker 1>teams rely on we'll do it if we remember. That

357
00:19:47.880 --> 00:19:50.480
<v Speaker 1>works about as well as you'd expect once until it doesn't.

358
00:19:50.839 --> 00:19:53.440
<v Speaker 1>Setting up nightly or pre deployment backups means you have

359
00:19:53.480 --> 00:19:56.279
<v Speaker 1>a full snapshot to restore from if the wheels fall off.

360
00:19:56.359 --> 00:19:59.720
<v Speaker 1>When paired with solution level exports, you can decide whether

361
00:19:59.759 --> 00:20:03.039
<v Speaker 1>to re store an entire environment or just roll back

362
00:20:03.079 --> 00:20:05.839
<v Speaker 1>a single solution, depending on the scale of the issue.

363
00:20:06.039 --> 00:20:09.119
<v Speaker 1>Version solution files in source control might sound basic, but

364
00:20:09.160 --> 00:20:12.920
<v Speaker 1>they're a life saver. Tracking every exported zip with commit history,

365
00:20:12.960 --> 00:20:17.200
<v Speaker 1>branch naming, and pool requests brings power platform deployments closer

366
00:20:17.200 --> 00:20:19.799
<v Speaker 1>to classic application life cycles. You get a full audit

367
00:20:19.799 --> 00:20:22.440
<v Speaker 1>trail of what changed, when and by whom. If a

368
00:20:22.519 --> 00:20:25.640
<v Speaker 1>rollback becomes necessary, you don't need to scramble, just redeploy

369
00:20:25.680 --> 00:20:29.319
<v Speaker 1>the previous successful build. This isn't just convenient, it's one

370
00:20:29.359 --> 00:20:32.400
<v Speaker 1>of the most reliable ways to restore business critical changes

371
00:20:32.440 --> 00:20:36.400
<v Speaker 1>without collateral impact. When it's time to execute a real rollback,

372
00:20:36.960 --> 00:20:40.920
<v Speaker 1>exported solution files are your lifeline. Start by restoring the

373
00:20:40.920 --> 00:20:44.680
<v Speaker 1>previous solution version that you already validated in a lower environment.

374
00:20:45.200 --> 00:20:49.000
<v Speaker 1>Rolling back to that known good state will reset your components, flows,

375
00:20:49.039 --> 00:20:52.200
<v Speaker 1>and related customizations. You won't get a perfect time machine,

376
00:20:52.359 --> 00:20:55.440
<v Speaker 1>Records or transactional data modified since the last deployment might

377
00:20:55.480 --> 00:20:57.880
<v Speaker 1>still be at risk, but you can return the app

378
00:20:57.920 --> 00:20:59.720
<v Speaker 1>to a working configuration, often.

379
00:20:59.519 --> 00:21:00.000
<v Speaker 2>Within an app.

380
00:21:01.200 --> 00:21:05.039
<v Speaker 1>For anything more severe a corrupted entity, lost relationships, or

381
00:21:05.119 --> 00:21:08.200
<v Speaker 1>data integration issues, you might have to use that environment

382
00:21:08.279 --> 00:21:11.400
<v Speaker 1>level backup or slice in individual table restores, depending on

383
00:21:11.440 --> 00:21:15.640
<v Speaker 1>what's available. One lesson learned the hard way. Never assume

384
00:21:15.680 --> 00:21:18.680
<v Speaker 1>your rollback plan is robust unless you've tested it in

385
00:21:18.720 --> 00:21:21.680
<v Speaker 1>a sandbox. The difference between a theoretical and a real

386
00:21:21.680 --> 00:21:25.880
<v Speaker 1>life recovery process is enormous. Without testing, you risk restoring

387
00:21:25.920 --> 00:21:30.079
<v Speaker 1>incomplete dependencies or hitting import conflicts you didn't anticipate. Practicing

388
00:21:30.079 --> 00:21:32.519
<v Speaker 1>your rollback isn't just busy work. It's what stands between

389
00:21:32.519 --> 00:21:34.960
<v Speaker 1>a quick restore and an all day outage. A solid

390
00:21:34.960 --> 00:21:38.480
<v Speaker 1>backup and rollback plan means deployment failures become a bump

391
00:21:38.519 --> 00:21:41.240
<v Speaker 1>in the road, not a disaster that burns through your weekend.

392
00:21:41.480 --> 00:21:44.920
<v Speaker 1>It's the kind of safety net that lets your team

393
00:21:45.119 --> 00:21:48.720
<v Speaker 1>deploy with confidence and keeps the business running smoothly even

394
00:21:48.720 --> 00:21:53.440
<v Speaker 1>when the unexpected happens. Now, all these moving parts, connections, guardrails,

395
00:21:53.440 --> 00:21:57.039
<v Speaker 1>and recoveries feed into one larger question. How do you

396
00:21:57.079 --> 00:22:00.000
<v Speaker 1>make sure your whole pipeline works together instead of against you.

397
00:22:00.559 --> 00:22:03.039
<v Speaker 1>The line between a fragile deployment and one you can

398
00:22:03.079 --> 00:22:06.160
<v Speaker 1>actually rely on never comes down to luck. It's how

399
00:22:06.200 --> 00:22:09.000
<v Speaker 1>well you wire up each piece. Service connections that don't

400
00:22:09.000 --> 00:22:11.720
<v Speaker 1>surprise you, agent pools that don't go dark mid build,

401
00:22:12.079 --> 00:22:14.839
<v Speaker 1>and automated checks that actually do their job. With the

402
00:22:14.920 --> 00:22:17.400
<v Speaker 1>right structure, you stop holding your breath on every release.

403
00:22:18.359 --> 00:22:20.920
<v Speaker 1>Issues pop up early, not after the fact, and when

404
00:22:20.920 --> 00:22:23.839
<v Speaker 1>things break, there's a plan. If you want to keep

405
00:22:23.960 --> 00:22:27.400
<v Speaker 1>power platform working for your business and avoid late night fixes,

406
00:22:27.680 --> 00:22:29.440
<v Speaker 1>subscribe and join the conversation.

407
00:22:29.680 --> 00:22:32.039
<v Speaker 2>The real learning always happens on the next deployment.
