Build your first Power App step-by-step—from initial idea to a fully working solution. This episode of the M365.fm podcast explains how to turn a simple business need into a functional app using Microsoft Power Apps, even with little or no coding experience. It walks through the core process: defining the problem, connecting to data sources like SharePoint or Excel, designing screens, and building key features such as forms and navigation.

You’ll learn practical best practices for beginners, including why starting small is critical, how to structure your app logically, and how to avoid common mistakes when building your first solution. The episode focuses on real-world use cases and shows how low-code tools enable fast development and iteration.

Perfect for IT pros, business users, and makers who want to quickly move from idea to a working Power Apps solution and start building impactful apps in the Microsoft 365 ecosystem.

Apple Podcasts podcast player iconSpotify podcast player iconYoutube Music podcast player iconSpreaker podcast player iconPodchaser podcast player iconAmazon Music podcast player icon

You may notice that power apps fail when users struggle with confusing screens or when data does not flow as expected. Recognizing whether the failure comes from data or user interaction helps you troubleshoot faster. Many teams see higher adoption rates when apps match familiar tools and processes. Focusing on performance and integration reliability in the microsoft power platform can transform business processes and support better development. Understanding these patterns is vital for using power apps to improve business operations.

Key Takeaways

  • Identify whether app failures stem from data issues or user interaction problems to troubleshoot effectively.
  • Ensure your data structure is strong and consistent to prevent errors and improve app performance.
  • Avoid common mistakes like redundant data and inefficient queries to keep your apps running smoothly.
  • Design a user-friendly interface with clear labels and simple navigation to enhance user experience.
  • Optimize app performance by reducing data loads and simplifying formulas for faster response times.
  • Regularly test your app for broken links and inconsistent navigation to help users complete tasks easily.
  • Implement robust data integrity checks to maintain clean and reliable data for better decision-making.
  • Continuously gather user feedback and make improvements to keep your power apps aligned with business needs.

Data Errors in Power Apps

Data Errors in Power Apps

When you build apps with the microsoft power platform, you want to trust that your data will flow smoothly. However, many power apps fail because of data errors that disrupt business processes and user experience. You need to understand the most common data issues to prevent unexpected problems and keep your apps reliable.

Poor Data Structure

A strong data structure forms the backbone of every successful app. If you do not design your data model carefully, you may face slow performance, unreliable features, and unexpected errors.

Inconsistent Fields

You may see errors when fields in your app do not match the columns in your data source. For example, if you use SharePoint and the display name of a field changes, your app may not find the right data. This mismatch can cause unexpected results, such as blank screens or missing information. Always check that each field in your form matches the data source exactly.

Redundant or Missing Data

Redundant data means you store the same information in multiple places. Missing data means you do not collect all the details you need. Both problems can lead to confusion and errors in your apps. You may see duplicate records or incomplete reports. To avoid these issues, design your data tables with clear rules for each field.

Tip: Choose the right data source for your business needs. Some sources handle large datasets better than others. This choice can improve app performance and reliability.

Common MistakesDescription
Many data calls in OnStartToo many data calls during app loading slow down startup time.
N+1 query problemToo many requests to servers impact performance.
Inefficient queriesScanning whole tables instead of using indexes slows down your app.
Heavy scripts in OnStartLarge scripts cause latency during app startup.
Retrieving too many columnsDownloading unnecessary columns increases memory and network usage.

You should avoid these mistakes to keep your apps fast and efficient.

Data Connection Issues

Data connection issues can stop your power apps from working as expected. You may see errors when your app cannot reach the data source or when permissions are not set up correctly.

Delegation Warnings

Delegation warnings appear when your app cannot send data operations to the server. Instead, the app processes data locally, which can lead to incomplete results. You may notice a yellow triangle in the formula bar. This warning means your app may not retrieve all the data you expect, especially with large lists.

  • Delegation warnings signal that your app cannot offload tasks to the data source.
  • Local processing can result in missing or partial data.
  • Using delegation improves performance and ensures complete data retrieval.

Outdated Connectors

Outdated connectors can cause unexpected errors and block data flow. If you use Excel, you must format your data as a table for power apps to recognize it. Data type mismatches and field configuration problems also lead to connection failures. You may face permission errors if users do not have the right access. Network issues or disconnected flows can stop data from reaching its destination.

Cause of FailureExplanation
Issues with data source connectionsData must be formatted as a table for recognition.
Data type mismatchesInput data type must match the expected type in the data source.
Field configuration problemsEach field must correspond to a column in the data source.
Permission and access errorsLack of permissions prevents data submission or editing.
Network or flow issuesDisconnected flows require troubleshooting of flow history.

Note: Always set up role-based access control to protect sensitive data and prevent unauthorized changes. This practice improves security and reduces the risk of data leaks.

Data Integrity Problems

Data integrity problems can damage your business and make your apps less reliable. You need to watch for duplicate records, corrupted data, and other unexpected issues.

Duplicate Records

Duplicate records can appear when you store the same event more than once. This problem affects data quality, slows down staff, and makes it hard to generate accurate reports. You may also face compliance challenges with regulations like GDPR and CCPA.

Data Integrity ProblemDescription
Data LossRecords do not reach their destination, causing missing data.
Data DuplicationEvents are recorded multiple times, distorting metrics and responses.
Data CorruptionData changes during transit, leading to incorrect information.
Out-of-Order DataEvents arrive in the wrong sequence, affecting time-sensitive data.
Impact TypeDescription
Data Quality IssuesDuplicate data lowers accuracy and completeness.
Decreased Efficiency of StaffStaff waste time fixing duplicates.
Difficulty Generating Accurate ReportsLow-quality data leads to misleading insights.
Poor Business DecisionsFlawed data causes missed opportunities.
Poor Customer ServiceDuplicate records block a full view of customer history.
Financial DetrimentPoor data quality can cost your business millions each year.
  • Duplicate data complicates compliance and can lead to fines.
  • Inaccurate data damages your reputation and customer trust.

Corrupted Data

Corrupted data happens when information changes during transfer. This can result in nonsensical or incorrect details in your apps. You may see unexpected values, broken features, or missing records. Always check your data for errors and set up regular integrity checks.

Security Alert: Train your users on data handling best practices. Teach them how to spot phishing and use strong passwords. This education reduces human error and protects your business.

By understanding these common data errors, you can build power apps that support your business goals and deliver reliable features. Careful planning, regular checks, and strong security help you avoid unexpected problems and keep your apps running smoothly on both desktop and mobile.

User Interaction Issues

User Interaction Issues

When you design power apps, you must focus on how users interact with your screens and features. Many power apps fail because users cannot find what they need or do not understand how to use the app. A strong user experience design helps you avoid these problems and supports your business goals. You can improve performance and adoption by making your apps simple, clear, and easy to navigate.

Confusing UI Design

A confusing interface can frustrate users and lower satisfaction. If your screens look crowded or your labels do not make sense, users may stop using your app. You want to create a clean layout that helps users complete their tasks quickly.

Overcrowded Screens

When you put too many controls or features on one screen, users feel overwhelmed. They may not know where to start or what to click. You should remove unnecessary elements and focus on the most important actions. Simplicity in design leads to a clean and uncluttered interface. This approach allows users to concentrate on their tasks without distractions. Streamlining the interface by removing extra buttons or fields makes your app more user-friendly.

Tip: Keep actions and options visible. Minimize memory load for users by making important features easy to find.

Unclear Labels

Labels that do not match the user's expectations can cause confusion. If you use technical terms or vague language, users may not understand what a button or field does. You should use plain language and clear instructions. Provide contextual help icons, tooltips, and embedded tutorials to assist users. Make help documentation easy to find and task-oriented, with clear instructions. Display important system status details in intuitive locations. These steps help users feel confident and reduce mistakes.

  • Use clear and concise conditional logic for control states.
  • Show visible loading spinners only during active processes.
  • Add status messages alongside loading indicators.
  • Test your app across devices and networks.
  • Consider accessibility for screen reader users.

Slow User Response

Slow response times can make users lose trust in your power apps. If screens take too long to load or actions do not happen right away, users may think the app is broken. You need to optimize performance to keep users engaged.

Inefficient Formulas

Complex or inefficient formulas can slow down your app. When you repeat the same logic in multiple places, you waste resources and make the app harder to maintain. Inefficient formulas lead to increased processing time, which can slow down the overall performance of power apps. You should simplify your formulas and avoid unnecessary calculations.

Excessive Data Loads

Loading too much data at once can overwhelm your app and slow response times. Heavy screens and excessive data loading are common issues that contribute to performance degradation. You should only load the data you need for each screen. Use filters and delegation to improve performance.

FactorDescription
Inefficient Data HandlingApps that fetch large datasets or perform unnecessary calculations can slow down significantly.
Complex FormulasLong or complicated formulas can lead to delays in app performance.
Excessive Data LoadingLoading too much data at once can overwhelm the app and slow response times.
Bottlenecks in Data SourcesHigh traffic to the same data source can create delays, especially with many users accessing it.
Usage PatternsDifferent devices and browsers can affect performance; modern browsers are recommended for optimal use.
Geographical LocationThe proximity of the data source to users can impact response times, with closer sources generally performing better.
ThrottlingGenerating many data calls in a short period can lead to throttling, affecting app responsiveness.

Note: Monitor app performance and optimize loading times. Use customized spinner animations to match your app branding and reassure users that their requests are being processed.

Navigation Problems

Navigation problems can stop users from completing their tasks. If links do not work or the navigation pattern changes from screen to screen, users may get lost or frustrated. You want to create a consistent and reliable navigation system.

Broken Links

Broken links prevent users from accessing the content they expect. This issue leads to dissatisfaction and lowers trust in your power apps.

IssueDescription
Broken LinksUsers cannot access expected content, leading to dissatisfaction.

You should test all links and buttons before you publish your app. Make sure every navigation path works as intended.

Inconsistent Patterns

When navigation patterns change from one screen to another, users hesitate to interact with links. Visual inconsistencies increase cognitive load and make the app harder to use. Consistent navigation helps users build trust and confidence in your app.

IssueDescription
Inconsistent NavigationUsers may hesitate to interact with links due to visual inconsistencies, increasing cognitive load.

Tip: Use color-coded indicators for quick recognition of system status. Implement progress indicators to reassure users that their requests are being processed.

How to Improve User Interaction in Power Apps

You can take several steps to improve user experience design and prevent power apps fail scenarios:

  • Provide contextual help, tooltips, and embedded tutorials.
  • Incorporate features like accelerators and customization options for both novice and expert users.
  • Ensure clear status updates and use plain language for error messages.
  • Make help documentation easy to find and task-oriented.
  • Minimize memory load by keeping actions and options visible.
  • Streamline the interface by removing unnecessary elements.
  • Test your app across devices and networks for consistent performance.
  • Consider accessibility for all users.

Simplicity and visibility are essential for user engagement. Users must easily perceive both physical and conceptual elements of the interface. A well-designed interface prevents frustration by ensuring clear navigation and supporting your business goals. When you focus on these principles, you create power apps that deliver reliable features, strong performance, and a positive experience for every user.

Diagnosing Power Apps Failures

When you work with power apps, you want your business to run smoothly. Sometimes, you face issues that stop your apps from working as expected. Diagnosing these problems helps you fix them quickly and keep your business processes efficient. You need to know if the problem comes from data or user interaction. This section guides you through practical steps, checklists, and common symptoms to help you identify and resolve failures in your apps.

Troubleshooting Steps

You can follow a clear process to diagnose and fix errors in power apps. These steps help you find the source of the problem and improve your app’s performance and security:

  1. Go to App Settings and review your configuration.
  2. Select Upcoming Features to see new options that may affect your app.
  3. Enable formula-level error management to catch errors early.
  4. Create an Application Insights Azure resource for detailed data and telemetry.
  5. Check the Microsoft Service Health dashboard for any outages that may impact your apps.
  6. Sign in to the Power Platform admin center and review the Service health tab.
  7. Use community forums to learn from other users’ experiences.
  8. Try tools like App Checker, Monitor, and Performance insights to debug your app.

Tip: Regular troubleshooting helps you spot unexpected errors and maintain strong security in your apps.

Data vs. User Issue Checklist

You can use checklists to separate data problems from user interaction issues. This structured approach supports better power apps error handling and improves your development process.

  • Review your interaction design to see how users process information.
  • Plan task flows and consider different scenarios for your business.
  • Check what testing was done, who did it, and when.
  • Look at the testing methodology, such as using reports or DAX queries.
  • Store and review test results for future reference.

Note: A checklist helps you focus on the right area, whether you need to improve data integration or user experience.

Common Symptoms

You often see different symptoms for data and user interaction failures. Knowing these signs helps you apply the right power apps forms error-handling and patch function error-handling techniques.

Symptom TypeDescription
Data-related failureNew input added to a Power Automate flow does not update the app, causing an error message.
Data-related failureChanged connections in a flow lead to errors about missing properties.
User interaction failureRemoving a response output makes Power Apps treat the value as blank, causing unexpected behavior.

You may notice error messages, missing features, or unexpected results. Handling unexpected errors quickly protects your business and supports mobile and desktop users. Good error handling, strong security, and regular performance checks help you get the most benefits from your low-code and no-code solutions. When you use these steps, you improve your apps, support business growth, and make the most of the microsoft power platform for your development and integration needs. Customization and ongoing monitoring ensure your apps deliver value across all business processes.

Preventing Data Errors

Robust Data Design

You can prevent many issues in power apps by starting with a strong data design. When you create a clear structure for your data, you make your apps easier to maintain and scale. Good design helps you avoid errors and supports your business as it grows. You should define healthy, degraded, and unhealthy states for your most important flows. This approach lets you monitor changes and catch problems early.

A robust data design also makes your apps future-ready. You can add new features or improve existing ones without rebuilding everything. This saves time and keeps your business running smoothly. A well-designed data model improves user experience and helps new team members learn the system faster.

  • Create a monitoring and alerting strategy for workload changes.
  • Design your data model to support continuous enhancements.
  • Make sure your data structure matches your business needs.

Tip: Use manual validation rules and user feedback to catch mistakes before they become bigger problems.

Reliable Connections

Reliable connections keep your power apps running and your data safe. You want to make sure users can access the right information without risking security. Start by requiring multi-factor authentication for all users. This step protects your business from unauthorized access.

Set limits on who can see or change data by using Dataverse security roles. Fewer connectors mean fewer places where problems can happen. Use Power Apps Studio’s App Checker to find security issues before they affect your business. Refresh permissions often to match changes in your team. Control who can co-author apps so everyone knows their responsibilities.

  1. Require multi-factor authentication for all users.
  2. Set access limits with Dataverse security roles.
  3. Use fewer connectors to reduce vulnerabilities.
  4. Check for security issues with App Checker.
  5. Refresh permissions as team roles change.
  6. Control co-authoring to clarify responsibilities.
  7. Build a habit of feedback to catch issues early.

Note: Reliable connections protect your data and help your business avoid costly errors.

Data Integrity Checks

Regular data integrity checks keep your power apps accurate and trustworthy. Clean data means fewer errors and smoother business processes. You should use both manual and automated validation methods. For example, use the IsMatch function and regular expressions to check if phone numbers and email addresses follow the right pattern. DelayOutput on input controls can improve user experience by preventing early error messages.

BenefitExplanation
Improved Operational EfficiencyClean data leads to fewer errors and smoother processes, reducing time spent on manual fixes.
Better Decision-MakingAccurate data ensures that business intelligence tools provide reliable insights for strategy.
Cost ReductionMaintaining data integrity minimizes the need for costly data cleanups and error corrections.

You should combine manual validation with automated rules for the best results. This hybrid approach keeps your data consistent and compliant with business rules. Strong data integrity supports better decisions and helps your business grow.

  • Data integrity keeps your data clean and reliable.
  • Regular checks support operational efficiency and lower costs.
  • Accurate data helps your business make smart choices.

Tip: Make data integrity a habit. Regular checks protect your business and keep your power apps running at their best.

Preventing User Interaction Issues

Streamlined UI

You can prevent many user problems in power apps by creating a streamlined UI. A clean interface helps users focus on their tasks and reduces confusion. You should use Display Mode to disable buttons after submission. This step prevents users from clicking the same button multiple times, which can cause errors. Loading spinners show users that the app is processing their request. These spinners build trust and keep users informed.

You should also provide clear notifications for every action. Confirmations and error messages help users understand what happens after they interact with the app. Reusable components create a consistent look and feel across all screens. This consistency makes it easier for users to learn and use the app. Remove unnecessary fields from forms and use clear labels. This approach keeps the interface simple and direct.

  • Disable buttons after submission to avoid repeated actions.
  • Show loading spinners during processing.
  • Use clear notifications for confirmations and errors.
  • Build with reusable components for consistency.
  • Remove extra fields and use clear labels.

You should also use conditional logic for control states. Show spinners only when needed and match their design to your business branding. Always test your power apps on different devices to ensure a responsive experience.

Performance Optimization

Optimizing performance in power apps improves user satisfaction and supports your business goals. Fast apps keep users engaged and help your business run smoothly. You should focus on efficient data handling and quick load times. This approach reduces delays and keeps users productive.

BenefitDescription
Smooth OperationApplications run smoothly, ensuring a seamless user experience.
Faster Load TimesOptimized apps load quickly, enhancing user satisfaction and engagement.
Efficient Data HandlingReduces unnecessary operations and optimizes data usage, improving responsiveness.
Improved ScalabilityEfficient performance supports scalability as usage increases, maintaining app reliability.
Enhanced User EngagementFast startup and responsive interactions lead to better user engagement and satisfaction.

You should monitor app performance regularly. Remove unnecessary data calls and simplify formulas. These steps help your power apps scale as your business grows. When you optimize performance, you create a better experience for every user.

Clear Navigation

Clear navigation helps users move through your power apps without confusion. You should design responsive layouts that adapt to different screen sizes. This flexibility ensures users can access your business tools on any device. A consistent app frame, with headers and navigation controls, should appear on every screen. This structure helps users know where they are and how to move forward.

  • Use responsive layouts to scale content and rearrange elements.
  • Keep a consistent app frame with headers and navigation on every screen.
  • Name collections clearly for better readability and teamwork.
  • Limit collection size to store only necessary data.
  • Clear collections when data is no longer needed to avoid confusion.
  • Design for multiple devices, using a mobile-first approach when possible.

You should always test navigation paths before releasing your power apps. This step ensures users can complete their tasks without getting lost. Clear navigation supports your business by making every user more efficient and confident.

Integrating Data and User Experience

Aligning Data with User Needs

You can make your power apps more effective by matching data to what your users need. When you understand how users work, you can design apps that help them finish tasks faster. Embedding AI in power apps lets you create smart workflows. These workflows adapt to user needs and make decisions based on real-time data. You can use workflow orchestration to connect actions across different systems. This approach removes manual steps and helps your business run smoothly.

  • AI in power apps gives users recommendations based on data.
  • Smart workflows save time and reduce errors.
  • Orchestration lets your business handle tasks without extra work.

You should always think about how users interact with data. When you design apps, focus on making data easy to find and use. This helps users trust the system and improves their experience. You can also set up dashboards in power apps. These dashboards give IT teams and business leaders a clear view of how data moves through your business. With better visibility, you can spot problems early and make changes that help everyone.

Testing and Feedback

Testing your power apps is important for finding issues before users do. You should test how data flows through your apps and how users interact with each screen. Try different scenarios to see if the data stays accurate and if users can finish their tasks. Ask users for feedback after they use the apps. Their comments help you find areas where the data or the design needs improvement.

  1. Test data entry and updates in real situations.
  2. Watch how users move through the app.
  3. Collect feedback from users and business teams.
  4. Use power apps monitoring tools to track data and user actions.

You can use these steps to make sure your apps meet business goals. Feedback helps you adjust your apps so they work better for everyone.

Continuous Improvement

Continuous improvement keeps your power apps useful as your business changes. You should review roles and responsibilities often. This makes sure each user has the right access to data and can do their job well. Change management helps your business handle updates without confusion. When you talk with your team about power apps, you find new ways to improve both data and user experience.

  • Regular reviews help your apps match new business needs.
  • Team discussions lead to better solutions.
  • Collecting feedback lets you update apps as users and business needs change.

You should always look for ways to make your power apps better. This habit helps your business stay ahead and keeps users happy with their experience.


You can prevent power apps fail by focusing on both data and user interaction. When you address errors and failure in your power apps, you build stronger solutions for your business. Power apps need clear data, reliable connections, and simple screens. You should apply these best practices to every power apps project. As your business grows, keep learning and adapting your power apps. This approach helps your business get the most value from power apps.

FAQ

What is the main reason power apps fail?

You often see failures because of poor data structure or confusing user interfaces. You need to check both data and interaction design to find the real cause.

How can I improve app performance?

You should remove unnecessary data calls and simplify formulas. Test your app on different devices to make sure it loads quickly and works well.

Why do users get lost in my app?

Users get lost when navigation is inconsistent or links are broken. You should keep navigation clear and use the same patterns on every screen.

How do I prevent duplicate records?

You can set up validation rules and use automated checks. Regularly review your data to catch and remove duplicates before they cause problems.

What should I do if my app shows delegation warnings?

You need to adjust your queries to use supported functions. Delegation helps power apps handle large data sets without missing information.

How do I make my app accessible to everyone?

You should use clear labels, provide tooltips, and test with screen readers. Accessibility features help all users interact with your app.

Can I use power apps with other Microsoft tools?

Yes, you can connect power apps to tools like SharePoint, Excel, and Teams. This integration helps you streamline your business processes.

🚀 Want to be part of m365.fm?

Then stop just listening… and start showing up.

👉 Connect with me on LinkedIn and let’s make something happen:

  • 🎙️ Be a podcast guest and share your story
  • 🎧 Host your own episode (yes, seriously)
  • 💡 Pitch topics the community actually wants to hear
  • 🌍 Build your personal brand in the Microsoft 365 space

This isn’t just a podcast — it’s a platform for people who take action.

🔥 Most people wait. The best ones don’t.

👉 Connect with me on LinkedIn and send me a message:
"I want in"

Let’s build something awesome 👊

1
00:00:00,000 --> 00:00:05,000
Hello, my name is Milco Peters and I translate how technology actually shapes business reality.

2
00:00:05,000 --> 00:00:10,220
Contoso now has clean dataverse tables, structured employee records, vacation requests, approval

3
00:00:10,220 --> 00:00:14,280
states and country rules, but none of that fixes the real problem yet because people still

4
00:00:14,280 --> 00:00:17,320
can't work through the process in a way that changes behavior.

5
00:00:17,320 --> 00:00:20,520
Data on its own is only stored in tent, it's not execution.

6
00:00:20,520 --> 00:00:24,320
And this is where most first power platform projects either create momentum or quietly

7
00:00:24,320 --> 00:00:25,320
stall.

8
00:00:25,320 --> 00:00:28,880
In this episode, we move from structure to interaction and I'll show you how one decision

9
00:00:28,880 --> 00:00:35,000
canvas or model driven shapes adoption, licensing, governance and how fast a vacation request

10
00:00:35,000 --> 00:00:38,880
moves from someone's head into an actual business outcome.

11
00:00:38,880 --> 00:00:42,640
The moment data stops being enough, so let's step into Contoso for a second.

12
00:00:42,640 --> 00:00:46,240
Up to this point, they've done something a lot of organizations never do properly.

13
00:00:46,240 --> 00:00:48,040
They created structure first.

14
00:00:48,040 --> 00:00:51,280
Employee data is in dataverse, vacation requests have a place to live.

15
00:00:51,280 --> 00:00:55,120
Approval status is no longer a vague phrase inside someone's inbox.

16
00:00:55,120 --> 00:00:58,000
Country rules exist as data instead of tribal memory.

17
00:00:58,000 --> 00:01:01,200
On paper, that sounds like progress and it is.

18
00:01:01,200 --> 00:01:05,520
But only in the same way a well-organized warehouse is progress before the delivery trucks start

19
00:01:05,520 --> 00:01:06,520
moving.

20
00:01:06,520 --> 00:01:09,200
Because if you look closely, the operating pain is still there.

21
00:01:09,200 --> 00:01:12,840
An employee still wants time off and still starts with the easiest available path, which

22
00:01:12,840 --> 00:01:17,040
is usually an email, a team's message or some half-verbal agreement with a manager.

23
00:01:17,040 --> 00:01:19,080
The manager still has to remember what was agreed.

24
00:01:19,080 --> 00:01:23,440
HR still ends up checking spreadsheets, inbox threads and local policy notes to work out

25
00:01:23,440 --> 00:01:24,640
what is actually true.

26
00:01:24,640 --> 00:01:26,440
So yes, the data model is cleaner.

27
00:01:26,440 --> 00:01:31,060
But the day-to-day business reality has not changed yet because the people inside the process

28
00:01:31,060 --> 00:01:33,160
are still interacting with the old front door.

29
00:01:33,160 --> 00:01:34,160
And why is that?

30
00:01:34,160 --> 00:01:37,200
Because stored data and enacted process are not the same thing.

31
00:01:37,200 --> 00:01:38,560
We mix those up all the time.

32
00:01:38,560 --> 00:01:42,360
We think that once a table exists, the business is somehow more mature.

33
00:01:42,360 --> 00:01:44,240
But maturity does not come from storage.

34
00:01:44,240 --> 00:01:46,160
It comes from repeatable behavior.

35
00:01:46,160 --> 00:01:49,320
It comes from making the right action easier than the wrong one.

36
00:01:49,320 --> 00:01:51,120
That is the gap most teams miss.

37
00:01:51,120 --> 00:01:55,560
They celebrate that they now have the data, but what they really have is an inventory of

38
00:01:55,560 --> 00:01:57,360
decisions not yet taken.

39
00:01:57,360 --> 00:02:00,360
The employee has not submitted the request through a governed path.

40
00:02:00,360 --> 00:02:03,280
The manager has not approved anything through a visible mechanism.

41
00:02:03,280 --> 00:02:07,880
HR has not gained operational clarity just because a dataverse table is ready.

42
00:02:07,880 --> 00:02:12,040
Until someone can enter, review and move work through a usable interface, the system is

43
00:02:12,040 --> 00:02:13,040
structurally incomplete.

44
00:02:13,040 --> 00:02:14,520
It's not a people problem.

45
00:02:14,520 --> 00:02:15,520
It's a system outcome.

46
00:02:15,520 --> 00:02:19,560
The people are using email because email still behaves like the path of least resistance.

47
00:02:19,560 --> 00:02:22,240
And the system is doing exactly what it was shaped to do.

48
00:02:22,240 --> 00:02:26,360
That captures data well enough for architects and admins to feel progress, but it does not

49
00:02:26,360 --> 00:02:30,120
yet change the human experience at the point where the request enters the business.

50
00:02:30,120 --> 00:02:34,080
This clicked for me years ago when I watched teams proudly present a new data model and

51
00:02:34,080 --> 00:02:36,440
then act surprised that adoption stayed flat.

52
00:02:36,440 --> 00:02:38,080
They had solved storage but not interaction.

53
00:02:38,080 --> 00:02:40,240
In technical terms, they had a back end.

54
00:02:40,240 --> 00:02:42,240
In business terms, they still had friction.

55
00:02:42,240 --> 00:02:43,760
And friction always finds a workaround.

56
00:02:43,760 --> 00:02:45,440
Now map that to vacation requests.

57
00:02:45,440 --> 00:02:46,760
The employee's real job is simple.

58
00:02:46,760 --> 00:02:47,760
I need time off.

59
00:02:47,760 --> 00:02:48,800
I need to know who sees this.

60
00:02:48,800 --> 00:02:52,480
I need confidence that it won't disappear into someone's calendar chaos.

61
00:02:52,480 --> 00:02:53,920
The manager's job is also simple.

62
00:02:53,920 --> 00:02:54,920
Is this valid?

63
00:02:54,920 --> 00:02:55,920
Does it fit the team context?

64
00:02:55,920 --> 00:02:57,400
And who covers if I'm away?

65
00:02:57,400 --> 00:02:58,880
HR needs something else again.

66
00:02:58,880 --> 00:03:02,600
Consistency, visibility, a clean record, less chasing.

67
00:03:02,600 --> 00:03:05,040
None of those jobs are solved by tables alone.

68
00:03:05,040 --> 00:03:09,080
Tables matter because they give us structure, status, relationships and future reporting.

69
00:03:09,080 --> 00:03:11,920
They are the backbone, but nobody experiences a backbone directly.

70
00:03:11,920 --> 00:03:13,600
What they experience is the front door.

71
00:03:13,600 --> 00:03:18,200
They experience whether the process feels clear, fast and trustworthy or vague, slow and

72
00:03:18,200 --> 00:03:19,200
social.

73
00:03:19,200 --> 00:03:20,680
That is why the first app matters so much.

74
00:03:20,680 --> 00:03:23,640
Not because it proves power apps can render screens.

75
00:03:23,640 --> 00:03:26,280
Not because it gives leadership something shiny to demo.

76
00:03:26,280 --> 00:03:29,840
It matters because it is the first moment where the business stops asking, do we have the

77
00:03:29,840 --> 00:03:30,840
data?

78
00:03:30,840 --> 00:03:34,000
And starts asking, can people actually work through this in a better way?

79
00:03:34,000 --> 00:03:35,880
Once you see that gap, the next question changes.

80
00:03:35,880 --> 00:03:37,520
It is no longer, can we build an app?

81
00:03:37,520 --> 00:03:38,520
Of course we can.

82
00:03:38,520 --> 00:03:42,280
The real question is, what kind of app are we actually building and what operating behavior

83
00:03:42,280 --> 00:03:44,000
are we trying to create?

84
00:03:44,000 --> 00:03:45,720
The real job of a first app.

85
00:03:45,720 --> 00:03:49,920
So before we talk about screens, controls or whether canvas feels easier than model driven,

86
00:03:49,920 --> 00:03:51,480
we need one clean reframing.

87
00:03:51,480 --> 00:03:52,960
The first app is not a feature demo.

88
00:03:52,960 --> 00:03:54,600
It is a business interface.

89
00:03:54,600 --> 00:03:58,520
And that difference changes almost every decision that comes after it because when teams

90
00:03:58,520 --> 00:04:03,320
treat the first app like a demo, they optimize for what looks impressive in a workshop.

91
00:04:03,320 --> 00:04:07,600
When they treat it like a business interface, they optimize for what removes friction at

92
00:04:07,600 --> 00:04:11,200
the exact point where work enters the system and starts moving.

93
00:04:11,200 --> 00:04:12,520
That is the real job.

94
00:04:12,520 --> 00:04:15,040
In Contoso, nobody wakes up wanting a power app.

95
00:04:15,040 --> 00:04:16,040
That is not the need.

96
00:04:16,040 --> 00:04:18,760
The need is much simpler and much more operational.

97
00:04:18,760 --> 00:04:20,480
An employee wants to ask for time off.

98
00:04:20,480 --> 00:04:23,440
A manager wants to review that request without hunting for context.

99
00:04:23,440 --> 00:04:27,120
HR wants to know what is pending, what is approved and where the process is stuck.

100
00:04:27,120 --> 00:04:28,440
So the app is not the product.

101
00:04:28,440 --> 00:04:32,400
The app is the door through which that operational behavior becomes consistent.

102
00:04:32,400 --> 00:04:33,920
And why does that matter so much?

103
00:04:33,920 --> 00:04:36,880
Because first apps teach the organization what low code means.

104
00:04:36,880 --> 00:04:40,840
If the first app feels bloated, confusing or overbuilt, people conclude the platform is

105
00:04:40,840 --> 00:04:41,840
messy.

106
00:04:41,840 --> 00:04:44,840
If the first app is clear, fast and trustworthy, people conclude the platform can

107
00:04:44,840 --> 00:04:46,600
reduce friction in real work.

108
00:04:46,600 --> 00:04:49,320
Same technology, different lessons, different business outcome.

109
00:04:49,320 --> 00:04:54,320
This is where most people miss the split between the human job and the system job.

110
00:04:54,320 --> 00:04:57,280
The human job in a vacation request process is very small.

111
00:04:57,280 --> 00:04:59,000
Ask, review, approve, track.

112
00:04:59,000 --> 00:05:00,000
That is it.

113
00:05:00,000 --> 00:05:01,680
But the system job is not small at all.

114
00:05:01,680 --> 00:05:03,600
The system has to validate the submission.

115
00:05:03,600 --> 00:05:05,840
It has to root the request into the correct path.

116
00:05:05,840 --> 00:05:09,760
It has to record status changes in a way that stays visible and auditable.

117
00:05:09,760 --> 00:05:14,160
And it has to expose enough status back to the employee, manager and HR team.

118
00:05:14,160 --> 00:05:18,200
So nobody is forced back into site channel communication just to understand what is happening.

119
00:05:18,200 --> 00:05:22,800
So when we design the first app, we are not building around every system responsibility

120
00:05:22,800 --> 00:05:23,800
at once.

121
00:05:23,800 --> 00:05:27,800
We are deciding where the human interaction should be simple and where the underlying structure

122
00:05:27,800 --> 00:05:29,680
should carry the weight instead.

123
00:05:29,680 --> 00:05:31,400
That distinction protects us.

124
00:05:31,400 --> 00:05:35,240
Because the first release should narrow scope, not prove everything the platform can do.

125
00:05:35,240 --> 00:05:39,920
A lot of teams try to use the first app as a stage for every capability they have just

126
00:05:39,920 --> 00:05:40,920
learned.

127
00:05:40,920 --> 00:05:41,920
Tabs everywhere.

128
00:05:41,920 --> 00:05:43,520
Conditional logic everywhere.

129
00:05:43,520 --> 00:05:47,760
It feels because they might be useful later, but that approach creates structural drag

130
00:05:47,760 --> 00:05:49,480
before trust has even formed.

131
00:05:49,480 --> 00:05:53,000
A first app earns trust by being small enough to succeed.

132
00:05:53,000 --> 00:05:58,200
At Contoso, success does not mean we digitize leave management in some giant abstract sense.

133
00:05:58,200 --> 00:06:00,360
Success means something much more grounded.

134
00:06:00,360 --> 00:06:03,320
An employee can submit a request in one clear place.

135
00:06:03,320 --> 00:06:05,880
A manager can see it without inbox archaeology.

136
00:06:05,880 --> 00:06:08,640
HR can track status without chasing people.

137
00:06:08,640 --> 00:06:12,160
And the cycle time starts dropping because the request no longer enters the business as

138
00:06:12,160 --> 00:06:13,480
an unstructured message.

139
00:06:13,480 --> 00:06:14,480
That is the threshold.

140
00:06:14,480 --> 00:06:17,160
Once you nail that, everything else clicks.

141
00:06:17,160 --> 00:06:19,840
Because now the app is doing what a first app should do.

142
00:06:19,840 --> 00:06:22,960
It reduces friction at the point where decisions enter the system.

143
00:06:22,960 --> 00:06:25,640
It makes the process more visible than memory.

144
00:06:25,640 --> 00:06:29,040
And it starts replacing social guesswork with operational clarity.

145
00:06:29,040 --> 00:06:30,520
The reason this works is simple.

146
00:06:30,520 --> 00:06:32,080
People trust processes they can see.

147
00:06:32,080 --> 00:06:34,040
They avoid processes that feel ambiguous.

148
00:06:34,040 --> 00:06:36,160
So the first app should not try to look advanced.

149
00:06:36,160 --> 00:06:40,040
It should try to make the next action obvious and the current status legible.

150
00:06:40,040 --> 00:06:41,440
That is where the value comes from.

151
00:06:41,440 --> 00:06:47,200
Not from animation, not from complexity, not from showing the full future architecture on day one.

152
00:06:47,200 --> 00:06:49,640
From reducing the cost of doing the right thing.

153
00:06:49,640 --> 00:06:52,160
And once you understand that, another point becomes obvious.

154
00:06:52,160 --> 00:06:54,600
The wrong first app does not just fail quietly.

155
00:06:54,600 --> 00:06:56,520
It teaches the organization the wrong lesson.

156
00:06:56,520 --> 00:06:58,560
It tells people low code creates clutter.

157
00:06:58,560 --> 00:07:00,040
That forms create overhead.

158
00:07:00,040 --> 00:07:03,240
And that structured processes are slower than informal ones.

159
00:07:03,240 --> 00:07:06,000
From a system perspective, that is not just disappointing.

160
00:07:06,000 --> 00:07:09,160
It is expensive because now your next app starts from distrust.

161
00:07:09,160 --> 00:07:13,920
So before we choose canvas or model driven, we need one clean definition of the problem

162
00:07:13,920 --> 00:07:15,480
we are actually solving.

163
00:07:15,480 --> 00:07:18,200
Why first apps fail before anyone opens them?

164
00:07:18,200 --> 00:07:20,400
Why first apps fail before anyone opens them?

165
00:07:20,400 --> 00:07:24,760
Most first apps fail long before a user taps the icon because the failure usually starts

166
00:07:24,760 --> 00:07:28,000
in the design conversation, not in the release itself.

167
00:07:28,000 --> 00:07:29,760
The team begins with screens.

168
00:07:29,760 --> 00:07:31,080
Someone sketches a homepage.

169
00:07:31,080 --> 00:07:32,360
Someone else asks for tabs.

170
00:07:32,360 --> 00:07:36,200
A manager wants a dashboard and HR wants every exception visible from day one.

171
00:07:36,200 --> 00:07:38,920
The app starts taking shape as a collection of requests.

172
00:07:38,920 --> 00:07:41,720
But no one has yet defined what the system is supposed to change.

173
00:07:41,720 --> 00:07:42,960
That sequence sounds normal.

174
00:07:42,960 --> 00:07:45,000
It is also where the drag begins.

175
00:07:45,000 --> 00:07:49,000
Because if you start with screens, you usually copy the old process into a new interface.

176
00:07:49,000 --> 00:07:50,720
The email form becomes a digital form.

177
00:07:50,720 --> 00:07:52,640
The spreadsheet columns become fields.

178
00:07:52,640 --> 00:07:54,520
The approval confusion becomes a drop down.

179
00:07:54,520 --> 00:07:57,360
It looks more modern, but the operating behavior stays the same.

180
00:07:57,360 --> 00:07:59,440
People still carry interpretation in their heads.

181
00:07:59,440 --> 00:08:00,840
They still work around ambiguity.

182
00:08:00,840 --> 00:08:05,200
They still compensate for a weak process through extra messages inside conversations.

183
00:08:05,200 --> 00:08:07,880
So the app looks cleaner, but the business does not move faster.

184
00:08:07,880 --> 00:08:09,160
I see this all the time.

185
00:08:09,160 --> 00:08:13,320
Teams call it digitization when what they really built is a better looking version of the

186
00:08:13,320 --> 00:08:14,720
same structural problem.

187
00:08:14,720 --> 00:08:16,560
They rebuild friction in a nicer font.

188
00:08:16,560 --> 00:08:20,960
And then they wonder why adoption is hesitant, why support questions pile up, and why nobody

189
00:08:20,960 --> 00:08:24,640
trusts the status field enough to stop sending follow-up emails.

190
00:08:24,640 --> 00:08:25,640
The reason is simple.

191
00:08:25,640 --> 00:08:27,320
They never define system intent.

192
00:08:27,320 --> 00:08:29,880
System intent is the answer to a very plain question.

193
00:08:29,880 --> 00:08:33,440
What should happen for whom under what conditions and what should become visible the moment

194
00:08:33,440 --> 00:08:35,440
that action enters the business?

195
00:08:35,440 --> 00:08:38,080
If that is not clear, the app has no stable center.

196
00:08:38,080 --> 00:08:39,880
It becomes a surface for collecting wishes.

197
00:08:39,880 --> 00:08:42,280
And once that starts, overdesign takes over.

198
00:08:42,280 --> 00:08:47,760
A leader asks, what if the employee wants half days in one country and carry over in another?

199
00:08:47,760 --> 00:08:50,360
Someone else asks, what if the manager is absent for two weeks?

200
00:08:50,360 --> 00:08:55,480
HR asks for attachments, comments, override paths, custom notices, and maybe a special branch

201
00:08:55,480 --> 00:08:57,200
for senior executives.

202
00:08:57,200 --> 00:08:59,280
None of those questions are unreasonable on their own.

203
00:08:59,280 --> 00:09:02,240
But if you answer all of them in release one, you no longer have a first app.

204
00:09:02,240 --> 00:09:05,040
You have a fragile negotiation between edge cases.

205
00:09:05,040 --> 00:09:07,120
From a system perspective, that is not maturity.

206
00:09:07,120 --> 00:09:09,160
It is early stage complexity debt.

207
00:09:09,160 --> 00:09:13,240
Because the thing most people miss is that exceptions are real, but they are not equally important

208
00:09:13,240 --> 00:09:14,240
at the beginning.

209
00:09:14,240 --> 00:09:18,240
If you build around them too early, the main path gets buried under conditional logic,

210
00:09:18,240 --> 00:09:20,440
extra fields, and unclear navigation.

211
00:09:20,440 --> 00:09:25,040
The employee who just wants to request five days off now enters a process that feels

212
00:09:25,040 --> 00:09:26,680
heavier than the old email.

213
00:09:26,680 --> 00:09:31,400
So the new system loses before it even has a chance to teach a better habit.

214
00:09:31,400 --> 00:09:34,280
There is another failure point that sits underneath all this.

215
00:09:34,280 --> 00:09:37,080
And beginners usually do not see it until later.

216
00:09:37,080 --> 00:09:38,560
Hidden licensing choices.

217
00:09:38,560 --> 00:09:42,520
A team adds data verse, which may be the right architectural choice, but they do not stop

218
00:09:42,520 --> 00:09:45,000
to ask what that means for licensing.

219
00:09:45,000 --> 00:09:48,600
Then someone suggests a custom connector to some external HR endpoint because it sounds

220
00:09:48,600 --> 00:09:49,800
small and elegant.

221
00:09:49,800 --> 00:09:54,560
But a small integration choice can change the cost model fast because custom connectors and

222
00:09:54,560 --> 00:09:57,000
premium capabilities are not just technical options.

223
00:09:57,000 --> 00:09:59,280
They reshape the operating cost of the solution.

224
00:09:59,280 --> 00:10:03,120
Now the app carries financial weight, the business never expected.

225
00:10:03,120 --> 00:10:07,000
If that surprise lands after enthusiasm is already high, trust drops.

226
00:10:07,000 --> 00:10:08,880
The same is true for environment shortcuts.

227
00:10:08,880 --> 00:10:11,040
Building in the default environment feels fast.

228
00:10:11,040 --> 00:10:14,760
It removes friction in the moment, but speed without boundaries usually creates cleanup

229
00:10:14,760 --> 00:10:15,760
later.

230
00:10:15,760 --> 00:10:20,240
What looked like convenience was actually governance debt waiting for a production conversation.

231
00:10:20,240 --> 00:10:23,160
So first apps do not fail because power apps is weak.

232
00:10:23,160 --> 00:10:26,680
They fail because teams confuse visible progress with structural clarity.

233
00:10:26,680 --> 00:10:29,720
A good first app is not the one that answers every future question.

234
00:10:29,720 --> 00:10:34,040
It is the one that proves the main path can become simpler, faster and more visible without

235
00:10:34,040 --> 00:10:35,800
creating new fragility underneath.

236
00:10:35,800 --> 00:10:37,880
That means we need to resist fake completeness.

237
00:10:37,880 --> 00:10:39,520
We do not need every exception now.

238
00:10:39,520 --> 00:10:41,960
We do not need the whole future architecture now.

239
00:10:41,960 --> 00:10:46,280
We do need one clean definition of the problem, one clean entry point and one design choice

240
00:10:46,280 --> 00:10:49,160
that improves business behavior immediately.

241
00:10:49,160 --> 00:10:52,920
So before we choose canvas or model driven, we need to define the problem in operating terms

242
00:10:52,920 --> 00:10:54,400
not screen terms.

243
00:10:54,400 --> 00:10:56,840
Define the business problem in operating terms.

244
00:10:56,840 --> 00:11:01,240
So let's define the problem the way the business actually feels it, not we need an app,

245
00:11:01,240 --> 00:11:05,320
not we should modernize HR, not even we want to use power platform better.

246
00:11:05,320 --> 00:11:08,840
Those are all directionally fine, but none of them are operationally useful because they

247
00:11:08,840 --> 00:11:11,840
describe intention, not the work that is breaking.

248
00:11:11,840 --> 00:11:14,080
At Contoso, the real problem is this.

249
00:11:14,080 --> 00:11:18,400
Vacation requests enter the organization through too many paths, move with too little visibility

250
00:11:18,400 --> 00:11:22,600
and depend too heavily on inbox behavior instead of a governed process.

251
00:11:22,600 --> 00:11:26,280
That is the problem and once you say it that way, a lot of noise falls away.

252
00:11:26,280 --> 00:11:29,600
Because now we are not trying to solve leave management in the abstract.

253
00:11:29,600 --> 00:11:33,840
We are trying to solve request entry, decision clarity and status visibility.

254
00:11:33,840 --> 00:11:37,560
That matters because if a problem statement is too broad, the app gets broad.

255
00:11:37,560 --> 00:11:41,560
If the app gets broad, release one gets heavy and heavy first releases usually fail not

256
00:11:41,560 --> 00:11:45,440
because the team lacks skill, but because they are trying to solve a category instead of

257
00:11:45,440 --> 00:11:46,440
a bottleneck.

258
00:11:46,440 --> 00:11:50,560
The current state inside Contoso is familiar and employee needs time off and starts with

259
00:11:50,560 --> 00:11:52,480
whatever path feels fastest.

260
00:11:52,480 --> 00:11:56,480
Sometimes that is email, sometimes it is teams, sometimes it is a local spreadsheet or

261
00:11:56,480 --> 00:12:00,680
a manager saying yes, that should be fine with no formal record created at all.

262
00:12:00,680 --> 00:12:05,120
Then HR gets involved later often after the fact trying to reconstruct what was requested,

263
00:12:05,120 --> 00:12:08,240
what was approved and what policy should have applied in that country.

264
00:12:08,240 --> 00:12:11,200
So the process exists but the operating model is fragmented.

265
00:12:11,200 --> 00:12:13,200
And what does fragmentation create?

266
00:12:13,200 --> 00:12:15,520
Delay, interpretation, inbox dependency.

267
00:12:15,520 --> 00:12:19,480
A manager becomes a routing engine, HR becomes a reconciliation layer, the employee becomes

268
00:12:19,480 --> 00:12:20,840
a follow-up mechanism.

269
00:12:20,840 --> 00:12:22,120
That is not process maturity.

270
00:12:22,120 --> 00:12:23,120
That is manual compensation.

271
00:12:23,120 --> 00:12:27,040
Now, define the desired state just as clearly one request path.

272
00:12:27,040 --> 00:12:31,280
One status model, one visible record of truth that does not mean every edge case is solved

273
00:12:31,280 --> 00:12:32,280
on day one.

274
00:12:32,280 --> 00:12:36,040
It means every normal request enters the business through a common door, carries a shared

275
00:12:36,040 --> 00:12:41,120
set of status values and stays visible enough that nobody needs to rebuild the story from scattered

276
00:12:41,120 --> 00:12:42,120
messages.

277
00:12:42,120 --> 00:12:43,520
That is the operating shift.

278
00:12:43,520 --> 00:12:47,360
And once you define it that way, the KPI becomes obvious, we want to reduce cycle time

279
00:12:47,360 --> 00:12:51,040
from days to hours in some cases with later automation even minutes.

280
00:12:51,040 --> 00:12:54,440
But for this episode, hours is already enough to prove the point.

281
00:12:54,440 --> 00:12:58,640
Because if the request enters the business cleanly, the time lost to clarification, forwarding

282
00:12:58,640 --> 00:13:01,520
and status chasing starts collapsing immediately.

283
00:13:01,520 --> 00:13:03,160
There are supporting outcomes as well.

284
00:13:03,160 --> 00:13:07,800
Approval SLA adherence improves because the request becomes visible and structured.

285
00:13:07,800 --> 00:13:12,720
HR follow-up drops because the system now carries status instead of hiding it in mailboxes.

286
00:13:12,720 --> 00:13:16,600
Absence planning gets cleaner because approved requests become easier to trust and report

287
00:13:16,600 --> 00:13:17,600
on.

288
00:13:17,600 --> 00:13:18,600
But those are supporting outcomes.

289
00:13:18,600 --> 00:13:23,400
The main operating promise stays simple, shorten the time between employee intent and organizational

290
00:13:23,400 --> 00:13:24,400
response.

291
00:13:24,400 --> 00:13:27,800
Now you might be thinking, what about country rules, delegation and all the real world

292
00:13:27,800 --> 00:13:29,600
variation, fair question?

293
00:13:29,600 --> 00:13:30,720
Those are real constraints.

294
00:13:30,720 --> 00:13:32,600
They are not reasons to delay problem definition.

295
00:13:32,600 --> 00:13:35,240
In fact, they make good definition more important.

296
00:13:35,240 --> 00:13:38,600
Because country policy complexity does not change the nature of the problem.

297
00:13:38,600 --> 00:13:41,160
It changes the structure behind the process.

298
00:13:41,160 --> 00:13:43,520
Delegation does not change the need for one request path.

299
00:13:43,520 --> 00:13:46,440
It changes who can act when the manager is unavailable.

300
00:13:46,440 --> 00:13:48,680
Those are design constraints inside the system.

301
00:13:48,680 --> 00:13:51,000
They are not excuses to keep the front door vague.

302
00:13:51,000 --> 00:13:53,520
This is where good app design starts getting more disciplined.

303
00:13:53,520 --> 00:13:56,760
Not with pages, with three things, event decision status.

304
00:13:56,760 --> 00:13:59,200
The event is the employee asking for time off.

305
00:13:59,200 --> 00:14:02,360
The decision is whether that request fits policy and team reality.

306
00:14:02,360 --> 00:14:05,880
The status is the visible state that tells everyone where the request now sits.

307
00:14:05,880 --> 00:14:08,560
If you get those three right, the architecture starts to stabilize.

308
00:14:08,560 --> 00:14:10,480
If you skip them, the app becomes decorative.

309
00:14:10,480 --> 00:14:14,480
It may look useful, but underneath it is still asking people to carry too much meaning

310
00:14:14,480 --> 00:14:15,480
in their heads.

311
00:14:15,480 --> 00:14:18,960
Before we draw anything, we define the business problem in operating terms.

312
00:14:18,960 --> 00:14:23,680
A request enters through inconsistent channels, moves through invisible decisions, and produces

313
00:14:23,680 --> 00:14:25,160
unnecessary delay.

314
00:14:25,160 --> 00:14:28,800
The solution, at least in release one, is not digital transformation.

315
00:14:28,800 --> 00:14:34,520
It is a controlled entry point, a shared status model, and a faster path from request to response.

316
00:14:34,520 --> 00:14:39,440
Now map that to how Contoso actually works today, and the architecture starts to reveal itself.

317
00:14:39,440 --> 00:14:42,040
The process map behind a simple vacation request.

318
00:14:42,040 --> 00:14:46,680
So now we move from problem definition into process shape, because once you know the bottleneck,

319
00:14:46,680 --> 00:14:48,320
the next question is very practical.

320
00:14:48,320 --> 00:14:52,840
What actually happens in order when a vacation request enters the business?

321
00:14:52,840 --> 00:14:56,440
At first glance, this looks almost too simple to map, someone wants time off.

322
00:14:56,440 --> 00:14:59,200
They ask, someone approves, done.

323
00:14:59,200 --> 00:15:03,280
But simple processes often create the most hidden friction, because people assume shared

324
00:15:03,280 --> 00:15:05,640
understanding when none really exists.

325
00:15:05,640 --> 00:15:09,640
And when understanding stays implicit, the work gets pushed into memory, inboxes, and follow

326
00:15:09,640 --> 00:15:10,640
up behavior.

327
00:15:10,640 --> 00:15:12,080
So let's make the path visible.

328
00:15:12,080 --> 00:15:16,320
The event is the employee submitting a request, that is the trigger, not a conversation,

329
00:15:16,320 --> 00:15:20,160
not a draft in someone's notes, not an email chain with five replies and a sounds good to

330
00:15:20,160 --> 00:15:21,160
me.

331
00:15:21,160 --> 00:15:24,800
The actual process starts when the request becomes a record in the system.

332
00:15:24,800 --> 00:15:28,120
Before that you only have intention, after that you have something the business can act

333
00:15:28,120 --> 00:15:29,120
on.

334
00:15:29,120 --> 00:15:33,080
That distinction matters more than it sounds, because if the event is vague, everything

335
00:15:33,080 --> 00:15:35,120
downstream becomes unstable.

336
00:15:35,120 --> 00:15:38,960
Managers respond inconsistently, HR reacts late.

337
00:15:38,960 --> 00:15:41,440
These assume approval when none was formally recorded.

338
00:15:41,440 --> 00:15:45,520
So the first architectural move is to define one clear event boundary.

339
00:15:45,520 --> 00:15:46,880
Submission creates the request.

340
00:15:46,880 --> 00:15:48,960
Then the process enters its first decision layer.

341
00:15:48,960 --> 00:15:51,040
Does the request fit the basic policy structure?

342
00:15:51,040 --> 00:15:54,880
Now for release one, we do not need to automate every policy nuance.

343
00:15:54,880 --> 00:15:57,280
But we do need to know what the decision is trying to answer.

344
00:15:57,280 --> 00:16:01,440
Other dates complete is the employee identified, is the manager relationship available, is

345
00:16:01,440 --> 00:16:04,360
the country context known if policy differs by geography?

346
00:16:04,360 --> 00:16:05,840
These are not advanced rules.

347
00:16:05,840 --> 00:16:07,000
They are entry conditions.

348
00:16:07,000 --> 00:16:11,480
And if the app captures them clearly, the next person in the chain does not need to reconstruct

349
00:16:11,480 --> 00:16:13,680
basic context before making a decision.

350
00:16:13,680 --> 00:16:15,640
Then comes the approval decision itself.

351
00:16:15,640 --> 00:16:19,640
Can the manager approve this request or is delegation needed because that manager is absent?

352
00:16:19,640 --> 00:16:22,880
This is where a lot of teams rush into automation too early.

353
00:16:22,880 --> 00:16:28,520
They want escalation parts, substitutes, reminders, maybe even exception routing on day one.

354
00:16:28,520 --> 00:16:30,560
But the cleaner way to think about it is this.

355
00:16:30,560 --> 00:16:34,520
The request needs to move to the next accountable decision maker without the employee having to

356
00:16:34,520 --> 00:16:35,520
guess who that is.

357
00:16:35,520 --> 00:16:36,760
That is the structural job.

358
00:16:36,760 --> 00:16:41,440
Whether that routing is fully automated now or just made ready in the data model is a maturity

359
00:16:41,440 --> 00:16:43,720
decision, not a reason to muddy the first app.

360
00:16:43,720 --> 00:16:46,360
Once a decision happens, the request changes state.

361
00:16:46,360 --> 00:16:48,600
And state is where process design becomes visible.

362
00:16:48,600 --> 00:16:52,840
For Contoso, we do not need 20 statuses that only creates interpretation that we need

363
00:16:52,840 --> 00:16:58,600
a status model that reflects real movement, submitted, pending approval, approved, rejected,

364
00:16:58,600 --> 00:16:59,600
cancelled.

365
00:16:59,600 --> 00:17:02,800
That is enough for the first operating layer because each state tells the employee, the

366
00:17:02,800 --> 00:17:05,720
manager and HR something materially useful.

367
00:17:05,720 --> 00:17:10,360
It means the request exists, pending approval means ownership, sites with a decision maker,

368
00:17:10,360 --> 00:17:12,600
approved and rejected, closed the decision.

369
00:17:12,600 --> 00:17:16,080
Canceled Reflex change after submission without destroying the audit trail.

370
00:17:16,080 --> 00:17:18,240
This is the thing most people miss.

371
00:17:18,240 --> 00:17:21,040
Status is not decoration, it is shared operational language.

372
00:17:21,040 --> 00:17:23,320
Without it, every participant starts asking side questions.

373
00:17:23,320 --> 00:17:24,320
Did you see it?

374
00:17:24,320 --> 00:17:25,320
Is it still waiting?

375
00:17:25,320 --> 00:17:26,320
Was it declined?

376
00:17:26,320 --> 00:17:27,320
Should I follow up?

377
00:17:27,320 --> 00:17:29,320
Good status design removes those questions before they become behavior.

378
00:17:29,320 --> 00:17:31,720
Now look at the data captured at each point.

379
00:17:31,720 --> 00:17:34,840
At request time, we only need the data required for the next decision.

380
00:17:34,840 --> 00:17:35,680
Start date.

381
00:17:35,680 --> 00:17:36,680
And date.

382
00:17:36,680 --> 00:17:37,680
Reason.

383
00:17:37,680 --> 00:17:38,680
If the business wants it.

384
00:17:38,680 --> 00:17:39,680
Employee identity.

385
00:17:39,680 --> 00:17:40,680
Manager relationship.

386
00:17:40,680 --> 00:17:41,680
Country context.

387
00:17:41,680 --> 00:17:42,680
We're policy differs.

388
00:17:42,680 --> 00:17:44,440
That is enough to create a valid request.

389
00:17:44,440 --> 00:17:47,160
We do not need back office handling fields exposed to the employee.

390
00:17:47,160 --> 00:17:49,440
We do not need every exception input on screen one.

391
00:17:49,440 --> 00:17:52,600
We do not need the app to collect data just in case.

392
00:17:52,600 --> 00:17:55,840
Because every extra field is the process admitting it does not trust its own downstream

393
00:17:55,840 --> 00:17:56,840
structure.

394
00:17:56,840 --> 00:17:58,120
So the cleaner pattern is this.

395
00:17:58,120 --> 00:18:02,000
Capture what the next decision requires and let later automation or operations add

396
00:18:02,000 --> 00:18:04,000
what only becomes relevant after that.

397
00:18:04,000 --> 00:18:07,200
The employee should not carry policy interpretation that belongs in the system.

398
00:18:07,200 --> 00:18:10,320
The manager should not carry routing logic that belongs in structure.

399
00:18:10,320 --> 00:18:14,080
HR should not carry reconstruction work that belongs in status history.

400
00:18:14,080 --> 00:18:18,120
Once the process map is clear at that level, the app decision gets easier because now we

401
00:18:18,120 --> 00:18:21,480
are no longer debating interface style in the abstract.

402
00:18:21,480 --> 00:18:25,560
We are deciding what kind of application best supports this exact operating behavior.

403
00:18:25,560 --> 00:18:26,880
The architectural fork.

404
00:18:26,880 --> 00:18:28,600
Canvas or model driven.

405
00:18:28,600 --> 00:18:30,840
So now we reach the first real fork in the road.

406
00:18:30,840 --> 00:18:33,800
And this is where a lot of teams make a decision far too casually.

407
00:18:33,800 --> 00:18:37,800
They ask which app type is easier or which one looks better or which one they personally

408
00:18:37,800 --> 00:18:39,160
prefer building in.

409
00:18:39,160 --> 00:18:42,480
But that is not the real question because this is not a design-taste issue.

410
00:18:42,480 --> 00:18:44,120
It is an operating model decision.

411
00:18:44,120 --> 00:18:48,320
We are choosing how the business will interact with the structure we just defined and each

412
00:18:48,320 --> 00:18:51,320
app type pushes behavior in a different direction.

413
00:18:51,320 --> 00:18:53,080
Canvas is interaction first.

414
00:18:53,080 --> 00:18:54,600
Model driven is structure first.

415
00:18:54,600 --> 00:18:56,440
That is the cleanest way to hold it in your head.

416
00:18:56,440 --> 00:18:59,160
A canvas app gives us tight control over the experience.

417
00:18:59,160 --> 00:19:01,280
We decide what the employee sees first.

418
00:19:01,280 --> 00:19:06,200
It stays hidden, what action feels obvious, how much context appears on a small mobile screen,

419
00:19:06,200 --> 00:19:08,240
and how narrow we keep the path.

420
00:19:08,240 --> 00:19:12,240
From a business perspective, Canvas is useful when the job is focused, repeated, and simple

421
00:19:12,240 --> 00:19:15,480
enough that adoption rises when friction falls.

422
00:19:15,480 --> 00:19:17,920
A model driven app starts somewhere else entirely.

423
00:19:17,920 --> 00:19:21,720
It assumes the strength of the solution comes from the data model, the relationships, the

424
00:19:21,720 --> 00:19:25,400
forms, the views, and the navigation that dataverse can generate around them.

425
00:19:25,400 --> 00:19:29,120
It is less about shaping every pixel and more about giving people a governed workspace

426
00:19:29,120 --> 00:19:33,040
where records, states, and relationships are visible in a consistent way.

427
00:19:33,040 --> 00:19:36,560
From a business perspective, that matters when users are working across many records, many

428
00:19:36,560 --> 00:19:41,640
filters, many statuses, and need operational oversight more than a tailored front door.

429
00:19:41,640 --> 00:19:43,600
So neither is better in any universal sense.

430
00:19:43,600 --> 00:19:45,720
Each one is optimized for a different job.

431
00:19:45,720 --> 00:19:49,680
That point matters because beginners often choose canvas because it feels friendlier and

432
00:19:49,680 --> 00:19:54,000
experience platform teams often lean toward model driven because it feels more governed.

433
00:19:54,000 --> 00:19:56,960
Both instincts can be right, but both can also miss the structural question.

434
00:19:56,960 --> 00:20:00,160
The decision should come from usage pattern, not familiarity.

435
00:20:00,160 --> 00:20:01,280
Ask three things.

436
00:20:01,280 --> 00:20:02,360
Who is using the app?

437
00:20:02,360 --> 00:20:03,760
How often are they using it?

438
00:20:03,760 --> 00:20:06,960
And how deep is the work they need to do once they are inside?

439
00:20:06,960 --> 00:20:09,760
At Contoso, that changes the conversation immediately.

440
00:20:09,760 --> 00:20:13,720
The employee requesting time off does not need a record management workspace.

441
00:20:13,720 --> 00:20:18,200
They need a clear path, one action, minimal fields, fast confirmation, maybe mobile access

442
00:20:18,200 --> 00:20:22,640
while away from a desk that leans toward canvas because the job is narrow and the value

443
00:20:22,640 --> 00:20:25,720
comes from reducing hesitation at the moment of submission.

444
00:20:25,720 --> 00:20:26,720
But now look at HR.

445
00:20:26,720 --> 00:20:29,000
HR does not just need to submit a request.

446
00:20:29,000 --> 00:20:33,680
HR needs to see patterns across requests filter by status review what is pending, understand

447
00:20:33,680 --> 00:20:37,600
who approved what and eventually manage exceptions and operational follow-up.

448
00:20:37,600 --> 00:20:41,960
That work starts leaning toward model driven because the value comes from visibility across

449
00:20:41,960 --> 00:20:44,880
the data, not from a custom front end moment.

450
00:20:44,880 --> 00:20:48,320
And then there is the manager role, which sits somewhere between the two.

451
00:20:48,320 --> 00:20:52,280
A manager might only need a lightweight approval experience at first, which could live

452
00:20:52,280 --> 00:20:55,360
comfortably in a canvas pattern or later in automation.

453
00:20:55,360 --> 00:20:59,360
But if the manager role expands into broader oversight, team absence planning or delegated

454
00:20:59,360 --> 00:21:04,880
approvals across multiple records, the logic starts shifting toward a more structured workspace.

455
00:21:04,880 --> 00:21:08,000
This is why I would not frame the decision as application type alone.

456
00:21:08,000 --> 00:21:10,000
I would frame it as behavioral fit.

457
00:21:10,000 --> 00:21:13,680
Canvas fits best when you want to shape one path very intentionally.

458
00:21:13,680 --> 00:21:18,120
Model driven fits best when you want dataverse relationships and process visibility to do more

459
00:21:18,120 --> 00:21:19,120
of the work.

460
00:21:19,120 --> 00:21:21,920
There is also a hidden architectural consequence here.

461
00:21:21,920 --> 00:21:25,560
Canvas gives you more freedom, but freedom moves responsibility onto the maker.

462
00:21:25,560 --> 00:21:29,400
You own the screen design, the interaction patterns, the consistency, the responsiveness,

463
00:21:29,400 --> 00:21:31,240
and much more of the logic expression.

464
00:21:31,240 --> 00:21:35,040
That can be exactly right for a strong front door, but it also means inconsistency shows

465
00:21:35,040 --> 00:21:37,560
up faster if scope begins to sprawl.

466
00:21:37,560 --> 00:21:42,400
Model driven gives you less expressive freedom, but in return it gives you more governed scale.

467
00:21:42,400 --> 00:21:46,440
Navigation, views, forms and security alignment come more naturally because the application

468
00:21:46,440 --> 00:21:48,120
grows out of the model itself.

469
00:21:48,120 --> 00:21:51,920
That is powerful when the process is larger than one moment of entry, so if you remember

470
00:21:51,920 --> 00:21:53,960
nothing else, remember this.

471
00:21:53,960 --> 00:21:57,720
Canvas is usually the stronger choice when experience design drives adoption.

472
00:21:57,720 --> 00:22:02,040
Model driven is usually the stronger choice when data relationships drive operational work.

473
00:22:02,040 --> 00:22:04,880
Once you see that, the Contoso path starts to clarify.

474
00:22:04,880 --> 00:22:07,560
They are not really choosing one app for one audience.

475
00:22:07,560 --> 00:22:11,960
They are deciding which kind of experience belongs at the employee front door and which

476
00:22:11,960 --> 00:22:15,080
kind of workspace may later belong behind it.

477
00:22:15,080 --> 00:22:17,000
What canvas changes in the business?

478
00:22:17,000 --> 00:22:20,640
So let's stay with that employee front door because this is where canvas starts to matter

479
00:22:20,640 --> 00:22:21,960
in a very practical way.

480
00:22:21,960 --> 00:22:26,360
A canvas app changes the business by reducing the amount of interpretation the employee has

481
00:22:26,360 --> 00:22:27,680
to do before they act.

482
00:22:27,680 --> 00:22:29,520
That sounds small, but it is not.

483
00:22:29,520 --> 00:22:33,680
In most organizations, the hidden cost of internal processes sits in hesitation.

484
00:22:33,680 --> 00:22:35,240
People are not always blocked by policy.

485
00:22:35,240 --> 00:22:36,680
They are blocked by uncertainty.

486
00:22:36,680 --> 00:22:37,680
Where do I go?

487
00:22:37,680 --> 00:22:38,680
What do I fill in?

488
00:22:38,680 --> 00:22:39,680
Who will see this?

489
00:22:39,680 --> 00:22:42,000
And will this actually move if I submitted here?

490
00:22:42,000 --> 00:22:46,000
A good canvas app removes those questions at the point where they normally slow everything

491
00:22:46,000 --> 00:22:47,000
down.

492
00:22:47,000 --> 00:22:49,760
Why canvas fits the employee side of Contoso so well?

493
00:22:49,760 --> 00:22:53,320
The employee does not need to understand the full leave management architecture.

494
00:22:53,320 --> 00:22:55,240
They do not need relational navigation.

495
00:22:55,240 --> 00:22:58,360
They do not need views across all requests in the organization.

496
00:22:58,360 --> 00:23:02,600
They need one clear action on a screen that feels obvious, fast and low effort.

497
00:23:02,600 --> 00:23:04,680
Canvas lets us shape exactly that experience.

498
00:23:04,680 --> 00:23:07,160
We can make the primary action visible immediately.

499
00:23:07,160 --> 00:23:08,680
We can keep the field set narrow.

500
00:23:08,680 --> 00:23:12,560
We can decide what stays hidden because it belongs to the system and not to the user.

501
00:23:12,560 --> 00:23:14,320
And that changes behavior.

502
00:23:14,320 --> 00:23:19,080
Because once requesting vacation becomes easier than writing the email, people stop improvising.

503
00:23:19,080 --> 00:23:21,920
They stop creating side channels just to avoid friction.

504
00:23:21,920 --> 00:23:25,240
They use the path that gives them the least resistance and now the least resistance is

505
00:23:25,240 --> 00:23:26,520
finally the governed one.

506
00:23:26,520 --> 00:23:27,680
That is the business shift.

507
00:23:27,680 --> 00:23:30,600
Adoption no longer depends on training people into discipline.

508
00:23:30,600 --> 00:23:32,560
It depends on giving them a better route.

509
00:23:32,560 --> 00:23:36,040
This is also why canvas tends to work well in mobile first situations.

510
00:23:36,040 --> 00:23:40,560
If someone is not sitting at a desk all day, the process cannot assume patience for clutter.

511
00:23:40,560 --> 00:23:44,120
They cannot assume the employee will navigate a dense workspace just to ask for time

512
00:23:44,120 --> 00:23:45,440
off next month.

513
00:23:45,440 --> 00:23:48,200
The canvas app can be shaped around short interactions.

514
00:23:48,200 --> 00:23:51,800
Open, enter dates, add reasons, submit, check status, done.

515
00:23:51,800 --> 00:23:55,680
From a system perspective, that reduction in interaction cost improves data quality because

516
00:23:55,680 --> 00:23:59,840
people are more likely to complete the request properly when the path feels contained.

517
00:23:59,840 --> 00:24:03,120
But canvas does something else that leaders often underestimate.

518
00:24:03,120 --> 00:24:04,640
It lowers the training burden.

519
00:24:04,640 --> 00:24:06,880
That matters a lot in first releases.

520
00:24:06,880 --> 00:24:11,000
Because every extra explanation you need before someone can complete a basic request is

521
00:24:11,000 --> 00:24:14,840
evidence that the interface is carrying too much complexity.

522
00:24:14,840 --> 00:24:17,840
A canvas app lets us design for familiarity instead.

523
00:24:17,840 --> 00:24:21,280
One obvious button, plain labels, direct feedback after submission.

524
00:24:21,280 --> 00:24:24,120
The employee should not need a walkthrough for something this routine.

525
00:24:24,120 --> 00:24:27,400
If they do, the business has hidden complexity in the wrong place.

526
00:24:27,400 --> 00:24:30,080
Now there is a trade-off and it is worth saying clearly.

527
00:24:30,080 --> 00:24:33,000
Canvas gives us control but control creates responsibility.

528
00:24:33,000 --> 00:24:37,600
The platform will not save us from inconsistent screens, unclear navigation, weak responsiveness

529
00:24:37,600 --> 00:24:41,120
or bloated logic if we start stuffing too much into the app.

530
00:24:41,120 --> 00:24:43,600
That freedom is useful when the scope stays narrow.

531
00:24:43,600 --> 00:24:46,800
It becomes dangerous when the app starts absorbing every future idea.

532
00:24:46,800 --> 00:24:51,360
Then the clean front door turns into a custom-built maze and maintenance gets heavier with every

533
00:24:51,360 --> 00:24:52,360
addition.

534
00:24:52,360 --> 00:24:55,040
So the strength of canvas at Contoso is not that it can do anything.

535
00:24:55,040 --> 00:24:58,320
The strength is that we should ask it to do one thing very well.

536
00:24:58,320 --> 00:25:01,080
Create the best possible request experience for employees.

537
00:25:01,080 --> 00:25:04,240
That means the app should focus on speed, clarity and trust.

538
00:25:04,240 --> 00:25:09,120
It should help the employee enter valid information without carrying policy complexity in their head.

539
00:25:09,120 --> 00:25:11,520
It should confirm that the request exists.

540
00:25:11,520 --> 00:25:15,880
And it should expose status in a way that stops people from falling back into inbox chasing.

541
00:25:15,880 --> 00:25:17,600
That is what canvas changes in the business.

542
00:25:17,600 --> 00:25:19,360
It does not just create a nicer form.

543
00:25:19,360 --> 00:25:22,160
It changes the entry behavior of the organization.

544
00:25:22,160 --> 00:25:23,560
Request start clean.

545
00:25:23,560 --> 00:25:24,560
Status starts visible.

546
00:25:24,560 --> 00:25:27,800
Adoption rises because the process feels simpler than the workaround.

547
00:25:27,800 --> 00:25:32,120
But once you move from front door to operational workspace, a different logic starts to matter.

548
00:25:32,120 --> 00:25:34,200
What model driven changes in the business?

549
00:25:34,200 --> 00:25:38,520
So now let's move to the other side of the architecture because once the request is inside the system,

550
00:25:38,520 --> 00:25:40,360
the business needs starts changing.

551
00:25:40,360 --> 00:25:41,960
The employee needed a front door.

552
00:25:41,960 --> 00:25:44,000
HR and operations need a workspace.

553
00:25:44,000 --> 00:25:46,360
And this is where model driven starts to make much more sense.

554
00:25:46,360 --> 00:25:51,040
A model driven app changes the business by making the data model itself operationally useful.

555
00:25:51,040 --> 00:25:54,880
Instead of shaping every screen by hand, we let dataverse relationships, views, forms

556
00:25:54,880 --> 00:25:57,400
and security do more of the heavy lifting.

557
00:25:57,400 --> 00:26:01,920
That matters when the real job is no longer help one person submit one request but help

558
00:26:01,920 --> 00:26:07,160
a role work across many requests, many states and many decision points without losing visibility.

559
00:26:07,160 --> 00:26:08,880
That is a different class of work.

560
00:26:08,880 --> 00:26:10,200
Think about HR at Contoso.

561
00:26:10,200 --> 00:26:13,400
HR is not interacting with one record at a time in isolation.

562
00:26:13,400 --> 00:26:17,640
HR needs to filter pending requests, review approvals by country, understand where delegation

563
00:26:17,640 --> 00:26:20,640
applies and eventually spot where work is starting to stall.

564
00:26:20,640 --> 00:26:22,520
That is not a single interaction moment.

565
00:26:22,520 --> 00:26:24,000
That is an operational surface.

566
00:26:24,000 --> 00:26:28,720
And model driven is strong precisely because it turns structured data into a governed environment

567
00:26:28,720 --> 00:26:29,960
for that kind of oversight.

568
00:26:29,960 --> 00:26:34,240
The benefit shows up fast, you get consistent navigation across related records, you get views

569
00:26:34,240 --> 00:26:37,480
that let teams work by status, owner or geography.

570
00:26:37,480 --> 00:26:41,040
You get forms generated from the model instead of custom building every path.

571
00:26:41,040 --> 00:26:44,840
And you get security that sits naturally inside the dataverse structure instead of being

572
00:26:44,840 --> 00:26:47,560
expressed mainly through interface design.

573
00:26:47,560 --> 00:26:51,760
From a business perspective, that means scale arrives with less improvisation.

574
00:26:51,760 --> 00:26:55,400
Now that does not mean model driven is automatically better for everyone.

575
00:26:55,400 --> 00:27:00,560
It means it is better when the process extends beyond one form and into ongoing operational

576
00:27:00,560 --> 00:27:01,560
work.

577
00:27:01,560 --> 00:27:06,240
The people inside HR do not just need simplicity, they need control, visibility and repeatability.

578
00:27:06,240 --> 00:27:10,000
They need to know that two people looking at the same request are seeing the same governed

579
00:27:10,000 --> 00:27:14,840
record, not two slightly different interpretations of a custom app experience that consistency

580
00:27:14,840 --> 00:27:16,680
matters more than people realize.

581
00:27:16,680 --> 00:27:20,440
Because once the number of requests grows, trust starts depending on whether the process

582
00:27:20,440 --> 00:27:22,200
behaves the same way for every record.

583
00:27:22,200 --> 00:27:25,920
A manager may tolerate some interface variation in a lightweight employee app.

584
00:27:25,920 --> 00:27:29,800
HR will not tolerate variation in the operational workspace for long.

585
00:27:29,800 --> 00:27:34,440
They need stable views, predictable fields and filters that let them move from what happened

586
00:27:34,440 --> 00:27:39,560
here to show me every request pending approval in Germany with a manager currently absent.

587
00:27:39,560 --> 00:27:42,360
That is exactly where model driven begins to earn its place.

588
00:27:42,360 --> 00:27:46,800
There is also a structural advantage that becomes more important as the process matures.

589
00:27:46,800 --> 00:27:50,560
Model driven apps are naturally closer to governance, not in some abstract compliance

590
00:27:50,560 --> 00:27:55,080
sense, but in the everyday reality of who can see what, who can update which records and

591
00:27:55,080 --> 00:27:59,160
how process behavior stays aligned to dataverse roles and relationships.

592
00:27:59,160 --> 00:28:03,480
That makes auditability feel less like an add-on and more like a byproduct of the architecture,

593
00:28:03,480 --> 00:28:05,480
and that is a big deal for business operations.

594
00:28:05,480 --> 00:28:09,720
Because once leave data becomes part of planning, staffing and accountability, visibility

595
00:28:09,720 --> 00:28:11,280
is no longer a convenience.

596
00:28:11,280 --> 00:28:12,880
It becomes a management requirement.

597
00:28:12,880 --> 00:28:15,440
Leaders want to know if approvals are sitting too long.

598
00:28:15,440 --> 00:28:19,640
HR wants to see whether one country is handling requests differently from another.

599
00:28:19,640 --> 00:28:23,760
Modulation needs to be visible enough that absence does not create a silent bottleneck.

600
00:28:23,760 --> 00:28:28,480
A model driven app supports that kind of operating reality much more naturally than a highly custom

601
00:28:28,480 --> 00:28:30,400
front and trying to do everything itself.

602
00:28:30,400 --> 00:28:31,760
There is a trade-off here too.

603
00:28:31,760 --> 00:28:35,880
Model driven gives you strength through structure, but it gives you less freedom in how the experience

604
00:28:35,880 --> 00:28:36,880
feels.

605
00:28:36,880 --> 00:28:41,080
You are accepting a more standardized interaction pattern in exchange for a more governed

606
00:28:41,080 --> 00:28:42,480
and scalable workspace.

607
00:28:42,480 --> 00:28:46,960
For employees that can feel heavier than necessary, for operations that heaviness is often exactly

608
00:28:46,960 --> 00:28:48,920
what keeps the process coherent.

609
00:28:48,920 --> 00:28:53,000
So if Canvas helps the business by making entry easier, model driven helps the business by

610
00:28:53,000 --> 00:28:54,600
making oversight stronger.

611
00:28:54,600 --> 00:28:58,360
It turns the dataverse model into something people can actually work through at scale, and

612
00:28:58,360 --> 00:29:02,800
it does that without asking the maker to custom build every piece of operational logic into

613
00:29:02,800 --> 00:29:03,800
the interface.

614
00:29:03,800 --> 00:29:06,400
So Contoso does not really have one user group.

615
00:29:06,400 --> 00:29:10,360
It has one process with different depths of work, which means the app answer may not be

616
00:29:10,360 --> 00:29:11,960
singular at all.

617
00:29:11,960 --> 00:29:15,200
The Contoso decision, one problem, two experiences.

618
00:29:15,200 --> 00:29:18,000
So this is the point where Contoso stops asking the wrong question.

619
00:29:18,000 --> 00:29:20,280
The wrong question is which app type should we pick?

620
00:29:20,280 --> 00:29:24,640
The better question is which experience belongs to which kind of work, because once we separate

621
00:29:24,640 --> 00:29:28,480
the employee moment from the operational moment, the architecture stops feeling like

622
00:29:28,480 --> 00:29:32,040
a platform debate and starts feeling like a business design choice.

623
00:29:32,040 --> 00:29:36,800
At Contoso, the employee experience needs three things above all else, simplicity, speed,

624
00:29:36,800 --> 00:29:37,800
and confidence.

625
00:29:37,800 --> 00:29:41,640
The employee should be able to open the app, understand the action immediately, enter only

626
00:29:41,640 --> 00:29:45,560
what the next decision requires and submit without wondering whether they use the right

627
00:29:45,560 --> 00:29:46,560
process.

628
00:29:46,560 --> 00:29:48,120
That is the front door problem.

629
00:29:48,120 --> 00:29:52,080
And Canvas is usually the cleaner answer there because it lets us strip the experience

630
00:29:52,080 --> 00:29:56,800
down to one focused task without dragging the user through the full shape of the underlying

631
00:29:56,800 --> 00:29:57,800
model.

632
00:29:57,800 --> 00:29:59,760
But that is only half of the picture.

633
00:29:59,760 --> 00:30:01,680
Managers in HR are not just entering data.

634
00:30:01,680 --> 00:30:03,040
They are working across requests.

635
00:30:03,040 --> 00:30:07,080
They meet visibility, filtering, context, and the ability to operate on records with some

636
00:30:07,080 --> 00:30:08,080
consistency.

637
00:30:08,080 --> 00:30:12,600
HR especially needs a surface where status, employee relationships, country context, and

638
00:30:12,600 --> 00:30:17,320
approval history can be reviewed without custom building every operational behavior into a separate

639
00:30:17,320 --> 00:30:18,320
screen.

640
00:30:18,320 --> 00:30:20,760
That is where model driven starts to make more sense.

641
00:30:20,760 --> 00:30:24,320
Not because it is more advanced, but because it is better aligned to the depth of work those

642
00:30:24,320 --> 00:30:25,320
roles are doing.

643
00:30:25,320 --> 00:30:29,000
So, the Contoso answer is not one app trying to be everything for everyone.

644
00:30:29,000 --> 00:30:32,280
It is one problem expressed through two different experiences.

645
00:30:32,280 --> 00:30:36,320
That distinction matters because when teams force all roles into one interface, they usually

646
00:30:36,320 --> 00:30:37,520
compromise both ends.

647
00:30:37,520 --> 00:30:41,520
The employee app becomes too heavy because it carries operational complexity.

648
00:30:41,520 --> 00:30:45,280
The HR workspace becomes too shallow because it was simplified for casual users.

649
00:30:45,280 --> 00:30:49,720
The result is a single artifact that satisfies nobody particularly well, and the business

650
00:30:49,720 --> 00:30:54,440
then concludes the process itself is awkward when the real issue was architectural blending.

651
00:30:54,440 --> 00:30:57,520
From a system perspective, this is a separation of concerns problem.

652
00:30:57,520 --> 00:31:00,000
The employee interaction is optimized for low friction.

653
00:31:00,000 --> 00:31:02,760
The operational interaction is optimized for control and visibility.

654
00:31:02,760 --> 00:31:06,040
Those are not the same design goals and they should not be forced into the same shape

655
00:31:06,040 --> 00:31:07,040
too early.

656
00:31:07,040 --> 00:31:10,800
So, for release one, I would recommend a clear front door decision.

657
00:31:10,800 --> 00:31:15,440
Canvas for the employee request experience, that gives Contoso the fastest path to the

658
00:31:15,440 --> 00:31:19,040
first value moment, which is not full leave management maturity.

659
00:31:19,040 --> 00:31:21,000
It is much simpler than that.

660
00:31:21,000 --> 00:31:25,160
An employee can submit a valid request through a governed path and then see that the request

661
00:31:25,160 --> 00:31:30,000
exists, has a status and is now inside a process the organization can trust.

662
00:31:30,000 --> 00:31:31,000
That is the breakthrough.

663
00:31:31,000 --> 00:31:34,800
Once that happens, cycle time starts dropping because the request no longer enters through

664
00:31:34,800 --> 00:31:36,800
scattered messages and private memory.

665
00:31:36,800 --> 00:31:39,240
Now, does that mean model driven disappears from the story?

666
00:31:39,240 --> 00:31:40,240
Not at all.

667
00:31:40,240 --> 00:31:44,400
And model driven is more likely the operational layer that grows with maturity rather than

668
00:31:44,400 --> 00:31:47,400
the first experience we push in front of every employee.

669
00:31:47,400 --> 00:31:52,600
As Contoso expands the process as HR needs stronger oversight, as delegation reporting and broader

670
00:31:52,600 --> 00:31:55,000
exception handling become more active concerns.

671
00:31:55,000 --> 00:31:57,200
The structured workspace becomes more relevant.

672
00:31:57,200 --> 00:32:00,840
And because the data model already lives in dataverse, that path stays open.

673
00:32:00,840 --> 00:32:02,560
That is the quiet strength of this decision.

674
00:32:02,560 --> 00:32:05,040
We are not choosing canvas instead of architecture.

675
00:32:05,040 --> 00:32:10,120
We are choosing canvas as the right first expression of architecture for the employee side.

676
00:32:10,120 --> 00:32:13,960
And that should calm a lot of unnecessary anxiety because some teams here hybrid and immediately

677
00:32:13,960 --> 00:32:15,200
start over building.

678
00:32:15,200 --> 00:32:20,280
They imagine they need two complete apps, full automation, all approval branches and future

679
00:32:20,280 --> 00:32:21,480
reporting in version one.

680
00:32:21,480 --> 00:32:22,480
They do not.

681
00:32:22,480 --> 00:32:25,200
What they need is the first point of value clearly defined.

682
00:32:25,200 --> 00:32:28,360
For Contoso, that point is request submission and status visibility.

683
00:32:28,360 --> 00:32:30,040
Everything else can mature in sequence.

684
00:32:30,040 --> 00:32:33,320
So the real decision is not canvas or model driven in isolation.

685
00:32:33,320 --> 00:32:34,320
It is this.

686
00:32:34,320 --> 00:32:38,120
Use canvas, where adoption depends on a better front door and leave room for model driven

687
00:32:38,120 --> 00:32:41,360
where the business later needs a stronger operational workspace.

688
00:32:41,360 --> 00:32:44,960
That is a very different mindset and it keeps version one honest.

689
00:32:44,960 --> 00:32:47,000
Scope the first release like an architect.

690
00:32:47,000 --> 00:32:50,000
So now we do the part that separates momentum from mess.

691
00:32:50,000 --> 00:32:51,720
We cut scope.

692
00:32:51,720 --> 00:32:56,040
Not because we lack ambition and not because the platform cannot do more, but because version

693
00:32:56,040 --> 00:32:57,600
one has one job.

694
00:32:57,600 --> 00:33:01,440
Prove the process can move faster through a controlled path without creating hidden cost

695
00:33:01,440 --> 00:33:02,920
underneath.

696
00:33:02,920 --> 00:33:07,040
If we forget that, the first release turns into a dumping ground for future ideas and

697
00:33:07,040 --> 00:33:10,280
the architecture loses its center before the business trusts it.

698
00:33:10,280 --> 00:33:14,560
At Contoso, release one should include only what the first value moment depends on.

699
00:33:14,560 --> 00:33:16,560
The employee can create a vacation request.

700
00:33:16,560 --> 00:33:19,240
The request is written to dataverse with the right core fields.

701
00:33:19,240 --> 00:33:20,920
The request has a visible status.

702
00:33:20,920 --> 00:33:23,400
The manager relationship is captured.

703
00:33:23,400 --> 00:33:25,240
And the data model is ready for delegation.

704
00:33:25,240 --> 00:33:29,640
Even if delegation handling is not fully automated yet, that last point matters.

705
00:33:29,640 --> 00:33:32,920
Being ready for delegation is not the same as building the entire delegation engine

706
00:33:32,920 --> 00:33:33,920
now.

707
00:33:33,920 --> 00:33:38,040
In the other relationship, we can make the structure aware that a manager may have a delegate,

708
00:33:38,040 --> 00:33:42,880
but we do not need to build every routing branch, notification path or fallback rule into

709
00:33:42,880 --> 00:33:43,880
release one.

710
00:33:43,880 --> 00:33:46,880
That would be future capability pretending to be current necessity.

711
00:33:46,880 --> 00:33:48,920
The same logic applies to country policy.

712
00:33:48,920 --> 00:33:50,600
Contoso has multiple countries.

713
00:33:50,600 --> 00:33:51,600
Policies differ.

714
00:33:51,600 --> 00:33:52,600
Everyone knows that.

715
00:33:52,600 --> 00:33:56,400
But version one does not need to automate every country rule at the point of submission.

716
00:33:56,400 --> 00:33:59,480
What it does need is structured country context in the data.

717
00:33:59,480 --> 00:34:03,280
So later decisions reporting and automation have something reliable to work with.

718
00:34:03,280 --> 00:34:04,680
What is how architects think?

719
00:34:04,680 --> 00:34:05,960
We do not ignore complexity.

720
00:34:05,960 --> 00:34:07,800
We place it where it belongs in sequence.

721
00:34:07,800 --> 00:34:09,480
So what stays out of release one?

722
00:34:09,480 --> 00:34:11,200
Advanced routing stays out.

723
00:34:11,200 --> 00:34:12,480
Escalation stay out.

724
00:34:12,480 --> 00:34:14,240
Reminder logic stays out.

725
00:34:14,240 --> 00:34:15,840
Complex exception workflows stay out.

726
00:34:15,840 --> 00:34:17,320
Heavy notifications stay out.

727
00:34:17,320 --> 00:34:19,240
Full policy automation stays out.

728
00:34:19,240 --> 00:34:20,240
And why is that?

729
00:34:20,240 --> 00:34:22,760
Because those things do create value, but they create secondary value.

730
00:34:22,760 --> 00:34:25,960
The primary value is clean entry, clean status and visible ownership.

731
00:34:25,960 --> 00:34:29,000
If we win their first, the organization feels the change immediately.

732
00:34:29,000 --> 00:34:33,120
If we chase completeness first, the team spends energy on branches before the main path

733
00:34:33,120 --> 00:34:34,120
has even earned trust.

734
00:34:34,120 --> 00:34:36,280
This is the part many teams resist.

735
00:34:36,280 --> 00:34:38,640
Because scoping small can feel like underbuilding.

736
00:34:38,640 --> 00:34:41,720
It can feel as if we are leaving obvious opportunities on the table.

737
00:34:41,720 --> 00:34:45,920
But that feeling usually comes from confusing architectural readiness with feature volume.

738
00:34:45,920 --> 00:34:48,640
A good first release is not the one with the most moving parts.

739
00:34:48,640 --> 00:34:53,080
It is the one that creates the clearest shift in operating behavior with the fewest assumptions.

740
00:34:53,080 --> 00:34:55,520
That also protects us from licensing surprises.

741
00:34:55,520 --> 00:35:00,680
The more integrations, connectors and orchestration ideas we drag into version one, the more

742
00:35:00,680 --> 00:35:04,980
likely we turn the straightforward app into a more expensive service pattern than the business

743
00:35:04,980 --> 00:35:05,980
expected.

744
00:35:05,980 --> 00:35:09,320
The first release should buy options, not consume them recklessly.

745
00:35:09,320 --> 00:35:11,200
Keep the architecture clean now.

746
00:35:11,200 --> 00:35:15,720
And you preserve room to automate later, without discovering that a small design flourish

747
00:35:15,720 --> 00:35:17,880
quietly change the cost model.

748
00:35:17,880 --> 00:35:19,200
It also protects governance.

749
00:35:19,200 --> 00:35:24,080
A tightly scoped first release is easier to place in the right environment, easier to test,

750
00:35:24,080 --> 00:35:26,040
easier to secure and easier to explain.

751
00:35:26,040 --> 00:35:28,520
The people inside the system know what it does.

752
00:35:28,520 --> 00:35:29,840
Support knows what to expect.

753
00:35:29,840 --> 00:35:34,220
You can see the point of the release, without needing a maturity map and a three layer process

754
00:35:34,220 --> 00:35:36,780
diagram just to understand what shipped.

755
00:35:36,780 --> 00:35:40,880
So if I were scoping Contoso's first release as an architect, I would state it plainly.

756
00:35:40,880 --> 00:35:46,160
One employee entry path, one request record, one shared status model, one visible owner

757
00:35:46,160 --> 00:35:51,760
for the next decision, delegation readiness in the data, country context, captured structurally.

758
00:35:51,760 --> 00:35:55,960
Everything else waits until the first behavior change is real because maturity does not come

759
00:35:55,960 --> 00:35:57,800
from stuffing the future into version one.

760
00:35:57,800 --> 00:35:59,180
It comes from sequence.

761
00:35:59,180 --> 00:36:04,680
And once scope is under control, we can finally design the employee experience from first principles.

762
00:36:04,680 --> 00:36:07,320
Design the employee experience from first principles.

763
00:36:07,320 --> 00:36:11,320
So now we design the part people actually feel, not the table, not the relationship map,

764
00:36:11,320 --> 00:36:15,000
not the future approval engine, the employee experience.

765
00:36:15,000 --> 00:36:17,520
And the cleanest place to start is not with controls.

766
00:36:17,520 --> 00:36:20,000
It is with the human moment that triggers the process.

767
00:36:20,000 --> 00:36:22,160
At Contoso, that moment is very ordinary.

768
00:36:22,160 --> 00:36:26,440
Someone needs time off, maybe for family, travel, recovery or just a break and they want

769
00:36:26,440 --> 00:36:27,440
two things immediately.

770
00:36:27,440 --> 00:36:29,240
Clarity and confidence.

771
00:36:29,240 --> 00:36:30,560
Clarity about what to do.

772
00:36:30,560 --> 00:36:34,280
Confidence that the request will not vanish into informal manager memory.

773
00:36:34,280 --> 00:36:38,280
If we keep that moment in view, the app becomes much easier to design because now we are not

774
00:36:38,280 --> 00:36:39,760
asking what can the platform show?

775
00:36:39,760 --> 00:36:43,800
We are asking, what does this person need to do with the least friction and the lowest

776
00:36:43,800 --> 00:36:44,800
chance of error?

777
00:36:44,800 --> 00:36:46,320
That question strips away a lot of noise.

778
00:36:46,320 --> 00:36:49,600
It tells us the screen should not feel like HR software.

779
00:36:49,600 --> 00:36:53,120
It should feel like a simple act of intent entering a reliable system.

780
00:36:53,120 --> 00:36:56,160
That means the field set stays minimal, start date, end date.

781
00:36:56,160 --> 00:37:00,160
And the reason if Contoso wants a short explanation and country context only where it is truly

782
00:37:00,160 --> 00:37:01,640
needed or already known.

783
00:37:01,640 --> 00:37:03,440
That is enough for the next decision.

784
00:37:03,440 --> 00:37:05,640
Everything else needs to justify its existence.

785
00:37:05,640 --> 00:37:10,520
If a field does not help validate the request now or move it to the next accountable person,

786
00:37:10,520 --> 00:37:12,920
it probably does not belong in front of the employee.

787
00:37:12,920 --> 00:37:17,400
This is where many apps start carrying back office uncertainty on the user's back.

788
00:37:17,400 --> 00:37:21,960
Teams add extra inputs because someone downstream might want them later, but every extra field

789
00:37:21,960 --> 00:37:24,760
is usually structural compensation for a week process.

790
00:37:24,760 --> 00:37:28,640
If the system is well-shaped, the employee should not have to fill gaps that the architecture

791
00:37:28,640 --> 00:37:29,640
should already know.

792
00:37:29,640 --> 00:37:32,400
The manager relationship should come from the data model.

793
00:37:32,400 --> 00:37:34,560
Basic employee identity should already be known.

794
00:37:34,560 --> 00:37:36,320
Country should be inferred where possible.

795
00:37:36,320 --> 00:37:40,200
Status should be created by the process, not typed by the request that is how you reduce

796
00:37:40,200 --> 00:37:41,200
cognitive load.

797
00:37:41,200 --> 00:37:44,320
And cognitive load matters more than people think because internal business apps fail

798
00:37:44,320 --> 00:37:45,320
quietly.

799
00:37:45,320 --> 00:37:46,320
The employee may not complain.

800
00:37:46,320 --> 00:37:50,920
They just delay using it, ask a manager in chat instead or submit incomplete information

801
00:37:50,920 --> 00:37:54,520
because the interface asks them to think harder than the old workaround.

802
00:37:54,520 --> 00:37:57,960
The good design is not about visual polish, it is about lowering the cost of doing the

803
00:37:57,960 --> 00:37:58,960
right thing.

804
00:37:58,960 --> 00:38:02,920
There is another part that belongs in the first principles view and that is immediate feedback.

805
00:38:02,920 --> 00:38:06,560
The moment a request is submitted, the employee should know three things.

806
00:38:06,560 --> 00:38:11,520
The request was captured, its current status, and who owns the next decision that tiny loop

807
00:38:11,520 --> 00:38:15,840
changes trust fast because once people can see that the process has accepted their intent

808
00:38:15,840 --> 00:38:20,000
and attached visible ownership to it, they stop treating the request like a social favor

809
00:38:20,000 --> 00:38:22,920
and start treating it like a real operating flow.

810
00:38:22,920 --> 00:38:27,120
This is where the app begins to shift culture without announcing that it is doing so.

811
00:38:27,120 --> 00:38:29,520
Now what should stay out of the employee experience?

812
00:38:29,520 --> 00:38:31,320
Anything that belongs to back office handling?

813
00:38:31,320 --> 00:38:35,440
Approval routing details stays out, operational comments stay out, exception management stays

814
00:38:35,440 --> 00:38:36,440
out.

815
00:38:36,440 --> 00:38:37,720
Administrative override logic stays out.

816
00:38:37,720 --> 00:38:40,920
Not because those things are unimportant, but because they belong to other roles and

817
00:38:40,920 --> 00:38:42,400
later moments in the process.

818
00:38:42,400 --> 00:38:47,640
If we expose them too early, the employee interface starts leaking internal complexity.

819
00:38:47,640 --> 00:38:51,440
Then the front door stops being a front door and starts becoming a badly compressed view

820
00:38:51,440 --> 00:38:55,520
of the entire system and that is exactly what we are trying to avoid.

821
00:38:55,520 --> 00:38:57,720
So the design principle is simple.

822
00:38:57,720 --> 00:39:01,360
Make the next action obvious, keep the mental load low and let the structure carry what

823
00:39:01,360 --> 00:39:02,880
the user should not have to carry.

824
00:39:02,880 --> 00:39:07,640
In practice that means short paths, plain language, few choices and visible confirmation.

825
00:39:07,640 --> 00:39:10,720
The app should feel almost boring and boring is good here.

826
00:39:10,720 --> 00:39:14,640
Boring means predictable, predictable means trusted, trusted means used.

827
00:39:14,640 --> 00:39:18,760
And once that happens, the request path stops depending on memory, email threads and good

828
00:39:18,760 --> 00:39:23,120
intentions because the system finally gives the employee a front door that feels easier

829
00:39:23,120 --> 00:39:25,000
than the workaround.

830
00:39:25,000 --> 00:39:27,400
Walk through the first screen in plain language.

831
00:39:27,400 --> 00:39:31,080
So because this is audio, let me describe the first screen the way a user would actually

832
00:39:31,080 --> 00:39:33,960
experience it, not the way makers usually talk about it.

833
00:39:33,960 --> 00:39:39,000
An employee opens the app and the first thing they see is one obvious action, request vacation,

834
00:39:39,000 --> 00:39:43,200
not five tiles, not a busy dashboard pretending every option matters equally.

835
00:39:43,200 --> 00:39:46,800
Just a clean front door with a clear primary action because the app should answer the user's

836
00:39:46,800 --> 00:39:48,560
first silent question immediately.

837
00:39:48,560 --> 00:39:50,440
Am I in the right place to do this?

838
00:39:50,440 --> 00:39:51,880
That matters more than people think.

839
00:39:51,880 --> 00:39:56,720
If the first screen asks the employee to interpret where to begin, the process has already

840
00:39:56,720 --> 00:39:58,560
reintroduced friction.

841
00:39:58,560 --> 00:40:02,640
We are trying to reduce decision cost, not relocated, so the page should feel calm.

842
00:40:02,640 --> 00:40:04,760
The title tells them what the app is for.

843
00:40:04,760 --> 00:40:07,600
The main button or form area tells them what to do next.

844
00:40:07,600 --> 00:40:12,840
And around that, only enough supporting context appears to build confidence, not clutter.

845
00:40:12,840 --> 00:40:16,040
Once they choose to request vacation, the interactions stay short.

846
00:40:16,040 --> 00:40:20,840
They enter a start date, they enter an end date, they add a reason if contoso wants one.

847
00:40:20,840 --> 00:40:24,760
And they can see without hunting, which manage a relationship the system is using for the

848
00:40:24,760 --> 00:40:25,760
request.

849
00:40:25,760 --> 00:40:29,160
That last point is useful because it removes a common hesitation.

850
00:40:29,160 --> 00:40:33,080
People often want quiet confirmation that the request is going to the right person.

851
00:40:33,080 --> 00:40:35,920
They should not have to remember who sits where in the approval chain.

852
00:40:35,920 --> 00:40:38,480
The app should already know enough to make that visible.

853
00:40:38,480 --> 00:40:40,040
Now notice what is not happening.

854
00:40:40,040 --> 00:40:42,360
The employee is not picking workflow branches.

855
00:40:42,360 --> 00:40:44,080
They are not deciding policy logic.

856
00:40:44,080 --> 00:40:46,720
They are not filling in operational metadata for HR.

857
00:40:46,720 --> 00:40:49,280
They are not choosing from fields that only matter later.

858
00:40:49,280 --> 00:40:53,000
The screen is intentionally narrow because every unnecessary choice introduces the chance

859
00:40:53,000 --> 00:40:54,920
of pause, error or abandonment.

860
00:40:54,920 --> 00:40:58,520
Then for a first app, that is the risk we are actively designing against.

861
00:40:58,520 --> 00:41:02,360
Then comes the submit moment and this is where the experience has to feel concrete.

862
00:41:02,360 --> 00:41:06,680
When the employee taps submit, the system writes the request to dataverse immediately.

863
00:41:06,680 --> 00:41:09,320
No attachment chain starts, no one needs to forward an email.

864
00:41:09,320 --> 00:41:13,280
No hidden mailbox rule catches the message and dumps it somewhere opaque.

865
00:41:13,280 --> 00:41:16,080
A structured record is created in the system of record.

866
00:41:16,080 --> 00:41:17,760
The moment intent becomes formal.

867
00:41:17,760 --> 00:41:20,680
That is a very different operating event from sending an email.

868
00:41:20,680 --> 00:41:23,120
With email, the employee hopes the process begins.

869
00:41:23,120 --> 00:41:24,880
With the app, the process begins.

870
00:41:24,880 --> 00:41:28,960
And because the process begins at record creation, the next screen or confirmation state

871
00:41:28,960 --> 00:41:31,560
should show that back to the user in plain language.

872
00:41:31,560 --> 00:41:32,560
Something simple.

873
00:41:32,560 --> 00:41:33,880
Request submitted.

874
00:41:33,880 --> 00:41:34,880
Status.

875
00:41:34,880 --> 00:41:36,320
Submitted or pending approval.

876
00:41:36,320 --> 00:41:38,920
Depending on how contoso labels the first visible state.

877
00:41:38,920 --> 00:41:39,920
Next decision owner.

878
00:41:39,920 --> 00:41:40,920
Manager name.

879
00:41:40,920 --> 00:41:42,120
If that is appropriate to expose.

880
00:41:42,120 --> 00:41:43,920
The point is not decorative feedback.

881
00:41:43,920 --> 00:41:47,120
The point is to show that the request now exists inside a governed flow.

882
00:41:47,120 --> 00:41:49,200
That feedback loop changes trust fast.

883
00:41:49,200 --> 00:41:52,200
The employee no longer wonders whether the request got lost.

884
00:41:52,200 --> 00:41:54,360
They no longer need to screenshot a team's message.

885
00:41:54,360 --> 00:41:58,520
They no longer need a second message that says, "Just checking if you saw my leave request."

886
00:41:58,520 --> 00:42:03,640
The app has reduced ambiguity at the exact point where ambiguity used to create extra work.

887
00:42:03,640 --> 00:42:07,040
And when they return to the home view, they should be able to see recent requests with

888
00:42:07,040 --> 00:42:08,440
their current statuses.

889
00:42:08,440 --> 00:42:10,600
Not a giant case management console.

890
00:42:10,600 --> 00:42:13,160
It's enough history to answer the natural follow-up question.

891
00:42:13,160 --> 00:42:14,520
What happened to my last request?

892
00:42:14,520 --> 00:42:16,080
And where does this one stand now?

893
00:42:16,080 --> 00:42:18,800
That simple visibility starts retraining behavior.

894
00:42:18,800 --> 00:42:22,280
Because the employee learns that status lives in the system, not in social memory.

895
00:42:22,280 --> 00:42:26,560
This is why I keep saying simple interface design is really process design made visible.

896
00:42:26,560 --> 00:42:30,920
What looks like a basic first screen is actually carrying several architectural decisions at once.

897
00:42:30,920 --> 00:42:32,200
One governed entry point.

898
00:42:32,200 --> 00:42:33,880
One immediate right to that averse.

899
00:42:33,880 --> 00:42:35,200
One visible status loop.

900
00:42:35,200 --> 00:42:37,440
One reduction in inbox dependency.

901
00:42:37,440 --> 00:42:41,160
From a business perspective, that is already a meaningful shift because the organization has

902
00:42:41,160 --> 00:42:45,880
moved from informal request handling to structured request intake without asking the employee

903
00:42:45,880 --> 00:42:48,400
to absorb the full complexity underneath.

904
00:42:48,400 --> 00:42:50,160
That is the mark of a good first screen.

905
00:42:50,160 --> 00:42:54,800
It feels light to the user because the architecture is carrying the weight for them.

906
00:42:54,800 --> 00:42:57,200
What dataverse is doing underneath the app.

907
00:42:57,200 --> 00:43:01,800
Now let's step below the screen because once the employee taps submit, the visible experience

908
00:43:01,800 --> 00:43:05,280
ends for them, but the structural work is only just beginning.

909
00:43:05,280 --> 00:43:06,880
And this is where dataverse matters.

910
00:43:06,880 --> 00:43:11,000
Underneath that simple request form, dataverse is creating a standardized record, not just

911
00:43:11,000 --> 00:43:13,800
storing a few loose values in a convenient place.

912
00:43:13,800 --> 00:43:17,240
That distinction matters because storage alone does not create order.

913
00:43:17,240 --> 00:43:20,800
Structure creates order, the app collects the request, but dataverse defines what that

914
00:43:20,800 --> 00:43:22,840
request actually is inside the business.

915
00:43:22,840 --> 00:43:27,240
So when the employee submits vacation dates, reason, and manager context, dataverse writes

916
00:43:27,240 --> 00:43:30,840
that into a request table with controlled fields and controlled states.

917
00:43:30,840 --> 00:43:32,600
Start date means the same thing every time.

918
00:43:32,600 --> 00:43:34,360
And date means the same thing every time.

919
00:43:34,360 --> 00:43:35,560
Status is not free text.

920
00:43:35,560 --> 00:43:37,680
It is a known value inside a shared model.

921
00:43:37,680 --> 00:43:41,360
That is what protects the process from slowly dissolving back into interpretation.

922
00:43:41,360 --> 00:43:42,600
And why is that so important?

923
00:43:42,600 --> 00:43:46,680
Because if the app alone carries the logic, the solution becomes fragile fast.

924
00:43:46,680 --> 00:43:51,000
An ice-screen can guide behavior, but the moment someone builds a second app, adds reporting

925
00:43:51,000 --> 00:43:55,400
introduces automation or opens the data to HR operations.

926
00:43:55,400 --> 00:44:00,160
In consistency, start spreading unless the data layer is already enforcing the same structure

927
00:44:00,160 --> 00:44:01,160
underneath.

928
00:44:01,160 --> 00:44:02,600
So the app is not the source of truth.

929
00:44:02,600 --> 00:44:04,960
The app is the front door into the source of truth.

930
00:44:04,960 --> 00:44:06,880
That is a cleaner division of responsibility.

931
00:44:06,880 --> 00:44:08,960
The Canvas app handles interaction.

932
00:44:08,960 --> 00:44:10,800
Dataverse handles structure.

933
00:44:10,800 --> 00:44:14,360
The app helps the employee do the right thing with the least friction.

934
00:44:14,360 --> 00:44:17,240
Dataverse makes sure the thing they entered becomes a reliable business record.

935
00:44:17,240 --> 00:44:18,960
The rest of the organization can trust.

936
00:44:18,960 --> 00:44:22,920
And once you hold that split clearly, the architecture stops feeling mysterious.

937
00:44:22,920 --> 00:44:25,840
Now inside Contoso, this request record does not sit alone.

938
00:44:25,840 --> 00:44:27,760
It connects to other records that give it meaning.

939
00:44:27,760 --> 00:44:30,080
The vacation request links back to the employee.

940
00:44:30,080 --> 00:44:31,760
It links to the manager relationship.

941
00:44:31,760 --> 00:44:35,000
It can link to country context where policy differs.

942
00:44:35,000 --> 00:44:38,520
And it can be shaped so delegation becomes possible later without rebuilding the model

943
00:44:38,520 --> 00:44:39,520
from scratch.

944
00:44:39,520 --> 00:44:43,400
That is where dataverse starts earning its place because relationships are not just

945
00:44:43,400 --> 00:44:44,760
nice technical features.

946
00:44:44,760 --> 00:44:48,640
They are how the business stops asking the same questions over and over again.

947
00:44:48,640 --> 00:44:49,640
Who requested this?

948
00:44:49,640 --> 00:44:50,640
Who is supposed to approve it?

949
00:44:50,640 --> 00:44:51,880
Which country rules may apply?

950
00:44:51,880 --> 00:44:53,160
What state is it in right now?

951
00:44:53,160 --> 00:44:57,440
A weak data layer forces people to answer those questions repeatedly through memory and

952
00:44:57,440 --> 00:44:58,440
messages.

953
00:44:58,440 --> 00:45:02,280
Strong data layer stores the answers in a form the whole process can use.

954
00:45:02,280 --> 00:45:03,920
This also protects future reporting.

955
00:45:03,920 --> 00:45:07,920
If every request enters with standardized fields and status values, leadership can later

956
00:45:07,920 --> 00:45:11,880
look across the process without cleaning up a hundred local interpretations first.

957
00:45:11,880 --> 00:45:13,200
HR can group by country.

958
00:45:13,200 --> 00:45:15,680
Teams can review pending approvals.

959
00:45:15,680 --> 00:45:18,440
Operations can start seeing whether delays are random or structural.

960
00:45:18,440 --> 00:45:21,880
None of that works well if the first app writes messy records into the back end.

961
00:45:21,880 --> 00:45:25,840
So even a small first build needs discipline in the model because later visibility depends

962
00:45:25,840 --> 00:45:27,160
on decisions made now.

963
00:45:27,160 --> 00:45:29,400
There is another benefit people often miss.

964
00:45:29,400 --> 00:45:33,560
Dataverse lets the model carry readiness for future automation without forcing automation

965
00:45:33,560 --> 00:45:34,720
into release one.

966
00:45:34,720 --> 00:45:37,040
That is exactly the position Contoso needs.

967
00:45:37,040 --> 00:45:40,240
We are not yet building the full approval engine in this episode.

968
00:45:40,240 --> 00:45:44,240
But if the request record already contains the right relationships, the right status values

969
00:45:44,240 --> 00:45:48,520
and the right ownership signals, then power automate can later move that record through

970
00:45:48,520 --> 00:45:51,360
the business without us redesigning the foundations.

971
00:45:51,360 --> 00:45:53,880
That is what good architecture feels like, not overbuilt.

972
00:45:53,880 --> 00:45:54,880
Just ready.

973
00:45:54,880 --> 00:45:58,720
So when I say the app writes to dataverse immediately, I am really saying something bigger.

974
00:45:58,720 --> 00:46:02,120
The request stops being a message and becomes a governed object in the business.

975
00:46:02,120 --> 00:46:03,280
That object can be queried.

976
00:46:03,280 --> 00:46:04,280
It can be secured.

977
00:46:04,280 --> 00:46:05,280
It can be reported on.

978
00:46:05,280 --> 00:46:06,640
It can be rooted later.

979
00:46:06,640 --> 00:46:09,880
And it can stay visible long after the original submission moment is gone.

980
00:46:09,880 --> 00:46:11,240
That is the structural handoff.

981
00:46:11,240 --> 00:46:12,640
The employee sees a simple form.

982
00:46:12,640 --> 00:46:17,240
The organization receives a standardized record with relationships, status and future process

983
00:46:17,240 --> 00:46:18,920
value already intact.

984
00:46:18,920 --> 00:46:22,880
Once you understand that split, the build feels less like magic and more like architecture

985
00:46:22,880 --> 00:46:24,800
because the screen is only one layer.

986
00:46:24,800 --> 00:46:29,800
The real strength sits underneath where dataverse keeps the process coherent even as the solution

987
00:46:29,800 --> 00:46:30,800
grows.

988
00:46:30,800 --> 00:46:33,640
Why this small build has outsized business impact.

989
00:46:33,640 --> 00:46:37,320
So now we can answer the question that usually sits in the room once a first app is described

990
00:46:37,320 --> 00:46:38,320
this simply.

991
00:46:38,320 --> 00:46:40,520
Can something this small really matter that much?

992
00:46:40,520 --> 00:46:44,280
Yes, because business drag often does not come from missing giant systems.

993
00:46:44,280 --> 00:46:46,120
It comes from weak entry points.

994
00:46:46,120 --> 00:46:49,240
And when you repair the entry point, you change everything that used to pile up behind

995
00:46:49,240 --> 00:46:50,240
it.

996
00:46:50,240 --> 00:46:51,240
That is exactly what happens at Contoso.

997
00:46:51,240 --> 00:46:52,960
Cycle time drops first.

998
00:46:52,960 --> 00:46:56,800
Not because the approval logic suddenly became brilliant and not because low code performed

999
00:46:56,800 --> 00:47:01,280
some miracle, but because the request no longer begins life as an unstructured message.

1000
00:47:01,280 --> 00:47:04,040
That one change removes a surprising amount of delay.

1001
00:47:04,040 --> 00:47:05,320
Nobody has to decode an email.

1002
00:47:05,320 --> 00:47:08,520
Nobody has to ask for missing dates that should have been captured up front.

1003
00:47:08,520 --> 00:47:12,360
Nobody has to forward the request manually just to get it into the right line of sight.

1004
00:47:12,360 --> 00:47:16,040
A structured request starts cleaner and clean starts move faster.

1005
00:47:16,040 --> 00:47:17,560
Managers feel this quickly.

1006
00:47:17,560 --> 00:47:21,080
Before the app, a manager had to function like a personal routing layer.

1007
00:47:21,080 --> 00:47:24,880
Most arrived in different channels at different times with different levels of detail.

1008
00:47:24,880 --> 00:47:28,480
Some lived in outlook, some sat in teams, some existed only in a conversation that everyone

1009
00:47:28,480 --> 00:47:30,440
assumed would be remembered later.

1010
00:47:30,440 --> 00:47:33,640
That creates overhead even before a decision gets made.

1011
00:47:33,640 --> 00:47:37,680
With the app, the manager no longer spends energy reconstructing what the employee meant.

1012
00:47:37,680 --> 00:47:41,400
The request already exists in a known state with enough context to act on it.

1013
00:47:41,400 --> 00:47:43,160
HR feels a different kind of gain.

1014
00:47:43,160 --> 00:47:46,640
HR does less follow up because every request now enters the same path.

1015
00:47:46,640 --> 00:47:48,240
That does not eliminate HR work.

1016
00:47:48,240 --> 00:47:49,800
It removes reconciliation work.

1017
00:47:49,800 --> 00:47:51,040
And those are not the same thing.

1018
00:47:51,040 --> 00:47:52,720
HR work adds value.

1019
00:47:52,720 --> 00:47:55,160
Reconciliation work just patches inconsistency.

1020
00:47:55,160 --> 00:47:59,160
When every vacation request enters through one governed front door, HR stops burning time

1021
00:47:59,160 --> 00:48:03,440
on preventable ambiguity and starts working with records that carry their own structure.

1022
00:48:03,440 --> 00:48:05,120
Employees feel something even more important.

1023
00:48:05,120 --> 00:48:06,760
They begin to trust the process.

1024
00:48:06,760 --> 00:48:11,160
That trust matters because in weak internal processes, people often create their own safety

1025
00:48:11,160 --> 00:48:12,160
nets.

1026
00:48:12,160 --> 00:48:14,880
They send a request, then they message the manager, then they save a copy.

1027
00:48:14,880 --> 00:48:17,760
Then they ask HR a few days later if anything was recorded.

1028
00:48:17,760 --> 00:48:20,440
That behavior looks personal, but it is a system outcome.

1029
00:48:20,440 --> 00:48:24,040
People build backup behavior when the formal path does not feel reliable.

1030
00:48:24,040 --> 00:48:27,760
Once the app gives them visible status and visible ownership, a lot of that compensating

1031
00:48:27,760 --> 00:48:29,200
behavior starts to disappear.

1032
00:48:29,200 --> 00:48:31,360
And that is why one form can change throughput.

1033
00:48:31,360 --> 00:48:32,680
It is not just collecting data.

1034
00:48:32,680 --> 00:48:36,640
It is removing ambiguity at the point where ambiguity used to multiply.

1035
00:48:36,640 --> 00:48:37,800
A request is now a record.

1036
00:48:37,800 --> 00:48:39,320
A record has status.

1037
00:48:39,320 --> 00:48:40,480
Status has meaning.

1038
00:48:40,480 --> 00:48:41,680
Meaning reduces chasing.

1039
00:48:41,680 --> 00:48:44,000
Chasing was where a lot of the wasted time lived.

1040
00:48:44,000 --> 00:48:46,920
This is also where structural resilience starts becoming visible.

1041
00:48:46,920 --> 00:48:51,120
Before the app, the process depended on memory, responsiveness and goodwill across scattered

1042
00:48:51,120 --> 00:48:52,120
tools.

1043
00:48:52,120 --> 00:48:53,120
That is fragile.

1044
00:48:53,120 --> 00:48:55,320
It creates hidden single points of failure everywhere.

1045
00:48:55,320 --> 00:48:57,120
One busy manager delays the process.

1046
00:48:57,120 --> 00:48:59,000
One missed email breaks continuity.

1047
00:48:59,000 --> 00:49:02,920
One absent HR colleague turns the whole thing into detective work.

1048
00:49:02,920 --> 00:49:06,720
After the app, the process does not become perfect, but it becomes more resilient because

1049
00:49:06,720 --> 00:49:10,960
the request exists independently of any one person's inbox habits.

1050
00:49:10,960 --> 00:49:13,080
That distinction is big.

1051
00:49:13,080 --> 00:49:14,920
Convenience helps individuals.

1052
00:49:14,920 --> 00:49:16,520
Visual resilience helps the business.

1053
00:49:16,520 --> 00:49:18,560
And this first build does the second one.

1054
00:49:18,560 --> 00:49:22,160
It creates a more reliable operating path for a common internal request.

1055
00:49:22,160 --> 00:49:26,180
And because vacation requests happen repeatedly, every small reduction in friction compounds

1056
00:49:26,180 --> 00:49:27,180
over time.

1057
00:49:27,180 --> 00:49:32,560
What looks like a modest app is actually changing, request quality, visibility, accountability

1058
00:49:32,560 --> 00:49:33,920
and trust all at once.

1059
00:49:33,920 --> 00:49:37,960
So when someone asks whether this is too small to matter, I would turn the question around.

1060
00:49:37,960 --> 00:49:42,360
If a process happens every week across countries, across managers, across HR, and it still

1061
00:49:42,360 --> 00:49:44,840
begins in scattered messages.

1062
00:49:44,840 --> 00:49:48,780
How expensive do you think that fragmentation already is?

1063
00:49:48,780 --> 00:49:50,320
The value did not come from low code.

1064
00:49:50,320 --> 00:49:51,680
It came from design.

1065
00:49:51,680 --> 00:49:54,720
And this is usually the moment where the platform gets too much credit.

1066
00:49:54,720 --> 00:49:56,320
People see the first app working.

1067
00:49:56,320 --> 00:49:57,640
They see the request captured.

1068
00:49:57,640 --> 00:49:59,280
They see status becoming visible.

1069
00:49:59,280 --> 00:50:02,160
And they conclude that low code itself created the value.

1070
00:50:02,160 --> 00:50:06,360
But that is not quite right because tools do not create operating clarity on their own.

1071
00:50:06,360 --> 00:50:09,480
They accelerate whatever design logic we bring into them.

1072
00:50:09,480 --> 00:50:12,680
If the thinking is clean, low code helps us express it faster.

1073
00:50:12,680 --> 00:50:16,480
If the thinking is weak, low code helps us spread that weakness faster too.

1074
00:50:16,480 --> 00:50:19,760
That distinction matters, especially for first time teams because power apps can make it

1075
00:50:19,760 --> 00:50:21,640
feel as if speed equals correctness.

1076
00:50:21,640 --> 00:50:24,280
You drag controls onto a screen, connect the table.

1077
00:50:24,280 --> 00:50:27,000
And in a very short time, you have something that looks like software.

1078
00:50:27,000 --> 00:50:28,080
That is powerful.

1079
00:50:28,080 --> 00:50:30,160
But appearance is not architecture.

1080
00:50:30,160 --> 00:50:32,960
A working screen is not proof of a good operating model.

1081
00:50:32,960 --> 00:50:37,000
It is only proof that the platform can express what we asked it to express.

1082
00:50:37,000 --> 00:50:41,180
So if Contoso gets cycle time reduction from this first app, that value did not come from

1083
00:50:41,180 --> 00:50:43,620
the fact that the app was built with low code.

1084
00:50:43,620 --> 00:50:45,500
It came from a set of design decisions.

1085
00:50:45,500 --> 00:50:50,020
One clear event boundary, one governed record, one shared status model, one cleaner entry

1086
00:50:50,020 --> 00:50:53,420
path, one separation between user experience and data structure.

1087
00:50:53,420 --> 00:50:55,420
That is where the business outcome came from.

1088
00:50:55,420 --> 00:50:57,220
The platform helped us move faster, yes.

1089
00:50:57,220 --> 00:50:58,580
It reduced the build friction.

1090
00:50:58,580 --> 00:51:01,100
It shortened the time between idea and usable interface.

1091
00:51:01,100 --> 00:51:05,220
But if we had taken the old email mess and simply wrapped it in a nice looking screen,

1092
00:51:05,220 --> 00:51:06,700
the result would still be messy.

1093
00:51:06,700 --> 00:51:08,580
It would just be messy in a more modern wrapper.

1094
00:51:08,580 --> 00:51:09,900
That happens all the time.

1095
00:51:09,900 --> 00:51:13,740
Sometimes digitize a bad process and then wonder why the business still feels slow because

1096
00:51:13,740 --> 00:51:15,460
the process did not change.

1097
00:51:15,460 --> 00:51:16,540
Only the container changed.

1098
00:51:16,540 --> 00:51:19,860
This is the thing most people miss when they first get excited about power platform.

1099
00:51:19,860 --> 00:51:22,700
They think low code removes the need for design discipline.

1100
00:51:22,700 --> 00:51:26,500
Actually, it increases the need for it because the speed of building means poor assumptions

1101
00:51:26,500 --> 00:51:29,460
can move into production before anyone has really challenged them.

1102
00:51:29,460 --> 00:51:32,020
The system is doing exactly what we told it to do.

1103
00:51:32,020 --> 00:51:34,420
It is just not doing what the business actually needs.

1104
00:51:34,420 --> 00:51:38,380
So when I say the value came from design, I mean design in the operational sense, what

1105
00:51:38,380 --> 00:51:39,700
event starts the process?

1106
00:51:39,700 --> 00:51:41,180
What data belongs at that moment?

1107
00:51:41,180 --> 00:51:42,500
What decision comes next?

1108
00:51:42,500 --> 00:51:44,700
What status language reduces ambiguity?

1109
00:51:44,700 --> 00:51:45,980
What belongs in the interface?

1110
00:51:45,980 --> 00:51:47,300
And what belongs in the model?

1111
00:51:47,300 --> 00:51:48,620
Those are design questions.

1112
00:51:48,620 --> 00:51:51,980
And once you answer them well, the platform becomes a force multiplier.

1113
00:51:51,980 --> 00:51:55,020
That is where low code becomes genuinely useful for leaders.

1114
00:51:55,020 --> 00:51:59,700
Not because it replaces architecture, but because it shortens the distance between architectural

1115
00:51:59,700 --> 00:52:01,580
clarity and business execution.

1116
00:52:01,580 --> 00:52:05,820
If we know what kind of process behavior we want, power apps and data verse, let us implement

1117
00:52:05,820 --> 00:52:09,460
that intent much faster than a traditional development path would for something of this

1118
00:52:09,460 --> 00:52:10,460
size.

1119
00:52:10,460 --> 00:52:12,180
But speed only helps when direction is right.

1120
00:52:12,180 --> 00:52:14,140
Otherwise you get a faster route to confusion.

1121
00:52:14,140 --> 00:52:16,980
A bad process in a polished screen stays a bad process.

1122
00:52:16,980 --> 00:52:21,500
A good structure in a clear interface changes behavior quickly because the user no longer

1123
00:52:21,500 --> 00:52:26,340
has to compensate for weak design with extra memory, extra messages and extra follow-up

1124
00:52:26,340 --> 00:52:27,340
work.

1125
00:52:27,340 --> 00:52:30,900
That is the actual leverage here, not low code as magic, low code as compression.

1126
00:52:30,900 --> 00:52:34,060
It compresses the distance between thought and system behavior.

1127
00:52:34,060 --> 00:52:36,100
So for Contoso, the lesson should be very clear.

1128
00:52:36,100 --> 00:52:39,900
Do not walk away thinking about power apps solved our vacation request problem.

1129
00:52:39,900 --> 00:52:43,900
The better conclusion is, once we design the process boundary properly, power apps gave

1130
00:52:43,900 --> 00:52:47,700
us a fast way to express that design in the business.

1131
00:52:47,700 --> 00:52:50,180
That is a much more useful lesson because it scales.

1132
00:52:50,180 --> 00:52:53,140
It means the next internal app should not begin with features.

1133
00:52:53,140 --> 00:52:54,740
It should begin with process shape.

1134
00:52:54,740 --> 00:52:58,300
It means leaders should not ask, what can the platform do?

1135
00:52:58,300 --> 00:53:01,100
Before asking, what operating behavior are we trying to create?

1136
00:53:01,100 --> 00:53:04,700
And it means makers should stop treating the tool like the source of value because tools

1137
00:53:04,700 --> 00:53:07,500
expose design quality more than they replace it.

1138
00:53:07,500 --> 00:53:10,460
Which brings me to one mistake almost every first time team makes.

1139
00:53:10,460 --> 00:53:13,220
The first trap, building in the default environment.

1140
00:53:13,220 --> 00:53:17,420
So now we get into the first trap and this one catches teams precisely because it feels

1141
00:53:17,420 --> 00:53:18,420
convenient.

1142
00:53:18,420 --> 00:53:20,260
The default environment is sitting there already.

1143
00:53:20,260 --> 00:53:21,260
It is available.

1144
00:53:21,260 --> 00:53:22,260
It feels close at hand.

1145
00:53:22,260 --> 00:53:26,100
You can open power apps, start building, connect the table, share something quickly and

1146
00:53:26,100 --> 00:53:29,500
for a small proof of concept that convenience can feel harmless.

1147
00:53:29,500 --> 00:53:34,060
But the moment you move from experiment to operating solution, that convenience starts

1148
00:53:34,060 --> 00:53:35,660
turning into structural drag.

1149
00:53:35,660 --> 00:53:36,660
And why is that?

1150
00:53:36,660 --> 00:53:39,300
Because the default environment is not a neutral place.

1151
00:53:39,300 --> 00:53:44,300
It is a shared space with broad ambient access patterns, mixed ownership and weaker boundaries

1152
00:53:44,300 --> 00:53:48,380
than you want for something that is supposed to become a real business process.

1153
00:53:48,380 --> 00:53:51,980
From a system perspective that is not just untidy, it is fragile.

1154
00:53:51,980 --> 00:53:55,860
You are building an operational front door on top of a space that was never meant to carry

1155
00:53:55,860 --> 00:53:57,500
clear production discipline.

1156
00:53:57,500 --> 00:53:59,420
At Contoso, that matters fast.

1157
00:53:59,420 --> 00:54:02,700
The vacation request app may look small but it is not low impact.

1158
00:54:02,700 --> 00:54:08,180
It affects employee records, manager accountability, process trust and eventually reporting.

1159
00:54:08,180 --> 00:54:13,100
So if we place that in the default environment simply because it is easy, we are teaching

1160
00:54:13,100 --> 00:54:15,180
the organization a bad lesson early.

1161
00:54:15,180 --> 00:54:19,660
We are saying the path from idea to production is just build where you happen to be standing.

1162
00:54:19,660 --> 00:54:20,980
That is how sprawl starts.

1163
00:54:20,980 --> 00:54:23,580
And once sprawl starts, several things happen at once.

1164
00:54:23,580 --> 00:54:28,420
Ownership gets blurry, support gets blurry, change control gets blurry, and security assumptions

1165
00:54:28,420 --> 00:54:32,660
start depending on who happened to create what rather than on intentional operating boundaries.

1166
00:54:32,660 --> 00:54:33,780
What is the real issue?

1167
00:54:33,780 --> 00:54:37,140
The default environment makes accidental architecture very easy.

1168
00:54:37,140 --> 00:54:38,660
Now I want to keep this proportional.

1169
00:54:38,660 --> 00:54:43,020
This episode is not a full governance deep dive and I do not want beginners thinking they

1170
00:54:43,020 --> 00:54:46,420
need a center of excellence before they can build one useful app.

1171
00:54:46,420 --> 00:54:47,420
You do not.

1172
00:54:47,420 --> 00:54:52,180
But you do need one simple habit very early, separate experimentation from operation.

1173
00:54:52,180 --> 00:54:54,540
If you are testing an idea fine, test quickly.

1174
00:54:54,540 --> 00:54:58,420
If you are creating something the business will rely on, move into an intentional environment

1175
00:54:58,420 --> 00:55:00,100
strategy as early as possible.

1176
00:55:00,100 --> 00:55:02,540
That shift changes behavior.

1177
00:55:02,540 --> 00:55:05,820
A dedicated environment says this solution has a life cycle.

1178
00:55:05,820 --> 00:55:09,540
It can be developed, tested, secured, and later supported with more discipline.

1179
00:55:09,540 --> 00:55:14,140
It creates a cleaner boundary for who builds, who accesses, and how changes move over time.

1180
00:55:14,140 --> 00:55:15,420
That is not bureaucracy.

1181
00:55:15,420 --> 00:55:17,060
That is structural resilience.

1182
00:55:17,060 --> 00:55:18,900
There is also a practical point here.

1183
00:55:18,900 --> 00:55:23,180
Governance and power platform has been moving toward more visibility, more managed environments,

1184
00:55:23,180 --> 00:55:26,500
and better tooling around app inventory and risk.

1185
00:55:26,500 --> 00:55:30,260
Organizations without governance see much higher rates of app sprawl and security issues

1186
00:55:30,260 --> 00:55:31,260
according to the research.

1187
00:55:31,260 --> 00:55:35,300
So even if this first app is modest, you want to build in a way that can mature cleanly

1188
00:55:35,300 --> 00:55:36,300
later.

1189
00:55:36,300 --> 00:55:39,500
Otherwise the first success becomes the first hidden liability.

1190
00:55:39,500 --> 00:55:43,300
The default environment is especially risky because it normalizes shortcuts.

1191
00:55:43,300 --> 00:55:47,500
Shortcuts around ownership, shortcuts around deployment, shortcuts around support expectations.

1192
00:55:47,500 --> 00:55:51,540
And once users begin depending on the app, every shortcut becomes more expensive to unwind.

1193
00:55:51,540 --> 00:55:55,420
That is why I would frame the default environment as a proof of concept zone, not an operating

1194
00:55:55,420 --> 00:55:56,420
home.

1195
00:55:56,420 --> 00:56:00,700
For early exploration, yes, a safe long term place for a governed leave request process.

1196
00:56:00,700 --> 00:56:04,700
No, the process may be simple, but the people inside it still deserve stable boundaries.

1197
00:56:04,700 --> 00:56:08,700
So if you are listening to this while planning your own first power app, take one practical

1198
00:56:08,700 --> 00:56:09,700
step.

1199
00:56:09,700 --> 00:56:13,220
Before you publish broadly, ask yourself, is this app still an experiment, or is it now

1200
00:56:13,220 --> 00:56:15,060
part of how work gets done?

1201
00:56:15,060 --> 00:56:20,020
If it is how work gets done, treat the environment choice like an architectural choice, because

1202
00:56:20,020 --> 00:56:21,020
it is one.

1203
00:56:21,020 --> 00:56:23,780
The wrong environment does not usually fail loudly on day one.

1204
00:56:23,780 --> 00:56:28,780
It quietly accumulates risk until support, visibility and control all start costing more than

1205
00:56:28,780 --> 00:56:30,100
the original speed save.

1206
00:56:30,100 --> 00:56:31,340
And that is the irony.

1207
00:56:31,340 --> 00:56:33,620
Teams choose the default environment to move faster.

1208
00:56:33,620 --> 00:56:37,220
But for operating solutions, it often slows maturity later because the system is doing

1209
00:56:37,220 --> 00:56:39,500
exactly what that convenience allowed.

1210
00:56:39,500 --> 00:56:42,100
Growing without boundaries.

1211
00:56:42,100 --> 00:56:44,540
The second trap accidental premium cost.

1212
00:56:44,540 --> 00:56:48,300
And the second trap sits right next to the first one because even when teams avoid environment

1213
00:56:48,300 --> 00:56:51,420
chaos, they can still create cost chaos without noticing.

1214
00:56:51,420 --> 00:56:53,580
This usually happens in a very ordinary way.

1215
00:56:53,580 --> 00:56:57,380
Someone says it would be nice if the app also connected to this other system.

1216
00:56:57,380 --> 00:56:59,100
And on the surface, that sounds harmless.

1217
00:56:59,100 --> 00:57:01,460
One more connector, one more convenience.

1218
00:57:01,460 --> 00:57:04,060
One little enhancement to make the process feel more complete.

1219
00:57:04,060 --> 00:57:07,500
But architecture has a habit of changing the business in places people are not looking

1220
00:57:07,500 --> 00:57:09,340
and licensing is one of those places.

1221
00:57:09,340 --> 00:57:10,540
So let me make this very plain.

1222
00:57:10,540 --> 00:57:13,860
The moment you build your first app, you are not only choosing an interface.

1223
00:57:13,860 --> 00:57:15,540
You are also choosing a cost shape.

1224
00:57:15,540 --> 00:57:19,580
That matters a lot in 2026 because power apps licensing has become less forgiving for

1225
00:57:19,580 --> 00:57:21,620
casual architectural drift.

1226
00:57:21,620 --> 00:57:24,700
Basic writes inside Microsoft 365 cover standard scenarios.

1227
00:57:24,700 --> 00:57:29,260
But the second you bring in data verse, premium connectors or custom connectors, the conversation

1228
00:57:29,260 --> 00:57:30,260
changes.

1229
00:57:30,260 --> 00:57:32,140
And not a little structurally.

1230
00:57:32,140 --> 00:57:36,300
For Contoso, we are already making one intentional decision that affects licensing.

1231
00:57:36,300 --> 00:57:37,420
We are using data verse.

1232
00:57:37,420 --> 00:57:38,420
That is fine.

1233
00:57:38,420 --> 00:57:42,460
It is justified because the process needs structured relationships, governed data and a

1234
00:57:42,460 --> 00:57:44,140
clean path to future automation.

1235
00:57:44,140 --> 00:57:46,420
So this is not a warning against data verse.

1236
00:57:46,420 --> 00:57:50,260
It is a warning against thoughtless expansion once you are already there.

1237
00:57:50,260 --> 00:57:55,380
Because if someone then says, let's also connect to a niche HR endpoint or let's pull manager

1238
00:57:55,380 --> 00:58:01,580
logic from a custom API or let's add one custom connector to enrich the request that small

1239
00:58:01,580 --> 00:58:06,780
design choice can shift the operating cost of the solution faster than the team expected.

1240
00:58:06,780 --> 00:58:07,780
And why is that?

1241
00:58:07,780 --> 00:58:11,900
Because custom connectors are premium, premium connectors change licensing requirements.

1242
00:58:11,900 --> 00:58:15,980
And one app can quietly drag a whole audience into a different cost model if the architecture

1243
00:58:15,980 --> 00:58:17,420
is not kept under control.

1244
00:58:17,420 --> 00:58:19,700
This is the part many first time teams miss.

1245
00:58:19,700 --> 00:58:22,220
They think licensing changes when the app gets bigger.

1246
00:58:22,220 --> 00:58:24,380
Often it changes when the connector list changes.

1247
00:58:24,380 --> 00:58:25,900
That is a very different risk pattern.

1248
00:58:25,900 --> 00:58:29,980
A simple vacation request app can look operationally modest while becoming commercially heavier

1249
00:58:29,980 --> 00:58:30,980
underneath.

1250
00:58:30,980 --> 00:58:34,820
Not because the business problem got more complex, but because the solution design wandered

1251
00:58:34,820 --> 00:58:37,660
into unnecessary integration, the screen still looks small.

1252
00:58:37,660 --> 00:58:38,980
The license footprint does not.

1253
00:58:38,980 --> 00:58:43,180
So for a first release, the discipline is simple, avoid external complexity unless it

1254
00:58:43,180 --> 00:58:46,140
is clearly required for the first value moment.

1255
00:58:46,140 --> 00:58:50,180
Do we need a custom connector to prove that employees can submit govern vacation requests

1256
00:58:50,180 --> 00:58:52,020
into dataverse with visible status?

1257
00:58:52,020 --> 00:58:56,020
No, do we need broad cross-system orchestration before the business has even validated the

1258
00:58:56,020 --> 00:58:57,020
new front door?

1259
00:58:57,020 --> 00:58:58,020
No.

1260
00:58:58,020 --> 00:59:01,260
Do we need to turn a clean first app into an integration project just because the platform

1261
00:59:01,260 --> 00:59:03,060
makes that technically possible?

1262
00:59:03,060 --> 00:59:04,180
Definitely not.

1263
00:59:04,180 --> 00:59:06,460
This is where architecture protects business reality.

1264
00:59:06,460 --> 00:59:09,300
A narrow design does not only reduce build effort.

1265
00:59:09,300 --> 00:59:13,940
It preserves optionality if Contoso keeps the first app focused on dataverse, the employee

1266
00:59:13,940 --> 00:59:18,660
experience and a clear status model, then later integration decisions stay available.

1267
00:59:18,660 --> 00:59:22,380
We can still add flows, we can still enrich routing, we can still connect other systems

1268
00:59:22,380 --> 00:59:25,140
when the business case is real enough to justify the cost.

1269
00:59:25,140 --> 00:59:29,420
But we do that from a position of intent, not because version one quietly accumulated expense

1270
00:59:29,420 --> 00:59:30,620
through enthusiasm.

1271
00:59:30,620 --> 00:59:32,900
And there is another reason to stay disciplined here.

1272
00:59:32,900 --> 00:59:34,940
Cost surprises, damage, trust.

1273
00:59:34,940 --> 00:59:40,140
If leadership hears low code and expects a lightweight first solution, then discovers that one small

1274
00:59:40,140 --> 00:59:44,780
design decision changed licensing expectations across a wider user group.

1275
00:59:44,780 --> 00:59:49,100
The platform gets blamed for something that was really an architecture choice.

1276
00:59:49,100 --> 00:59:50,220
That is avoidable.

1277
00:59:50,220 --> 00:59:52,900
We just need to say early what the solution is and what it is not.

1278
00:59:52,900 --> 00:59:55,500
So the rule I would apply in Contoso is very straightforward.

1279
00:59:55,500 --> 00:59:58,620
Use the minimum architecture that supports the first business outcome.

1280
00:59:58,620 --> 01:00:02,380
If standard capabilities and dataverse are enough to create the govern request path,

1281
01:00:02,380 --> 01:00:03,380
stop there for now.

1282
01:00:03,380 --> 01:00:07,260
We're not add premium complexity just to make the first release feel more impressive.

1283
01:00:07,260 --> 01:00:10,940
Impressive first releases often age badly clear first releases create options.

1284
01:00:10,940 --> 01:00:14,980
So yes, licensing matters more than many teams expect, but the answer is not fear.

1285
01:00:14,980 --> 01:00:16,340
It is intentional design.

1286
01:00:16,340 --> 01:00:20,140
Keep the first app clean, keep the connector story simple and let the business earn the right

1287
01:00:20,140 --> 01:00:22,060
to expand the cost model later.

1288
01:00:22,060 --> 01:00:26,340
Once the value is visible and the next architectural move is actually justified.

1289
01:00:26,340 --> 01:00:29,020
Handling real world complexity without bloating release one.

1290
01:00:29,020 --> 01:00:32,140
So now we get to the part that usually derails good first apps.

1291
01:00:32,140 --> 01:00:33,900
Real world complexity is real.

1292
01:00:33,900 --> 01:00:34,900
It is not imaginary.

1293
01:00:34,900 --> 01:00:37,140
It is not a lazy objection from the business.

1294
01:00:37,140 --> 01:00:40,260
Contoso really does have multiple countries policies really do differ.

1295
01:00:40,260 --> 01:00:42,460
Managers really are absent sometimes.

1296
01:00:42,460 --> 01:00:43,460
Delegation really does matter.

1297
01:00:43,460 --> 01:00:47,740
And because all of that is true, teams often jump to the wrong conclusion, which is if the

1298
01:00:47,740 --> 01:00:50,780
complexity is real, version one must contain all of it.

1299
01:00:50,780 --> 01:00:51,980
It should not.

1300
01:00:51,980 --> 01:00:54,620
What version one needs is not full behavioral coverage.

1301
01:00:54,620 --> 01:00:56,020
It needs structural readiness.

1302
01:00:56,020 --> 01:00:57,300
That is a very different standard.

1303
01:00:57,300 --> 01:01:00,740
And once you see the difference, the architecture becomes calmer.

1304
01:01:00,740 --> 01:01:03,020
We are not pretending complexity does not exist.

1305
01:01:03,020 --> 01:01:06,540
We are deciding where that complexity should live first so the business can grow into it

1306
01:01:06,540 --> 01:01:10,340
without dragging every future rule into the first employee experience.

1307
01:01:10,340 --> 01:01:12,740
Take multi-country policy as the first example.

1308
01:01:12,740 --> 01:01:17,500
If employees in Germany, the UK and the US follow different vacation rules, that matters.

1309
01:01:17,500 --> 01:01:21,700
But the first release does not need to expose every policy branch directly in the app.

1310
01:01:21,700 --> 01:01:25,700
What it does need is a clean way to associate a request with the right country context so

1311
01:01:25,700 --> 01:01:28,540
the system knows which policy frame may apply later.

1312
01:01:28,540 --> 01:01:30,940
That means country belongs in the data model first.

1313
01:01:30,940 --> 01:01:35,200
It becomes a structured attribute, not a guessing exercise and not a hidden assumption in

1314
01:01:35,200 --> 01:01:36,200
someone's head.

1315
01:01:36,200 --> 01:01:37,660
That one move does a lot of work.

1316
01:01:37,660 --> 01:01:39,140
It preserves reporting value.

1317
01:01:39,140 --> 01:01:41,220
It preserves future automation value.

1318
01:01:41,220 --> 01:01:45,500
And it keeps the app from turning into a policy encyclopedia on day one.

1319
01:01:45,500 --> 01:01:47,180
That is the pattern I want you to remember.

1320
01:01:47,180 --> 01:01:51,500
When complexity is real, put it into structure before you put it into behavior.

1321
01:01:51,500 --> 01:01:53,580
Now take delegation.

1322
01:01:53,580 --> 01:01:58,060
Manager absence is one of those small operational truths that can quietly break a process.

1323
01:01:58,060 --> 01:02:02,500
If the approval path depends on one person and that person is on leave, traveling or simply

1324
01:02:02,500 --> 01:02:04,180
unavailable, the process stalls.

1325
01:02:04,180 --> 01:02:05,660
That is a single point of failure.

1326
01:02:05,660 --> 01:02:07,140
So delegation matters early.

1327
01:02:07,140 --> 01:02:10,380
But again, readiness does not mean full automation.

1328
01:02:10,380 --> 01:02:14,060
In release one, Contoso can model the idea that a manager may have a delegate.

1329
01:02:14,060 --> 01:02:15,980
That relationship can exist in dataverse.

1330
01:02:15,980 --> 01:02:17,980
It can be visible to the architecture.

1331
01:02:17,980 --> 01:02:22,060
And it can be ready for later flow logic without forcing the employee app to care about

1332
01:02:22,060 --> 01:02:23,060
it yet.

1333
01:02:23,060 --> 01:02:24,540
That is a good example of future ready design.

1334
01:02:24,540 --> 01:02:25,820
We acknowledge the operating rule.

1335
01:02:25,820 --> 01:02:27,180
We capture it structurally.

1336
01:02:27,180 --> 01:02:30,660
We delay the heavier orchestration until the first path is proven.

1337
01:02:30,660 --> 01:02:34,620
Because if we try to build every delegation branch now, we immediately pull in more status

1338
01:02:34,620 --> 01:02:38,900
logic, more rooting logic, more exception logic and probably more notifications too.

1339
01:02:38,900 --> 01:02:40,420
The build expands fast.

1340
01:02:40,420 --> 01:02:41,420
Testing expands with it.

1341
01:02:41,420 --> 01:02:42,980
Support complexity expands with it.

1342
01:02:42,980 --> 01:02:47,020
And suddenly the first release is no longer about making request intake trustworthy.

1343
01:02:47,020 --> 01:02:51,660
It is about simulating every edge case the organization has ever experienced.

1344
01:02:51,660 --> 01:02:52,660
That is not maturity.

1345
01:02:52,660 --> 01:02:54,380
That is sequence collapse.

1346
01:02:54,380 --> 01:02:58,220
And this is where good architecture earns trust because it tells the business, yes, your

1347
01:02:58,220 --> 01:02:59,820
complexity is valid.

1348
01:02:59,820 --> 01:03:04,740
And no, we do not need to operationalize all of it at once to move forward responsibly.

1349
01:03:04,740 --> 01:03:07,820
There is a big difference between overbuilt and future ready.

1350
01:03:07,820 --> 01:03:11,940
Overbuilt means the solution carries behavior the business has not yet validated.

1351
01:03:11,940 --> 01:03:15,460
Future ready means the model carries enough structure that validated behavior can be added

1352
01:03:15,460 --> 01:03:17,500
later without tearing up the foundation.

1353
01:03:17,500 --> 01:03:18,820
Contoso needs the second one.

1354
01:03:18,820 --> 01:03:22,180
So if I were pressure testing release one, I would ask very simple questions.

1355
01:03:22,180 --> 01:03:23,780
Can the apps stay easy for the employee?

1356
01:03:23,780 --> 01:03:26,860
Can the request enter a dataverse with the right country context?

1357
01:03:26,860 --> 01:03:28,860
Can manage a relationship to be trusted?

1358
01:03:28,860 --> 01:03:30,980
Can delegation exist in the model?

1359
01:03:30,980 --> 01:03:31,980
Even if rooting weights?

1360
01:03:31,980 --> 01:03:35,260
Can we add automation later without redesigning the request object?

1361
01:03:35,260 --> 01:03:37,460
If the answer is yes, we are in a good place.

1362
01:03:37,460 --> 01:03:40,820
Because maturity does not come from stuffing everything into version one.

1363
01:03:40,820 --> 01:03:45,420
It comes from designing a path where each next layer has somewhere clean to land.

1364
01:03:45,420 --> 01:03:49,180
And once you understand that complexity stops feeling like a reason to stall.

1365
01:03:49,180 --> 01:03:52,020
It becomes a reason to sequence carefully.

1366
01:03:52,020 --> 01:03:54,380
Why this app should feel boring to the user?

1367
01:03:54,380 --> 01:03:58,620
So now we get to a word most teams hate when they are building internal apps.

1368
01:03:58,620 --> 01:03:59,620
Boring.

1369
01:03:59,620 --> 01:04:02,580
They want the app to feel modern, smart, polished, maybe even a little impressive.

1370
01:04:02,580 --> 01:04:04,860
But they want the first reaction to be wow, this looks great.

1371
01:04:04,860 --> 01:04:09,580
But for a process like vacation requests, that instinct usually points in the wrong direction

1372
01:04:09,580 --> 01:04:12,460
because the employee is not opening the app for an experience.

1373
01:04:12,460 --> 01:04:16,380
They are opening it to complete a simple task with as little uncertainty as possible.

1374
01:04:16,380 --> 01:04:18,180
That changes the design standard completely.

1375
01:04:18,180 --> 01:04:20,060
For the employee, boring is good.

1376
01:04:20,060 --> 01:04:21,580
Boring means the app is predictable.

1377
01:04:21,580 --> 01:04:24,020
Boring means nothing on the screen asks for interpretation.

1378
01:04:24,020 --> 01:04:27,020
Boring means the same action produces the same result every time.

1379
01:04:27,020 --> 01:04:29,660
And in business processes, predictability is a form of trust.

1380
01:04:29,660 --> 01:04:33,260
If an employee can ask for time off without training, without second guessing, the wording,

1381
01:04:33,260 --> 01:04:37,060
and without wondering whether they chose the wrong path, the app is doing its job.

1382
01:04:37,060 --> 01:04:38,460
It is not supposed to entertain.

1383
01:04:38,460 --> 01:04:40,180
It is supposed to remove ambiguity.

1384
01:04:40,180 --> 01:04:42,980
That is a very different goal from a showcase app.

1385
01:04:42,980 --> 01:04:47,460
And if we forget that, we start adding visual cleverness where operational clarity should

1386
01:04:47,460 --> 01:04:48,460
have been.

1387
01:04:48,460 --> 01:04:51,020
This is where many teams confuse sophistication with quality.

1388
01:04:51,020 --> 01:04:54,540
When they add extra navigation, they add more options than the user really needs.

1389
01:04:54,540 --> 01:04:58,660
They decorate the screen with status widgets, tiles, menus, and supporting information that

1390
01:04:58,660 --> 01:05:01,380
feels helpful in theory but creates noise in practice.

1391
01:05:01,380 --> 01:05:04,060
Then the employee opens the app and has to think before acting.

1392
01:05:04,060 --> 01:05:07,420
The process now looks more advanced, but structurally it has become slower.

1393
01:05:07,420 --> 01:05:08,580
And why is that?

1394
01:05:08,580 --> 01:05:12,060
Because every extra design choice increases the mental effort required to do something

1395
01:05:12,060 --> 01:05:13,700
that should have stayed obvious.

1396
01:05:13,700 --> 01:05:16,020
The business consequence is subtle but real.

1397
01:05:16,020 --> 01:05:17,020
Users hesitate.

1398
01:05:17,020 --> 01:05:18,020
They postpone.

1399
01:05:18,020 --> 01:05:22,340
They ask someone in chat just to confirm what the interface should already have made clear.

1400
01:05:22,340 --> 01:05:24,500
Support requests rise, work around survive.

1401
01:05:24,500 --> 01:05:26,500
None of that happens because people are resistant.

1402
01:05:26,500 --> 01:05:27,620
It is a system outcome.

1403
01:05:27,620 --> 01:05:31,620
The interface created interpretation cost where the process needed certainty.

1404
01:05:31,620 --> 01:05:33,380
So yes, this app should feel boring.

1405
01:05:33,380 --> 01:05:35,620
The employee should open it and immediately know where to begin.

1406
01:05:35,620 --> 01:05:37,220
They should see familiar language.

1407
01:05:37,220 --> 01:05:39,340
They should complete the request in a short path.

1408
01:05:39,340 --> 01:05:40,980
They should get a clear confirmation.

1409
01:05:40,980 --> 01:05:41,980
Then they should leave.

1410
01:05:41,980 --> 01:05:47,260
That is good design for this use case because the app is not trying to expand their engagement.

1411
01:05:47,260 --> 01:05:50,660
It is trying to minimize the cost of compliance with the process.

1412
01:05:50,660 --> 01:05:54,540
When people can do the right thing quickly, adoption goes up without campaigns because the

1413
01:05:54,540 --> 01:05:57,180
govern path becomes easier than the work around.

1414
01:05:57,180 --> 01:05:59,140
There is also a scale reason for this.

1415
01:05:59,140 --> 01:06:02,140
Contoso is not designing for one enthusiastic early adopter.

1416
01:06:02,140 --> 01:06:06,540
It is designing for many employees across countries with different habits, devices and tolerance

1417
01:06:06,540 --> 01:06:07,860
for internal tooling.

1418
01:06:07,860 --> 01:06:09,980
That means simplicity is not a lack of depth.

1419
01:06:09,980 --> 01:06:13,340
It is what allows the process to travel well across the organization.

1420
01:06:13,340 --> 01:06:17,180
The more ordinary the user experience feels, the less support the business needs to

1421
01:06:17,180 --> 01:06:18,380
carry later.

1422
01:06:18,380 --> 01:06:19,780
And support burden matters.

1423
01:06:19,780 --> 01:06:24,140
A flashy app that needs explanation is expensive in a way teams rarely model upfront.

1424
01:06:24,140 --> 01:06:28,420
A boring app that people understand instantly is cheaper to run easier to trust and less likely

1425
01:06:28,420 --> 01:06:30,340
to fragment into local workarounds.

1426
01:06:30,340 --> 01:06:35,580
That is what scale looks like in internal systems, not visual originality, operational consistency.

1427
01:06:35,580 --> 01:06:39,580
So if someone at Contoso says the first release feels too simple, I would take that as a positive

1428
01:06:39,580 --> 01:06:40,580
sign.

1429
01:06:40,580 --> 01:06:43,540
Simple means the employee does not have to understand the architecture.

1430
01:06:43,540 --> 01:06:46,260
Simple means the complexity state where it belongs.

1431
01:06:46,260 --> 01:06:48,220
Simple means the front door is doing its job.

1432
01:06:48,220 --> 01:06:50,780
And for a first app that is exactly what we want.

1433
01:06:50,780 --> 01:06:54,300
Because when the user experience becomes boring in the right way, the business gets something

1434
01:06:54,300 --> 01:06:56,420
much more valuable behind it.

1435
01:06:56,420 --> 01:06:58,020
Repeatable behavior.

1436
01:06:58,020 --> 01:07:00,220
The transformation moment inside the business.

1437
01:07:00,220 --> 01:07:04,020
And this is the point where the conversation inside Contoso starts to change.

1438
01:07:04,020 --> 01:07:07,700
Up to now, power platform may have lived in people's heads as a category, a promise, maybe

1439
01:07:07,700 --> 01:07:08,700
even a debate.

1440
01:07:08,700 --> 01:07:10,420
Useful for prototypes.

1441
01:07:10,420 --> 01:07:11,740
Interesting for makers.

1442
01:07:11,740 --> 01:07:15,340
Possibly relevant later, but once the first app is live and people can feel the process

1443
01:07:15,340 --> 01:07:18,260
moving differently, the discussion stops being theoretical.

1444
01:07:18,260 --> 01:07:19,740
It becomes operational.

1445
01:07:19,740 --> 01:07:21,380
That shift matters.

1446
01:07:21,380 --> 01:07:24,780
Because organizations rarely change their minds when you explain the platform better.

1447
01:07:24,780 --> 01:07:28,260
They change their minds when the business starts behaving differently in front of them.

1448
01:07:28,260 --> 01:07:32,100
One employee submits a request in seconds, a manager sees a real record instead of a vague

1449
01:07:32,100 --> 01:07:34,100
email, HR stops chasing context.

1450
01:07:34,100 --> 01:07:36,940
And suddenly the platform is no longer something we could use.

1451
01:07:36,940 --> 01:07:40,100
It is something that just changed a piece of business reality.

1452
01:07:40,100 --> 01:07:43,620
For leadership, this is often the first real signal, not that low code exists, not

1453
01:07:43,620 --> 01:07:45,100
that data versus structured.

1454
01:07:45,100 --> 01:07:49,260
Not that Canvas apps are flexible, those things matter, but they are still platform language.

1455
01:07:49,260 --> 01:07:51,620
What leadership notices is cycle time moving.

1456
01:07:51,620 --> 01:07:55,860
A request that used to sit in inbox drift now enters a governed path immediately.

1457
01:07:55,860 --> 01:07:57,220
Ownership becomes visible.

1458
01:07:57,220 --> 01:07:58,740
Delay becomes easier to see.

1459
01:07:58,740 --> 01:08:01,020
That turns process speed into something concrete.

1460
01:08:01,020 --> 01:08:04,980
And once leaders see process speed improve without a full custom development project, they

1461
01:08:04,980 --> 01:08:07,940
start understanding the platform in a different category.

1462
01:08:07,940 --> 01:08:08,940
Not as a side tool.

1463
01:08:08,940 --> 01:08:11,660
As an operating lever, I'd feel the different transformation.

1464
01:08:11,660 --> 01:08:15,340
For first, wind like this, internal requests often arrive as backlog pressure.

1465
01:08:15,340 --> 01:08:18,580
Every small process problem sounds like a software project.

1466
01:08:18,580 --> 01:08:21,860
Every improvement request competes with larger priorities.

1467
01:08:21,860 --> 01:08:25,780
That creates tension because the business experiences friction everywhere, but central

1468
01:08:25,780 --> 01:08:30,100
delivery capacity cannot absorb every operational fix.

1469
01:08:30,100 --> 01:08:32,580
A working first app changes that story a little.

1470
01:08:32,580 --> 01:08:37,140
It shows there is a controlled path between this process is inefficient and we need a major

1471
01:08:37,140 --> 01:08:38,140
build.

1472
01:08:38,140 --> 01:08:39,860
That does not remove the need for architecture.

1473
01:08:39,860 --> 01:08:45,500
It raises the importance of it because now IT can see a model where smaller process interventions

1474
01:08:45,500 --> 01:08:48,620
become possible without surrendering standards completely.

1475
01:08:48,620 --> 01:08:53,220
The platform becomes a way to absorb demand more intelligently provided the structure underneath

1476
01:08:53,220 --> 01:08:54,220
stays disciplined.

1477
01:08:54,220 --> 01:08:56,060
That is why early winds matter so much.

1478
01:08:56,060 --> 01:08:57,700
They do not just solve one use case.

1479
01:08:57,700 --> 01:09:00,740
They change what the organization believes is possible.

1480
01:09:00,740 --> 01:09:02,700
The business teams feel something else again.

1481
01:09:02,700 --> 01:09:04,860
They stop assuming that process pain is just normal.

1482
01:09:04,860 --> 01:09:06,740
That is a bigger shift than it sounds.

1483
01:09:06,740 --> 01:09:11,420
In many organizations people adapt to drag so completely that they stop questioning it.

1484
01:09:11,420 --> 01:09:15,540
Email chains, manual follow ups, invisible status and local workarounds become part of the

1485
01:09:15,540 --> 01:09:16,540
culture.

1486
01:09:16,540 --> 01:09:20,820
Then a small app comes in and removes one layer of that friction and suddenly people

1487
01:09:20,820 --> 01:09:23,460
can see that the old pain was never inevitable.

1488
01:09:23,460 --> 01:09:26,100
It was just embedded in the way the process had been shaped.

1489
01:09:26,100 --> 01:09:30,460
That is a powerful moment because it moves the conversation from complaint to redesign.

1490
01:09:30,460 --> 01:09:33,860
Instead of saying this process is annoying people start asking where else are we doing

1491
01:09:33,860 --> 01:09:35,020
this the hard way.

1492
01:09:35,020 --> 01:09:40,340
And that question is where maturity begins, not platform maturity, organizational maturity.

1493
01:09:40,340 --> 01:09:45,180
Because once one request path becomes cleaner other weak entry points become easier to recognize.

1494
01:09:45,180 --> 01:09:50,380
Expense approvals, equipment requests, internal service asks, HR changes.

1495
01:09:50,380 --> 01:09:55,580
The first app creates a pattern people can now see, event record status owner visibility.

1496
01:09:55,580 --> 01:09:57,100
That pattern becomes portable.

1497
01:09:57,100 --> 01:09:58,380
But there is a tension here too.

1498
01:09:58,380 --> 01:10:02,500
A first success creates appetite and appetite can be dangerous if the organization learns

1499
01:10:02,500 --> 01:10:03,660
the wrong lesson.

1500
01:10:03,660 --> 01:10:08,380
If contoso concludes that power platform means we can build everything quickly the next

1501
01:10:08,380 --> 01:10:09,900
wave will create chaos.

1502
01:10:09,900 --> 01:10:14,980
If contoso concludes that structured design plus the platform can improve specific operating

1503
01:10:14,980 --> 01:10:18,380
paths quickly then the first app has taught the right lesson.

1504
01:10:18,380 --> 01:10:22,100
That distinction is everything because the real transformation is not excitement.

1505
01:10:22,100 --> 01:10:23,220
It is seriousness.

1506
01:10:23,220 --> 01:10:27,260
The business starts taking process design more seriously because it has seen one example

1507
01:10:27,260 --> 01:10:29,180
of design turning into throughput.

1508
01:10:29,180 --> 01:10:33,260
IT starts taking low code more seriously because it has seen a controlled use case create

1509
01:10:33,260 --> 01:10:36,060
value without bypassing architecture.

1510
01:10:36,060 --> 01:10:39,820
Leadership starts taking internal process speed more seriously because it can now connect

1511
01:10:39,820 --> 01:10:43,860
software shape to business performance that is the transformation moment, not applause

1512
01:10:43,860 --> 01:10:44,860
for the app.

1513
01:10:44,860 --> 01:10:49,900
A new understanding that process friction is designable that cycle time can move without

1514
01:10:49,900 --> 01:10:53,460
giant programs and that technology does not only automate work.

1515
01:10:53,460 --> 01:10:56,020
It changes the conditions under which work happens.

1516
01:10:56,020 --> 01:10:58,220
Why the app only solves half the problem?

1517
01:10:58,220 --> 01:10:59,900
So this is where we need to stay honest.

1518
01:10:59,900 --> 01:11:03,380
The app solves a real problem but it does not solve the whole problem.

1519
01:11:03,380 --> 01:11:04,380
It fixes entry.

1520
01:11:04,380 --> 01:11:08,340
It does not yet fix movement and that difference matters more than people expect because once

1521
01:11:08,340 --> 01:11:13,060
a request enters data verse cleanly the organization often feels a sense of relief and starts

1522
01:11:13,060 --> 01:11:15,460
assuming the process is now handled.

1523
01:11:15,460 --> 01:11:19,060
But a record sitting neatly in a table is not the same thing as work progressing through

1524
01:11:19,060 --> 01:11:20,060
the business.

1525
01:11:20,060 --> 01:11:21,700
A good front door improves intake.

1526
01:11:21,700 --> 01:11:25,900
It does not guarantee flow at contoso the employee can now submit vacation properly.

1527
01:11:25,900 --> 01:11:30,540
That is a meaningful shift the request exists the data is structured ownership is visible

1528
01:11:30,540 --> 01:11:34,860
at the starting point status begins from a govern baseline all of that is good.

1529
01:11:34,860 --> 01:11:38,100
But after submission something still has to happen someone has to be prompted someone

1530
01:11:38,100 --> 01:11:42,660
has to act if they do not the request can still stall only now it stalls more neatly

1531
01:11:42,660 --> 01:11:43,660
than before.

1532
01:11:43,660 --> 01:11:47,740
That is why I would separate two kinds of capability very clearly the app handles interface.

1533
01:11:47,740 --> 01:11:51,580
The next layer handles orchestration and if we blur those two we start expecting the

1534
01:11:51,580 --> 01:11:53,540
wrong thing from the first build.

1535
01:11:53,540 --> 01:11:58,100
An interface is about capturing intent well it gives the employee a clean way to enter

1536
01:11:58,100 --> 01:12:02,140
the system it lowers friction reduces ambiguity and makes the opening event reliable but

1537
01:12:02,140 --> 01:12:06,220
orchestration is different orchestration is what moves a request from one accountable

1538
01:12:06,220 --> 01:12:07,580
state to another.

1539
01:12:07,580 --> 01:12:11,700
It is what turns a clean record into a progressing process that includes things like rooting who

1540
01:12:11,700 --> 01:12:15,940
should be asked next it includes reminders what happens if the manager does not respond

1541
01:12:15,940 --> 01:12:20,300
it includes escalation what happens if the approval window starts slipping and it includes

1542
01:12:20,300 --> 01:12:24,500
hand off logic what happens if the assigned approver is absent and delegation needs to take

1543
01:12:24,500 --> 01:12:29,020
effect those are not screen questions those are flow questions and once you see that the

1544
01:12:29,020 --> 01:12:32,700
architecture becomes easier to reason about the canvas app was the right move for the front

1545
01:12:32,700 --> 01:12:37,260
door because the front door needed simplicity but the moment a request exists a different

1546
01:12:37,260 --> 01:12:42,260
kind of system behavior has to take over not better visuals better movement this clicked

1547
01:12:42,260 --> 01:12:46,860
for me years ago when I saw teams celebrate a successful form launch then wonder why cycle

1548
01:12:46,860 --> 01:12:51,380
time only improved part of the way the answer was always the same submission got better

1549
01:12:51,380 --> 01:12:55,860
throughput did not fully change because the request still depended on manual follow up after

1550
01:12:55,860 --> 01:13:00,700
entry the system had learned how to receive intent but not yet how to carry intent through

1551
01:13:00,700 --> 01:13:04,820
the rest of the path that is exactly the point contoso is reaching now the employee side

1552
01:13:04,820 --> 01:13:09,260
is cleaner the operating path behind it is still partially manual so a manager may still

1553
01:13:09,260 --> 01:13:13,980
need prompting HR may still need visibility on delay delegation may still depend on human

1554
01:13:13,980 --> 01:13:18,860
intervention the request may still sit too long in one state if no automation keeps it moving

1555
01:13:18,860 --> 01:13:23,540
that does not mean the app failed it means the app solved the first half well enough that

1556
01:13:23,540 --> 01:13:27,660
the second half is now visible and from a business perspective that is progress because

1557
01:13:27,660 --> 01:13:32,100
hidden process weakness is much harder to improve than visible process weakness before the

1558
01:13:32,100 --> 01:13:35,860
app intake and flow were both messy at the same time so everything blurred together now

1559
01:13:35,860 --> 01:13:39,820
the entry point is cleaner which means the remaining drag stands out we can see where

1560
01:13:39,820 --> 01:13:43,660
movement still breaks down that is a good outcome that gives us a sharper problem statement

1561
01:13:43,660 --> 01:13:49,660
for what comes next not build more app but design the flow layer that carries this governed

1562
01:13:49,660 --> 01:13:54,780
request through approvals reminders and state change without depending on inbox habits which

1563
01:13:54,780 --> 01:13:59,420
brings me to the next architectural move once the request exists in data verse as a proper

1564
01:13:59,420 --> 01:14:03,740
business object automation becomes the force multiplier not because automation is trendy

1565
01:14:03,740 --> 01:14:07,580
and not because every process needs a giant workflow but because a clean record without

1566
01:14:07,580 --> 01:14:11,940
movement still leaves throughput exposed the form collected intent the next layer needs

1567
01:14:11,940 --> 01:14:16,220
to create motion so if this episode was about giving the business a proper front door the

1568
01:14:16,220 --> 01:14:19,620
next one has to deal with the corridor behind it because that is where requests either

1569
01:14:19,620 --> 01:14:25,380
move with discipline or quietly start waiting again so if you are listening to this and

1570
01:14:25,380 --> 01:14:29,260
thinking fine but what do I actually do next let me make that practical do not start with

1571
01:14:29,260 --> 01:14:32,940
a platform feature start with one narrow request that enters your business repeatedly

1572
01:14:32,940 --> 01:14:37,820
and causes delay because people still handle it through messages memory and local interpretation

1573
01:14:37,820 --> 01:14:42,060
that could be leave requests it could be equipment requests it could be onboarding tasks the

1574
01:14:42,060 --> 01:14:46,580
specific use case matters less than the pattern you are looking for a process with one clear

1575
01:14:46,580 --> 01:14:51,820
trigger one obvious decision path and one painful amount of ambiguity at the front door

1576
01:14:51,820 --> 01:14:57,260
then define one measurable outcome not five one for this contours example we used cycle time

1577
01:14:57,260 --> 01:15:01,740
reduction because it ties directly to the operating problem a request that used to drift

1578
01:15:01,740 --> 01:15:06,780
through email now enters a governed path immediately that is visible that is measurable

1579
01:15:06,780 --> 01:15:11,620
and it gives you a way to judge whether the app improved business behavior or just changed

1580
01:15:11,620 --> 01:15:16,940
where people click after that map the process in three parts what event starts it what decision

1581
01:15:16,940 --> 01:15:21,340
follows it what status language should the whole business share if you cannot answer those

1582
01:15:21,340 --> 01:15:25,420
three questions cleanly do not build yet you are still dealing with process fog and the

1583
01:15:25,420 --> 01:15:29,420
platform will not fix that for you it will only express it faster once those answers are

1584
01:15:29,420 --> 01:15:34,220
clear choose the app type based on the job if your first need is a controlled simple low

1585
01:15:34,220 --> 01:15:38,540
friction experience for employees choose canvas canvas is the right front door when adoption

1586
01:15:38,540 --> 01:15:43,260
depends on clarity especially for narrow actions like request submission if your primary need is

1587
01:15:43,260 --> 01:15:48,940
broad operational visibility across records relationships views and process oversight model driven

1588
01:15:48,940 --> 01:15:53,980
maybe the better fit not because it is more advanced but because it is built for a different operating

1589
01:15:53,980 --> 01:15:59,340
posture and if you are unsure ask a simpler question are you designing for ease of entry or for

1590
01:15:59,340 --> 01:16:03,900
depth of operations that question usually clears the noise then model the data with more discipline

1591
01:16:03,900 --> 01:16:08,060
than feels necessary at first that sounds backwards because beginners often want to spend energy

1592
01:16:08,060 --> 01:16:13,020
on screens but the cleaner your data verse structure is now the easier everything becomes later

1593
01:16:13,020 --> 01:16:17,900
create the request object properly you standardize statuses link the request to the employee and

1594
01:16:17,900 --> 01:16:23,500
approval context add structural readiness for future complexity like delegation or country policy

1595
01:16:23,500 --> 01:16:27,340
without trying to automate all of it in release one this is the part most people skip and then

1596
01:16:27,340 --> 01:16:32,060
they pay for it later next protect scope your first release does not need reminders escalations

1597
01:16:32,060 --> 01:16:36,380
advanced routing external integrations in every edge case the business can remember from the last

1598
01:16:36,380 --> 01:16:42,220
10 years it needs one thing more than anything else a stable first value moment in contoso that

1599
01:16:42,220 --> 01:16:46,860
value moment is very simple and employee submits a proper vacation request into data verse and can

1600
01:16:46,860 --> 01:16:51,100
see that it exists with a visible status that is enough to change behavior ship that before you

1601
01:16:51,100 --> 01:16:55,820
chase completeness while you are doing that stay intentional about where you build if the app is

1602
01:16:55,820 --> 01:17:00,380
still an experiment fine move quickly if the app is about to become part of how work gets done stop

1603
01:17:00,380 --> 01:17:05,260
treating environment choice like an afterthought give it cleaner boundaries start as you mean to grow

1604
01:17:05,260 --> 01:17:10,140
that one decision saves you from a lot of support and governance paying later and keep your connector

1605
01:17:10,140 --> 01:17:14,940
story simple a first app does not need to impress people with integration density it needs to prove

1606
01:17:14,940 --> 01:17:20,300
that a better operating path exists the more external complexity you pull in too early the more likely

1607
01:17:20,300 --> 01:17:25,260
you are to create cost surprises testing drag and dependency problems before the business has

1608
01:17:25,260 --> 01:17:30,540
even validated the basic pattern earn complexity do not frontload it so the implementation path is

1609
01:17:30,540 --> 01:17:36,620
not complicated but it does require restraint pick one repeatable request pick one business metric

1610
01:17:36,620 --> 01:17:41,660
define event decision and status choose canvas or model driven based on the real job model data verse

1611
01:17:41,660 --> 01:17:46,700
cleanly ship the smallest usable release keep environments and connectors intentional then watch

1612
01:17:46,700 --> 01:17:51,900
what happens to behavior because if your app idea still sounds vague after all of that there is a good

1613
01:17:51,900 --> 01:17:57,020
chance you do not have an app problem yet you have a process design problem that wants to masquerade

1614
01:17:57,020 --> 01:18:02,860
as a user interface project and that distinction will save you a lot of wasted build effort so that is

1615
01:18:02,860 --> 01:18:08,220
the first architectural move turn structured data into a working front door and use the app type

1616
01:18:08,220 --> 01:18:12,620
that fits the behavior you actually need if you want the next layer where this request starts moving

1617
01:18:12,620 --> 01:18:17,660
through approvals reminders and delegation without inbox drift listen the next episode because

1618
01:18:17,660 --> 01:18:21,500
a form captures intent, but automation is what creates throughput.

Mirko Peters Profile Photo

Founder of m365.fm, m365.show and m365con.net

Mirko Peters is a Microsoft 365 expert, content creator, and founder of m365.fm, a platform dedicated to sharing practical insights on modern workplace technologies. His work focuses on Microsoft 365 governance, security, collaboration, and real-world implementation strategies.

Through his podcast and written content, Mirko provides hands-on guidance for IT professionals, architects, and business leaders navigating the complexities of Microsoft 365. He is known for translating complex topics into clear, actionable advice, often highlighting common mistakes and overlooked risks in real-world environments.

With a strong emphasis on community contribution and knowledge sharing, Mirko is actively building a platform that connects experts, shares experiences, and helps organizations get the most out of their Microsoft 365 investments.