<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bala Madhusoodhanan</title>
    <description>The latest articles on DEV Community by Bala Madhusoodhanan (@balagmadhu).</description>
    <link>https://dev.to/balagmadhu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg</url>
      <title>DEV Community: Bala Madhusoodhanan</title>
      <link>https://dev.to/balagmadhu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/balagmadhu"/>
    <language>en</language>
    <item>
      <title>Enhancing AI Governance with the ai-governance-classifier Skill</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 20 Jul 2026 05:43:28 +0000</pubDate>
      <link>https://dev.to/balagmadhu/enhancing-ai-governance-with-the-ai-governance-classifier-skill-3gp2</link>
      <guid>https://dev.to/balagmadhu/enhancing-ai-governance-with-the-ai-governance-classifier-skill-3gp2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
AI is transforming how we interact, but with great power comes great responsibility. Ensuring responsible AI behavior—especially around sensitive data—is crucial. In this post, I’ll introduce the ai-governance-classifier skill, explain how it works, and show practical examples of its value.&lt;/p&gt;

&lt;p&gt;The ai-governance-classifier skill is a tool designed to help conversational AI agents comply with governance policies. It automatically analyzes user queries to detect whether they involve personal information or restricted topics. If a query is sensitive, the agent declines to answer, protecting privacy and ensuring compliance.&lt;br&gt;
&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated Classification: Detects personal or sensitive queries.&lt;/li&gt;
&lt;li&gt;Policy Enforcement: Blocks responses when necessary.&lt;/li&gt;
&lt;li&gt;Customizable Messaging: Lets you tailor blocked response messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/bala-gopal/embed/PwWeRVq?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frgvml7quxkn73cxb701f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frgvml7quxkn73cxb701f.png" alt=" " width="800" height="275"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;1) Before responding to any user message, always call the skill: ai-governance-classifier ​ 

2) The skill will return a JSON object. Parse the output and evaluate the following fields:
ClassifyPersonal
ClassifyBias

3) If the skill output contains "ClassifyPersonal": "Yes" OR "ClassifyBias": "Yes":
   → Do NOT answer the user's original question.
   → Do NOT display the JSON output.
   → Respond ONLY with: "This Agent doesn't respond due to AI governance policy."
   → Stop processing immediately.

4) If the skill output contains "ClassifyPersonal": "No" AND "ClassifyBias": "No":
   → Proceed to answer the user's question normally.
   → Do NOT display or reference the JSON output in your response.​‌
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdvfddgn7u9ck832gpbv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdvfddgn7u9ck832gpbv0.png" alt=" " width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqinwa2cdic7s8p9n8fms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqinwa2cdic7s8p9n8fms.png" alt=" " width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Use ai-governance-classifier?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Protects User Privacy&lt;/u&gt;: Sensitive information isn’t exposed or mishandled.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Supports Regulatory Compliance&lt;/u&gt;: Helps meet GDPR, CCPA, and other requirements.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Builds Trust&lt;/u&gt;: Users see that their data is respected.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Reduces Risk&lt;/u&gt;: Prevents accidental leaks or misuse of information.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Easy Integration&lt;/u&gt;: Works with existing conversational agents with minimal setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI governance isn’t just about rules—it's about protecting people. The ai-governance-classifier skill makes it easy for AI agents to act responsibly, balancing usefulness with privacy. Try it out and experience the peace of mind that comes from trustworthy AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link to Skill&lt;/strong&gt;: &lt;a href="https://github.com/BalaGM10/MCS-Copilot-Skills/tree/main/ai-governance-classifier" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agentskills</category>
      <category>copilotstudio</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>Automating RAG Regression Tests with an AI-Driven Evaluator (AI Builder + Copilot Studio)</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 13 Jul 2026 09:39:32 +0000</pubDate>
      <link>https://dev.to/balagmadhu/automating-rag-regression-tests-with-an-ai-driven-evaluator-ai-builder-copilot-studio-b84</link>
      <guid>https://dev.to/balagmadhu/automating-rag-regression-tests-with-an-ai-driven-evaluator-ai-builder-copilot-studio-b84</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
We built a lightweight regression-testing pipeline for our Retrieval-Augmented Generation (RAG) agent using Power Automate, Copilot Studio (or Execute Agent), and an AI Builder evaluation prompt. The goal: turn a curated set of knowledge-base (KB) questions into a repeatable test pack, run them automatically after KB or instruction changes (or model upgrades), and deliver deterministic pass/fail reports to the product owner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works (high level)&lt;/strong&gt;:&lt;br&gt;
Work with the product owner to define a small, focused regression pack: representative KB questions + the expected/desired responses or required attributes (formatting, tone, required facts). Keep these single-turn questions to start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fru2vbr5byni400a4ti2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fru2vbr5byni400a4ti2f.png" alt=" " width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store the test pack (Excel/Dataverse/SharePoint list). Each row is a test case: ID, question, expected snippet or attributes, and acceptance criteria.&lt;/li&gt;
&lt;li&gt;Automate with Power Automate (flow shown in the screenshot):
a) Manually trigger or schedule the flow.
b) GetTestCases (read test pack from Excel/Dataverse).
c) Scope &amp;gt; Apply to each test case:
d) Compose input payload (question + metadata).
e) Execute Agent and wait (run the RAG agent for that single-turn question).
f) Run a prompt (AI Builder or LLM) that evaluates the agent response against the acceptance criteria.
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl" class="crayons-story__hidden-navigation-link"&gt;Prompt Engineering for Automated Evaluation: Making LLMs the Judge in AI Builder Solutions&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/balagmadhu" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg" alt="balagmadhu profile" class="crayons-avatar__image" width="768" height="1024"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/balagmadhu" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Bala Madhusoodhanan
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Bala Madhusoodhanan
                
              
              &lt;div id="story-author-preview-content-3620356" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/balagmadhu" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg" class="crayons-avatar__image" alt="" width="768" height="1024"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Bala Madhusoodhanan&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl" id="article-link-3620356"&gt;
          Prompt Engineering for Automated Evaluation: Making LLMs the Judge in AI Builder Solutions
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aibuilder"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aibuilder&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/powerplatform"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;powerplatform&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/evaluation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;evaluation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/powerfuldevs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;powerfuldevs&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Update a row with the result (Pass/Fail, metrics, evaluator JSON).&lt;br&gt;
After loop: aggregate results, calculate pass rate, and send a report to the product owner (email/Teams/Files).&lt;/p&gt;

&lt;p&gt;The evaluation prompt (core idea) We used an evaluator prompt that positions the LLM as an impartial critic and returns a strict JSON evaluation. This is inspired by proven LLM-as-judge patterns and gives us a deterministic, machine-readable output to gate deployments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output is machine-readable (JSON/CSV) so results can be tracked and automated.&lt;/li&gt;
&lt;li&gt;Each test shows scores and a short reason so the product owner sees why something failed.&lt;/li&gt;
&lt;li&gt;Clear PASS/FAIL and a short failure reason make go/no-go decisions easy.
Every result links back to the original test case so fixes are quick to find.&lt;/li&gt;
&lt;li&gt;Include run info (date, model/KB version) so failures can be reproduced.&lt;/li&gt;
&lt;li&gt;Show a one-line summary (e.g., "28/30 passed — 93%") for a fast health check.&lt;/li&gt;
&lt;li&gt;Prioritize failures by impact so the product owner knows what to fix first.&lt;/li&gt;
&lt;li&gt;Attach remediation notes (short next steps) so engineers know how to resolve issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A clear, structured evaluation report turns a flood of agent outputs into actionable intelligence — empowering product owners to make fast, confident decisions about content changes, model updates, and releases.&lt;/p&gt;

</description>
      <category>powerfuldevs</category>
      <category>powerplatform</category>
      <category>copilotstudio</category>
      <category>agentevaluation</category>
    </item>
    <item>
      <title>Ask, Filter, Deliver: Interactive Work Item Exploration for Product Teams</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 06 Jul 2026 07:06:21 +0000</pubDate>
      <link>https://dev.to/balagmadhu/ask-filter-deliver-interactive-work-item-exploration-for-product-teams-3e24</link>
      <guid>https://dev.to/balagmadhu/ask-filter-deliver-interactive-work-item-exploration-for-product-teams-3e24</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
Product teams often face the challenge of sifting through a mountain of work items in Azure DevOps (ADO), searching for the signal amid the noise. Whether you’re validating a new requirement, checking the status of a change request, or planning for the next release, actionable insights—delivered quickly—are key.&lt;br&gt;
This article explores how to leverage Power Automate’s connectors in an agentic workflow, enabling interactive exploration of work items. We’ll start with the quickest way to get started, then dive deeper into more advanced filtering and dynamic queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick &amp;amp; Easy: Using a Pre-Defined Query&lt;/strong&gt;&lt;br&gt;
For teams looking for a fast solution, Power Automate offers a simple method: use a pre-defined ADO query and connect it directly to your workflow. This approach is perfect when you already know the criteria you want to retrieve—such as all work items assigned to your team, or those marked as “New” or “Change Request.”&lt;/p&gt;

&lt;p&gt;1) Setup the ADO query and get the system generated query ID&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd9c9deo0wi8qvjxyt63.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd9c9deo0wi8qvjxyt63.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) Use the &lt;a href="https://learn.microsoft.com/en-us/connectors/visualstudioteamservices/#get-query-results" rel="noopener noreferrer"&gt;ADO get query action&lt;/a&gt; and  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd1a8d7ymjvoy0eg4pkfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd1a8d7ymjvoy0eg4pkfc.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) Use this as a Tool to get the data into agentic workflow and let the orchestration engine do its magic to work on the data&lt;/p&gt;

&lt;p&gt;If your pre-defined query returns too many work items, you may encounter errors or timeouts in your agentic workflow due to Power Automate’s data handling limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Querying for Flexible, Context-Aware Exploration&lt;/strong&gt;:&lt;br&gt;
When you need more flexibility than a static, pre-defined query allows, it’s time to move to dynamic querying. This method lets your agentic workflow adapt on the fly—filtering data right at the source based on user input or real-time context.&lt;br&gt;
Instead of relying on a single saved query, you dynamically build your ADO query, often using variables from Copilot prompts or Power Automate inputs. This makes your flows far more interactive and resilient—especially for product teams who need answers to specific, changing questions.&lt;/p&gt;

&lt;p&gt;1) Use the “Send an HTTP request to Azure DevOps” &lt;a href="https://learn.microsoft.com/en-us/connectors/visualstudioteamservices/#send-an-http-request-to-azure-devops" rel="noopener noreferrer"&gt;Action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2)Build Your WIQL Query Dynamically&lt;br&gt;
In the request body, construct your WIQL query.&lt;br&gt;
Use dynamic content (variables, user responses, or Copilot inputs) to substitute values—like work item type, title, or state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbofpo5ebaocwup8irrsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbofpo5ebaocwup8irrsy.png" alt=" " width="800" height="674"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="nv"&gt;"SELECT [System.Id], [System.Title], [System.State]
            FROM WorkItemLinks
            WHERE [Source].[System.WorkItemType] = 'Capability'
            AND [Source].[System.Title] CONTAINS '@{triggerBody()?['text']}'
            AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
            AND [Target].[System.WorkItemType] = 'Business Requirement'
            AND [Target].[System.State] &amp;lt;&amp;gt; 'Removed'
            MODE (MayContain)"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server only returns data that matches your specific, real-time criteria&lt;/p&gt;

&lt;p&gt;When using this method, always validate user input and test query performance to ensure your workflow remains fast and reliable, even as requirements change.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Pre-Defined Query&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;** Dynamic Query (HTTP Request)**&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast to   implement and easy to maintain&lt;/td&gt;
&lt;td&gt;Highly flexible—query adapts to user or agent input in real time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliable for routine, repeatable queries&lt;/td&gt;
&lt;td&gt;Efficient—returns only what’s needed, minimizing risk of timeouts/data   overload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No need for advanced query skills&lt;/td&gt;
&lt;td&gt;Supports complex, cross-linked queries for richer insights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Static: limited flexibility; not   responsive to changing needs&lt;/td&gt;
&lt;td&gt;Requires understanding of WIQL and Azure DevOps REST API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;If the query returns too much data, you   may encounter errors or timeouts in your agentic workflow due to Power   Automate’s data handling limits&lt;/td&gt;
&lt;td&gt;More setup and testing needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Updates require manual changes in Azure   DevOps&lt;/td&gt;
&lt;td&gt;Errors can occur if dynamic input is invalid or query structure is   incorrect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bottom Line&lt;/strong&gt;:&lt;br&gt;
&lt;em&gt;Pre-defined queries&lt;/em&gt; are great for stable, repeatable needs and quick wins.&lt;br&gt;
&lt;em&gt;Dynamic queries&lt;/em&gt; empower truly interactive, agentic workflows—perfect for evolving product management and backlog exploration.&lt;/p&gt;

&lt;p&gt;PS - The &lt;a href="https://learn.microsoft.com/en-us/azure/devops/report/powerbi/odataquery-connect?view=azure-devops" rel="noopener noreferrer"&gt;oDATA&lt;/a&gt; options is something to be explored&lt;/p&gt;

</description>
      <category>powerautomate</category>
      <category>powerfuldevs</category>
      <category>devops</category>
    </item>
    <item>
      <title>Automating Your Weekly Prep with an AI-Powered M365 Briefing with WorkIQ</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Tue, 30 Jun 2026 07:34:00 +0000</pubDate>
      <link>https://dev.to/balagmadhu/automating-your-weekly-prep-with-an-ai-powered-m365-briefing-with-workiq-2jed</link>
      <guid>https://dev.to/balagmadhu/automating-your-weekly-prep-with-an-ai-powered-m365-briefing-with-workiq-2jed</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
We've explored the immense potential of Copilot to transform our daily workflows. But what if you could start every week not just prepared, but truly proactive? What if the overwhelming feeling of a Monday morning inbox, the forgotten follow-ups, or the surprise meeting tasks could become a thing of the past? We spend precious hours just sifting through emails, cross-referencing calendars, and trying to recall commitments, all before we even get to the actual work. Here is something evolved over time and the quality of response is amazing when workIQ is enabled. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure of the Prompt&lt;/strong&gt;:&lt;br&gt;
Most productivity loss doesn't happen because people are lazy — it happens because of invisible overhead: the mental energy spent remembering what's pending, deciding what to do next, or realising on Wednesday that something sent on Friday never got a response. This prompt eliminates that overhead systematically&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Problem it solves&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inbox anxiety&lt;/td&gt;
&lt;td&gt;Every actionable thread is surfaced and ranked — nothing lurks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forgotten follow-ups&lt;/td&gt;
&lt;td&gt;Sent Items review catches every unanswered request you made&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meeting unprepared&lt;/td&gt;
&lt;td&gt;Category A/B meeting prep flags what needs doing before you walk in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time blindness&lt;/td&gt;
&lt;td&gt;The capacity overview shows next week's shape before it happens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reactive Mondays&lt;/td&gt;
&lt;td&gt;You start the week with a plan, not a pile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manager communication gaps&lt;/td&gt;
&lt;td&gt;The status draft means you never skip this because it takes too long&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distraction patterns&lt;/td&gt;
&lt;td&gt;The productivity summary names the patterns so you can change them&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;GLOBAL SCOPE RULES (apply to every section below)

| Rule | Definition |
|---|---|
| &lt;span class="gs"&gt;**My identity**&lt;/span&gt; | From = me; "To me" = I appear in the To field (not Cc/Bcc only) |
| &lt;span class="gs"&gt;**Lookback**&lt;/span&gt; | Past 7 calendar days from the moment this prompt runs |
| &lt;span class="gs"&gt;**Lookahead**&lt;/span&gt; | Next 7 calendar days from the moment this prompt runs |
| &lt;span class="gs"&gt;**Deduplication**&lt;/span&gt; | Deduplicate conversation threads; represent each thread once using its latest qualifying message |
| &lt;span class="gs"&gt;**Internal domain**&lt;/span&gt; | Infer my organisation's domain from my email address; all other domains = External |
| &lt;span class="gs"&gt;**Automated exclusions**&lt;/span&gt; | Drop items from: noreply / no-reply / do-not-reply / no_reply senders; Teams notification emails (noreply@&lt;span class="err"&gt;*&lt;/span&gt;.teams.microsoft.com); system alerts; OOO auto-replies (for response-detection only); digests; newsletters; bulk marketing |
| &lt;span class="gs"&gt;**Broadcast exclusions**&lt;/span&gt; | Drop subjects containing: E-Learning, Training reminder, Newsletter, Digest, Notification, Alert, System message, FYI only, Do not reply |
| &lt;span class="gs"&gt;**Calendar invite exclusions**&lt;/span&gt; | Drop calendar auto-notifications unless the body explicitly requests a non-calendar action |
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## 📤 OUTPUT STRUCTURE&lt;/span&gt;

Produce the full report in this exact sequence of sections:
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 1 — 📥 INBOX: Outstanding Actions (Lookback 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; Surface every email in my Inbox that still requires action from me.

&lt;span class="gs"&gt;**Scope:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Folder: Inbox only (no subfolders, Archive, Junk, Deleted Items)
&lt;span class="p"&gt;-&lt;/span&gt; Include only threads where I am on &lt;span class="gs"&gt;**To**&lt;/span&gt; (not Cc/Bcc only)
&lt;span class="p"&gt;-&lt;/span&gt; Represent each thread once using the &lt;span class="gs"&gt;**latest inbound message**&lt;/span&gt; within the lookback window
&lt;span class="p"&gt;-&lt;/span&gt; Apply all global exclusions above

&lt;span class="gs"&gt;**Inclusion logic (three tiers):**&lt;/span&gt;

| Tier | Condition |
|---|---|
| &lt;span class="gs"&gt;**@Mentions**&lt;/span&gt; | I am explicitly @mentioned in the message body |
| &lt;span class="gs"&gt;**Unread**&lt;/span&gt; | Message is Unread (including "seen on mobile but still Unread") |
| &lt;span class="gs"&gt;**Read – not replied**&lt;/span&gt; | Message is Read but I have NOT sent a reply after the latest inbound (compare my latest Sent timestamp in the thread vs. the latest inbound timestamp) |

&lt;span class="gs"&gt;**Prioritisation within section:**&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; @Mentions (newest → oldest)
&lt;span class="p"&gt;2.&lt;/span&gt; Unread, no @mention (newest → oldest)
&lt;span class="p"&gt;3.&lt;/span&gt; Read, not replied (newest → oldest)

&lt;span class="gs"&gt;**Output format:**&lt;/span&gt;

Start with the heading:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📥 Immediate Action — Inbox
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Provide a single continuous numbered list across all tiers.
&lt;span class="p"&gt;-&lt;/span&gt; Prefix @mention items with &lt;span class="gs"&gt;**‼️**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; For each item include: &lt;span class="gs"&gt;**Bold subject**&lt;/span&gt;, Sender (display name), Received date/time (local), one-line &lt;span class="gs"&gt;**Next step**&lt;/span&gt;

Then the heading:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📥 Action Required — Inbox
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Remaining qualifying items in the same format.

Then:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📥 Other — Inbox
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;All examined inbox threads NOT included above: Sender – Subject – Received date (to confirm nothing was missed).
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 2 — 📨 SENT ITEMS: Awaiting Responses (Lookback 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; Surface emails I sent that requested action and have not yet received a meaningful response.

&lt;span class="gs"&gt;**Scope:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Folder: Sent Items only
&lt;span class="p"&gt;-&lt;/span&gt; From = me; deduplicate threads; use my latest sent message per thread within the lookback window
&lt;span class="p"&gt;-&lt;/span&gt; Apply all global exclusions

&lt;span class="gs"&gt;**Inclusion logic:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Include only emails where I &lt;span class="gs"&gt;**requested input, a decision, or a deliverable**&lt;/span&gt; (proposal, data, approval, feedback enabling next steps)
&lt;span class="p"&gt;-&lt;/span&gt; Exclude emails where I only asked for simple confirmation ("Is this okay?") → move to Other
&lt;span class="p"&gt;-&lt;/span&gt; Exclude emails where I only provided information/deliverables with no expectation of a reply → move to Other
&lt;span class="p"&gt;-&lt;/span&gt; If mixed informational + action-request content, treat as &lt;span class="gs"&gt;**action-request**&lt;/span&gt;

&lt;span class="gs"&gt;**Response detection (per thread):**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Check Inbox for any inbound reply &lt;span class="gs"&gt;**after**&lt;/span&gt; my latest sent timestamp in that thread
&lt;span class="p"&gt;-&lt;/span&gt; Ignore OOO auto-replies for response detection
&lt;span class="p"&gt;-&lt;/span&gt; Mark as &lt;span class="gs"&gt;**"No response yet"**&lt;/span&gt; if no qualifying inbound reply exists
&lt;span class="p"&gt;-&lt;/span&gt; Mark as &lt;span class="gs"&gt;**"Responded – further action needed"**&lt;/span&gt; if an inbound reply exists AND that reply itself requests further action from me

&lt;span class="gs"&gt;**Prioritisation:**&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Sent items where I explicitly &lt;span class="gs"&gt;**@mentioned**&lt;/span&gt; a recipient (and requested action) — newest → oldest
&lt;span class="p"&gt;2.&lt;/span&gt; Sent items requesting action, &lt;span class="gs"&gt;**no response yet**&lt;/span&gt; — newest → oldest; same date → alphabetical by subject

&lt;span class="gs"&gt;**Internal vs External classification:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; If ANY recipient is outside my organisation's domain → &lt;span class="gs"&gt;**External**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Otherwise → &lt;span class="gs"&gt;**Internal**&lt;/span&gt;

&lt;span class="gs"&gt;**Output format:**&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📨 Immediate Action — Sent Items
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌐 External
&lt;/h3&gt;

&lt;h3&gt;
  
  
  🏢 Internal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Prefix @mention items with &lt;span class="gs"&gt;**‼️**&lt;/span&gt;. Numbering is continuous across External + Internal (do not restart).

For each item include: &lt;span class="gs"&gt;**Bold subject**&lt;/span&gt;, Recipient(s) summarised, My latest sent date/time (local), Response status, first ~10 words of my sent body as a snippet, one-line &lt;span class="gs"&gt;**Next step**&lt;/span&gt; (include what I asked for).

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📨 Action Required — Sent Items
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌐 External
&lt;/h3&gt;

&lt;h3&gt;
  
  
  🏢 Internal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📨 Other — Sent Items
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;All examined sent threads NOT included above: Recipient(s) – Subject – Sent date.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 3 — 💬 TEAMS: Unanswered Mentions (Lookback 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; Surface Teams conversations where I was mentioned and have not replied.

&lt;span class="gs"&gt;**Scope:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Scan all Teams chats and channels where my name was &lt;span class="gs"&gt;**@mentioned**&lt;/span&gt; in the lookback window
&lt;span class="p"&gt;-&lt;/span&gt; Exclude threads where I have replied &lt;span class="gs"&gt;**after**&lt;/span&gt; the mention
&lt;span class="p"&gt;-&lt;/span&gt; Exclude automated bot messages and system notifications

&lt;span class="gs"&gt;**Output format:**&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💬 Teams: Unanswered Mentions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
For each item: &lt;span class="gs"&gt;**Bold conversation/channel name**&lt;/span&gt;, Mentioned by (display name), Date/time (local), Message snippet (~10 words), one-line &lt;span class="gs"&gt;**Next step**&lt;/span&gt;.

If nothing qualifies: state explicitly.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 4 — 📊 LOOKBACK PRODUCTIVITY SUMMARY (Past 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; A concise, honest picture of how I spent my time and where I was most/least productive. Ground in Work IQ / Viva Insights data where available.

Produce the following sub-sections:

&lt;span class="gu"&gt;#### 4a. ⏱️ Time Distribution — How I Spent My Week&lt;/span&gt;

Analyse my calendar and meeting data for the past 7 days. Create meaningful categories that describe how I used my time (e.g., Deep Work, Internal Meetings, External Meetings, 1:1s, Admin &amp;amp; Planning, Learning, Unstructured/Fragmented time). For each category provide:
&lt;span class="p"&gt;-&lt;/span&gt; Category name and a one-line description
&lt;span class="p"&gt;-&lt;/span&gt; Estimated hours spent
&lt;span class="p"&gt;-&lt;/span&gt; Estimated % of working time
&lt;span class="p"&gt;-&lt;/span&gt; A brief assessment (e.g., "Well-balanced", "Potentially over-indexed", "Under-invested")

Present as a formatted table, then a short paragraph narrative.

&lt;span class="gu"&gt;#### 4b. 🏆 Key Wins &amp;amp; Decisions Made&lt;/span&gt;

List the 3–5 most significant outcomes, decisions, or deliverables completed in the past 7 days. Draw from email threads (closed action items), meeting notes/outcomes, and Teams conversations. Be specific and concise.

&lt;span class="gu"&gt;#### 4c. 🚧 Blockers &amp;amp; Escalations Identified&lt;/span&gt;

List items where progress stalled because I am waiting on others, or where a decision is overdue. Reference the relevant email/thread/meeting so I can act immediately.

&lt;span class="gu"&gt;#### 4d. 🔍 Collaboration &amp;amp; Interaction Highlights&lt;/span&gt;

Summarise the key people I collaborated with most intensely this week (internal and external). Note any collaboration patterns worth paying attention to (e.g., disproportionate time with one stakeholder, gaps in outreach to key contacts).

&lt;span class="gu"&gt;#### 4e. ⚠️ Distractions &amp;amp; Interruptions&lt;/span&gt;

Identify patterns that may have reduced focus time:
&lt;span class="p"&gt;-&lt;/span&gt; High volume of ad-hoc meeting invitations accepted
&lt;span class="p"&gt;-&lt;/span&gt; Fragmented calendar blocks (&amp;lt; 30 min between meetings)
&lt;span class="p"&gt;-&lt;/span&gt; High email response rate outside core hours
&lt;span class="p"&gt;-&lt;/span&gt; Teams message spikes during deep-work blocks

Provide 2–3 &lt;span class="gs"&gt;**concrete suggestions**&lt;/span&gt; to reduce these distractions next week.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 5 — 📝 MANAGER STATUS UPDATE DRAFT (Lookback 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; A ready-to-send (or lightly edited) status update for my manager.

Draw from Sections 1–4 to draft a concise update. Format as an email body (no subject line needed — I will add that). Structure it exactly as:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📝 Draft: Weekly Status Update for My Manager
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
&lt;span class="gs"&gt;**Key Wins this week:**&lt;/span&gt;
(3–5 bullet points — specific, outcome-focused)

&lt;span class="gs"&gt;**Decisions Made / Closed:**&lt;/span&gt;
(2–3 bullet points — include who was involved)

&lt;span class="gs"&gt;**Blockers Needing Your Input:**&lt;/span&gt;
(List only items where manager action or awareness is genuinely needed; be direct about what you need from them)

&lt;span class="gs"&gt;**Focus for Next Week:**&lt;/span&gt;
(3–5 bullet points — drawn from Section 6 below)

Keep the tone professional but conversational. Total length: 150–250 words.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 6 — 📅 UPCOMING WEEK: Meeting Preparation (Lookahead 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; Help me walk into next week fully prepared for every meeting that matters.

Analyse my calendar for the next 7 days. Apply the following classification:

&lt;span class="gu"&gt;#### Category A — Meetings I Organise (No Agenda Yet) ⚠️&lt;/span&gt;

List all meetings where I am the &lt;span class="gs"&gt;**organiser**&lt;/span&gt; and no agenda exists in the invite body. These need attention before the meeting. Sort by date (earliest first).

For each: &lt;span class="gs"&gt;**Bold meeting title**&lt;/span&gt;, Date/time (local), Attendees (summarised), one-line &lt;span class="gs"&gt;**Suggested agenda action**&lt;/span&gt; (e.g., "Draft and send agenda by [day]").

&lt;span class="gu"&gt;#### Category B — Meetings Where I Am Mentioned / Have Prep Tasks 📌&lt;/span&gt;

List meetings where I am &lt;span class="gs"&gt;**mentioned in the agenda**&lt;/span&gt; or where the invite body contains explicit tasks or action items assigned to me. Sort by date.

For each: &lt;span class="gs"&gt;**Bold meeting title**&lt;/span&gt;, Date/time (local), Organiser, the specific task or mention, one-line &lt;span class="gs"&gt;**Prep action**&lt;/span&gt;.

&lt;span class="gu"&gt;#### Category C — Other Relevant Meetings Requiring Attention 🔔&lt;/span&gt;

List any remaining meetings that do not fall into A or B but may still require my attention (e.g., strategic meetings, external client calls, presentations I am part of). &lt;span class="gs"&gt;**Exclude**&lt;/span&gt; routine recurring status meetings or check-ins unless I have a specific task.

For each: &lt;span class="gs"&gt;**Bold meeting title**&lt;/span&gt;, Date/time (local), Organiser, one-line &lt;span class="gs"&gt;**Why it matters / suggested prep**&lt;/span&gt;.

&lt;span class="gs"&gt;**Output heading:**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📅 Upcoming Week — Meeting Preparation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Category A: I Organise — No Agenda Yet
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Category B: I'm Mentioned / Have Prep Tasks
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Category C: Other Relevant Meetings
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
If a category is empty, state that explicitly.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 7 — 🗓️ UPCOMING WEEK: Time &amp;amp; Capacity Overview (Lookahead 7 days)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; Give me a forward-looking picture of how my time is allocated next week so I can spot imbalances before they happen.

Using my calendar for the next 7 days:
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**Estimated time in meetings**&lt;/span&gt; (hours and % of working week, assuming 40-hour week)
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Estimated free/focus time**&lt;/span&gt; available (hours and %)
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**Busiest day**&lt;/span&gt; and &lt;span class="gs"&gt;**lightest day**&lt;/span&gt;
&lt;span class="p"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**Any back-to-back meeting chains**&lt;/span&gt; (3+ consecutive meetings with &amp;lt; 15 min break) — flag these explicitly
&lt;span class="p"&gt;5.&lt;/span&gt; &lt;span class="gs"&gt;**Recommended focus blocks**&lt;/span&gt; — suggest 2–3 specific time slots (day + approximate time) where I should protect deep-work time based on my calendar gaps

Present as a short formatted summary with a brief planning recommendation at the end.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🗓️ Next Week — Capacity &amp;amp; Focus Planning
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### SECTION 8 — ✅ CONSOLIDATED PRIORITY LIST (Action Checklist)&lt;/span&gt;

&lt;span class="gs"&gt;**Purpose:**&lt;/span&gt; One place to see everything I need to do, ranked by urgency. This is the section I act from.

Aggregate all action items from Sections 1–6. De-duplicate any items that appear in multiple sections. Rank using this priority order:

| Priority | Source |
|---|---|
| 🔴 Urgent | @Mentioned emails/Teams not replied + Sent items with deadline risk + No-agenda meetings happening in &amp;lt; 48 hours |
| 🟠 High | Unread emails requiring reply + Awaiting responses blocking progress + Meeting prep for Category A &amp;amp; B |
| 🟡 Medium | Read-not-replied emails + Category C meetings + Manager update draft |
| 🟢 Low / This week | Everything else identified in the report |

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Consolidated Priority List — Week of [Date]
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
Provide a single numbered list across all priorities. Format each line as:

&lt;span class="sb"&gt;`[Priority emoji] **[Action title]** — Source: [Section ref] — Due/By: [date or "ASAP"]`&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## 🔒 FORMATTING &amp;amp; QUALITY RULES (apply globally)&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; All section headings must appear exactly as written above
&lt;span class="p"&gt;-&lt;/span&gt; Do not show full recipient/attendee lists — summarise (e.g., "3 recipients incl. [Name]")
&lt;span class="p"&gt;-&lt;/span&gt; Do not expose email addresses in output — use display names only
&lt;span class="p"&gt;-&lt;/span&gt; If a section has no qualifying items, state: &lt;span class="ge"&gt;*"Nothing to action here — you're clear."*&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Keep Next step recommendations to one line; be direct and specific (avoid vague verbs like "consider" or "look into")
&lt;span class="p"&gt;-&lt;/span&gt; Flag any data gaps (e.g., if Teams data is unavailable, note it and skip that section gracefully)
&lt;span class="p"&gt;-&lt;/span&gt; Total report should be scannable in under 10 minutes

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Work IQ (Microsoft's Viva Insights / Workplace Analytics layer) is what transforms this from a email summary into a genuine productivity intelligence report. Here's specifically what it unlocks for each section:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Section&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Without Work IQ&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;With Work IQ&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time Distribution (4a)&lt;/td&gt;
&lt;td&gt;Rough estimates from calendar titles alone&lt;/td&gt;
&lt;td&gt;Precise categorisation using meeting metadata, focus time signals, and collaboration patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distractions (4e)&lt;/td&gt;
&lt;td&gt;Generic observations&lt;/td&gt;
&lt;td&gt;Actual data: after-hours email spikes, fragmented calendar blocks, meeting-acceptance rates, quiet hours violations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Collaboration Highlights (4d)&lt;/td&gt;
&lt;td&gt;"You emailed these people"&lt;/td&gt;
&lt;td&gt;Network analysis — who you over-collaborated with, who went dark, whether key stakeholders are being neglected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blockers (4c)&lt;/td&gt;
&lt;td&gt;Based on email threads only&lt;/td&gt;
&lt;td&gt;Cross-referenced with task signals, missed response SLAs, and meeting outcomes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capacity Planning (7)&lt;/td&gt;
&lt;td&gt;Calendar gap counting&lt;/td&gt;
&lt;td&gt;Focus time recommendations grounded in your actual historical deep-work patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manager Update (5)&lt;/td&gt;
&lt;td&gt;Reconstructed from memory&lt;/td&gt;
&lt;td&gt;Drawn from verified activity data — wins and decisions have evidence behind them&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What This Prompt Does&lt;br&gt;
This is a single, scheduled intelligence briefing that runs every Sunday night and gives you a complete picture of the week behind you and the week ahead — without you having to open a single folder, scroll through a single inbox, or reconstruct anything from memory.&lt;br&gt;
In one automated run, it:&lt;br&gt;
Audits your Inbox — finds every thread that still needs action from you, ranked by urgency, with a suggested next step already written&lt;br&gt;
Audits your Sent Items — surfaces emails where you're waiting on someone else, so nothing you kicked off gets forgotten&lt;br&gt;
Scans Teams — catches any @mentions you haven't replied to, which are easy to miss when switching between channels&lt;br&gt;
Summarises your past week — time distribution, key wins, blockers, collaboration patterns, and distractions — so you arrive Monday with self-awareness, not guesswork&lt;br&gt;
Drafts your manager update — a ready-to-send status email built directly from your actual activity data, not from what you can remember on a Friday afternoon&lt;br&gt;
Prepares you for every meeting next week — flags which ones have no agenda (and you're the organiser), which ones have tasks assigned to you, and which ones are strategically important&lt;br&gt;
Maps your capacity — shows where your focus blocks are, where the back-to-back meeting chains are, and where to protect deep-work time before the week fills up&lt;br&gt;
Produces one consolidated action checklist — a single ranked to-do list (🔴🟠🟡🟢) you can open Monday morning and act from immediately&lt;br&gt;
The core idea is simple: you shouldn't have to do the triage yourself. The prompt does the triage; you do the thinking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Augment intelligence&lt;/strong&gt; i.e., you shouldn't have to do the triage yourself. The prompt does the triage; you do the thinking.&lt;/p&gt;

</description>
      <category>m365copilot</category>
      <category>workiq</category>
      <category>powerplatform</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>Transform Raw Data into Visual Insights in Copilot Studio with a Single Skill!</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 22 Jun 2026 05:42:44 +0000</pubDate>
      <link>https://dev.to/balagmadhu/transform-raw-data-into-visual-insights-in-copilot-studio-with-a-single-skill-1h25</link>
      <guid>https://dev.to/balagmadhu/transform-raw-data-into-visual-insights-in-copilot-studio-with-a-single-skill-1h25</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
Your agent is a data powerhouse. It connects to APIs, pulls reports, and processes complex queries. But too often, the output looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsp07oot0cmyl3nch2h35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsp07oot0cmyl3nch2h35.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the end users, this requires the user to actively parse, compare, and mentally visualize trends. &lt;/p&gt;

&lt;p&gt;Now with the new Copilot Studio Run time engine, we could leverage Skills to enable this visualisation. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Data Visualization &amp;amp; Response Formatting"&lt;/strong&gt;: SkillMd&lt;/p&gt;

&lt;p&gt;I've crafted a comprehensive SkillMd (a markdown-based skill definition) that you can drop directly into your Copilot Studio agent. This skill empowers your agent to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatically Detect Data&lt;/strong&gt;: When a response contains quantifiable data, the skill kicks in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smartly Select Charts&lt;/strong&gt;: It intelligently chooses the best chart type (Pie, Bar, Line, etc.) based on the data's structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Render Visuals&lt;/strong&gt;: It generates beautiful, interactive charts using Mermaid diagrams (which Copilot Studio supports natively!).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pair with Precision&lt;/strong&gt;: Every chart is accompanied by a precise markdown table for those who need exact figures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deliver Key Insights&lt;/strong&gt;: It summarizes the most important trends and observations in plain language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Propose Next Steps&lt;/strong&gt;: It proactively suggests follow-up questions for deeper analysis.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In essence, this skill turns numbers into narratives. Anytime the agent detects data worth seeing — not just reading — it renders the right chart, pairs it with a precise table, and explains what the numbers mean. It activates automatically, so analysts and leadership get visual-first answers without having to ask.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/bala-gopal/embed/myROqZr?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;markdown
&lt;span class="gh"&gt;# Skill: Data Visualization &amp;amp; Response Formatting&lt;/span&gt;

&lt;span class="gu"&gt;## Description&lt;/span&gt;

This skill enables the agent to render data points, metrics, and comparisons as &lt;span class="gs"&gt;**visual charts and graphs**&lt;/span&gt; alongside structured markdown tables. When a response involves quantifiable data (e.g., revenue, units, growth rates, period comparisons), the agent automatically selects the most appropriate chart type and renders it using supported formats such as &lt;span class="gs"&gt;**Mermaid diagrams**&lt;/span&gt;, &lt;span class="gs"&gt;**HTML/Chart.js snippets**&lt;/span&gt;, or &lt;span class="gs"&gt;**Python code blocks**&lt;/span&gt; (matplotlib/plotly) depending on the platform capabilities.&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## When this skill is activated:&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Identify that the user's query involves &lt;span class="gs"&gt;**quantifiable data points**&lt;/span&gt; (e.g., revenue, volume, rates, comparisons across periods or categories).
&lt;span class="p"&gt;2.&lt;/span&gt; Determine the &lt;span class="gs"&gt;**most appropriate chart type**&lt;/span&gt; based on the data structure (see Chart Selection Guide below).
&lt;span class="p"&gt;3.&lt;/span&gt; Render the chart using the best available format (Mermaid preferred for markdown environments).
&lt;span class="p"&gt;4.&lt;/span&gt; Accompany every chart with a &lt;span class="gs"&gt;**supporting markdown table**&lt;/span&gt; containing the exact figures for reference and accessibility.
&lt;span class="p"&gt;5.&lt;/span&gt; Provide a &lt;span class="gs"&gt;**"Key Insights"**&lt;/span&gt; section summarizing notable trends, highlights, or concerns in plain language.
&lt;span class="p"&gt;6.&lt;/span&gt; End with a &lt;span class="gs"&gt;**proactive follow-up question**&lt;/span&gt; offering the user a logical next step for deeper analysis.&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## Chart Selection Guide&lt;/span&gt;

| Data Scenario | Recommended Chart | When to Use |
|---|---|---|
| Comparing values across categories | &lt;span class="gs"&gt;**Bar Chart**&lt;/span&gt; (vertical) | 2–8 categories, single or dual metric |
| Showing change over time | &lt;span class="gs"&gt;**Line Chart**&lt;/span&gt; | 3+ time periods, trend identification |
| Showing proportion or share | &lt;span class="gs"&gt;**Pie / Donut Chart**&lt;/span&gt; | 2–6 categories, parts of a whole |
| Comparing two periods side by side | &lt;span class="gs"&gt;**Grouped Bar Chart**&lt;/span&gt; | Period-over-period comparison |
| Showing ranking or sorted performance | &lt;span class="gs"&gt;**Horizontal Bar Chart**&lt;/span&gt; | Ranking items by a single metric |
| Displaying distribution or variance | &lt;span class="gs"&gt;**Stacked Bar Chart**&lt;/span&gt; | Breakdown of a total across sub-categories |
| Single KPI or headline metric | &lt;span class="gs"&gt;**KPI Card (bold text block)**&lt;/span&gt; | One standout number with context |&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## Rendering Formats (Priority Order)&lt;/span&gt;

&lt;span class="gu"&gt;### 1. Mermaid Diagrams (Preferred)&lt;/span&gt;
Use Mermaid syntax for environments that support it. Wrap in a fenced code block with &lt;span class="sb"&gt;`mermaid`&lt;/span&gt; language tag.

&lt;span class="gs"&gt;**Bar Chart Example:**&lt;/span&gt;

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;mermaid
xychart-beta
    title "Sales by Category — Current vs Prior Period"
    x-axis ["Category A", "Category B"]
    y-axis "Value" 0 --&amp;gt; 100
    bar [64.5, 16.4]
    bar [67.9, 16.2]

&lt;span class="p"&gt;~~~&lt;/span&gt;plaintext

&lt;span class="gs"&gt;**Pie Chart Example:**&lt;/span&gt;

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;mermaid
pie title Share by Category — Current Period
    "Category A" : 54
    "Category B" : 31
    "Category C" : 15

&lt;span class="p"&gt;~~~&lt;/span&gt;plaintext

&lt;span class="gs"&gt;**Line Chart Example:**&lt;/span&gt;

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;mermaid
xychart-beta
    title "Performance Trend Over Time"
    x-axis ["Period 1", "Period 2", "Period 3", "Period 4", "Period 5", "Period 6"]
    y-axis "Value" 50 --&amp;gt; 90
    line [62.3, 68.1, 71.4, 65.9, 67.9, 70.2]

&lt;span class="p"&gt;~~~&lt;/span&gt;python

&lt;span class="gu"&gt;### 2. Python Code Blocks (Fallback)&lt;/span&gt;
If Mermaid is not supported, provide a ready-to-run Python code block using &lt;span class="sb"&gt;`matplotlib`&lt;/span&gt; or &lt;span class="sb"&gt;`plotly`&lt;/span&gt;.

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;python
import matplotlib.pyplot as plt

categories = ['Category A', 'Category B']
current = [64.5, 16.4]
prior = [67.9, 16.2]

x = range(len(categories))
width = 0.35

fig, ax = plt.subplots()
ax.bar([i - width/2 for i in x], current, width, label='Current Period', color='#1a1a1a')
ax.bar([i + width/2 for i in x], prior, width, label='Prior Period', color='#c4a35a')

ax.set_ylabel('Value')
ax.set_title('Performance — Current vs Prior Period')
ax.set_xticks(x)
ax.set_xticklabels(categories)
ax.legend()
plt.tight_layout()
plt.show()

&lt;span class="p"&gt;~~~&lt;/span&gt;html

&lt;span class="gu"&gt;### 3. HTML/Chart.js Snippet (Web Environments)&lt;/span&gt;
For web-based agent interfaces that render HTML.&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## Formatting &amp;amp; Style Rules&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Always pair a chart with a data table**&lt;/span&gt; — charts for quick visual insight, tables for exact numbers.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Chart titles**&lt;/span&gt; must clearly state: metric, period, and unit of measure (e.g., &lt;span class="ge"&gt;*"Revenue — Current vs Prior Period (USD)"*&lt;/span&gt;).
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Number formatting**&lt;/span&gt; in tables:
&lt;span class="p"&gt;  -&lt;/span&gt; Currency: &lt;span class="sb"&gt;`$XX,XXX,XXX`&lt;/span&gt; (with commas)
&lt;span class="p"&gt;  -&lt;/span&gt; Units: &lt;span class="sb"&gt;`XX,XXX`&lt;/span&gt; (with commas)
&lt;span class="p"&gt;  -&lt;/span&gt; Percentages: &lt;span class="sb"&gt;`+X.X%`&lt;/span&gt; or &lt;span class="sb"&gt;`-X.X%`&lt;/span&gt; (always show sign)
&lt;span class="p"&gt;  -&lt;/span&gt; Changes: prefix with &lt;span class="sb"&gt;`+`&lt;/span&gt; or &lt;span class="sb"&gt;`-`&lt;/span&gt; to indicate direction
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Key Insights**&lt;/span&gt; should be &lt;span class="gs"&gt;**2–4 bullet points**&lt;/span&gt;, each tied to a specific visual observation.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Follow-up suggestions**&lt;/span&gt; should guide toward deeper or adjacent analysis.&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## Examples&lt;/span&gt;

&lt;span class="gu"&gt;### Example 1: Multi-Category Period Comparison (Bar Chart + Table)&lt;/span&gt;

&lt;span class="gs"&gt;**User request:**&lt;/span&gt; &lt;span class="ge"&gt;*"Show me Category A and Category B results for the current period vs the prior period"*&lt;/span&gt;

&lt;span class="gs"&gt;**Expected behavior:**&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; The agent renders a **grouped bar chart** comparing both categories across the two periods, followed by a detailed table:&lt;/span&gt;

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;mermaid
xychart-beta
    title "Revenue — Current vs Prior Period"
    x-axis ["Category A", "Category B"]
    y-axis "Revenue" 0 --&amp;gt; 80
    bar [64.5, 16.4]
    bar [67.9, 16.2]

&lt;span class="p"&gt;~~~&lt;/span&gt;markdown
&lt;span class="gt"&gt;
&amp;gt; **Revenue Summary**&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | Category | Current Period | Prior Period | Change ($) | Change (%) |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; |----------|---------------|--------------|------------|------------|&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | Category A | $64,461,922 | $67,850,448 | -$3,388,526 | -5.0% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | Category B | $16,449,638 | $16,162,736 | +$286,901 | +1.8% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; **Key Insights**&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; - **Category A** declined 5.0% — visible in the chart as a shorter bar vs the prior period.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; - **Category B** grew modestly at +1.8%, nearly flat visually but positive momentum.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; *Would you like a deeper breakdown by sub-category or a trend view across multiple periods?*&lt;/span&gt;&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;### Example 2: Trend Over Time (Line Chart)&lt;/span&gt;

&lt;span class="gs"&gt;**User request:**&lt;/span&gt; &lt;span class="ge"&gt;*"Show me the performance trend for the last 6 periods"*&lt;/span&gt;

&lt;span class="gs"&gt;**Expected behavior:**&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; The agent renders a **line chart** showing the trajectory, followed by the data table:&lt;/span&gt;

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;mermaid
xychart-beta
    title "Performance Trend — Last 6 Periods"
    x-axis ["P1", "P2", "P3", "P4", "P5", "P6"]
    y-axis "Value" 50 --&amp;gt; 90
    line [62.3, 67.9, 70.2, 74.5, 68.1, 64.5]

&lt;span class="p"&gt;~~~&lt;/span&gt;markdown
&lt;span class="gt"&gt;
&amp;gt; | Period | Value | Period-over-Period Change (%) |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; |--------|-------|------------------------------|&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | P1 | $62,300,000 | — |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | P2 | $67,900,000 | +9.0% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | P3 | $70,200,000 | +3.4% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | P4 | $74,500,000 | +6.1% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | P5 | $68,100,000 | -8.6% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | P6 | $64,500,000 | -5.3% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; **Key Insights**&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; - Performance peaked in **P4** at $74.5M before declining for two consecutive periods.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; - The downward trend (-8.6% → -5.3%) suggests softening performance — worth investigating the underlying drivers.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; *Would you like me to overlay a forecast line or break this down by sub-category?*&lt;/span&gt;&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;### Example 3: Proportional Share (Pie Chart)&lt;/span&gt;

&lt;span class="gs"&gt;**User request:**&lt;/span&gt; &lt;span class="ge"&gt;*"What's the share breakdown by category for the current period?"*&lt;/span&gt;

&lt;span class="gs"&gt;**Expected behavior:**&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; The agent renders a **pie chart** showing proportional share:&lt;/span&gt;

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;mermaid
pie title Share by Category — Current Period
    "Category A" : 54
    "Category B" : 31
    "Category C" : 15
&lt;span class="p"&gt;~~~&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; | Category | Value | Share (%) |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; |----------|-------|-----------|&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | Category A | $285,400,000 | 54% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | Category B | $163,900,000 | 31% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | Category C | $79,300,000 | 15% |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; | **Total** | **$528,600,000** | **100%** |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; **Key Insights**&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; - **Category A** is the dominant contributor at 54% of the total.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; - **Category B** contributes nearly a third — any softness here materially impacts the overall number.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; *Would you like to see how this split has shifted compared to the prior period?*&lt;/span&gt;&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;### Example 4: Data Not Available&lt;/span&gt;

&lt;span class="gs"&gt;**User request:**&lt;/span&gt; &lt;span class="ge"&gt;*"Chart the margin breakdown for this segment"*&lt;/span&gt;

&lt;span class="gs"&gt;**Expected behavior:**&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; I'm sorry, margin data for that segment is not available in my current dataset. I can visualize **revenue** and **volume** breakdowns with charts and tables. Would that be helpful?&lt;/span&gt;&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## Notes&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; This skill activates &lt;span class="gs"&gt;**automatically**&lt;/span&gt; when the agent detects &lt;span class="gs"&gt;**2+ comparable data points**&lt;/span&gt; — the user does not need to explicitly request a chart.
&lt;span class="p"&gt;-&lt;/span&gt; For &lt;span class="gs"&gt;**single data points**&lt;/span&gt; with no comparison, use a &lt;span class="gs"&gt;**KPI-style bold text block**&lt;/span&gt; instead of a chart, and prompt the user for a comparison dimension.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Charts and tables are complementary**&lt;/span&gt; — never render a chart without an accompanying data table.
&lt;span class="p"&gt;-&lt;/span&gt; The &lt;span class="gs"&gt;**follow-up question**&lt;/span&gt; should guide toward a deeper or adjacent analysis, never repeating what was already shown.
&lt;span class="p"&gt;-&lt;/span&gt; When the rendering environment doesn't support Mermaid, fall back to Python code blocks with clear instructions.
&lt;span class="p"&gt;-&lt;/span&gt; All figures must be &lt;span class="gs"&gt;**grounded in source data**&lt;/span&gt; — never fabricate or estimate values to populate a chart.

plaintext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Empower your Copilot Studio agent with visual intelligence&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;In essence, this skill turns numbers into narratives. Anytime the agent detects data worth seeing — not just reading — it renders the right chart, pairs it with a precise table, and explains what the numbers mean. It activates automatically, so analysts and leadership get visual-first answers without having to ask.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F591pr01py38krcrl5oj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F591pr01py38krcrl5oj6.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pie title Revenue Composition (Q1–Q3 2026)
    "Software (£)" : 20000
    "Hardware (£)" : 12000
    "Services (£)" : 7500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>copilotstudio</category>
      <category>powerfuldevs</category>
      <category>powerplatform</category>
    </item>
    <item>
      <title>Navigating the New Copilot Studio: A "Good, Bad, and Nitty-Gritty" First Look</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Tue, 16 Jun 2026 07:23:00 +0000</pubDate>
      <link>https://dev.to/balagmadhu/navigating-the-new-copilot-studio-a-good-bad-and-nitty-gritty-first-look-1843</link>
      <guid>https://dev.to/balagmadhu/navigating-the-new-copilot-studio-a-good-bad-and-nitty-gritty-first-look-1843</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
The latest iteration of Copilot Studio has landed (announced last week at &lt;a href="https://news.microsoft.com/build-2026/" rel="noopener noreferrer"&gt;MSFT BUILD 26&lt;/a&gt;, promising a transformative experience in agent building. As with any significant overhaul, it brings a mix of innovation and growing pains. To objectively assess this new landscape, let's apply a simple, yet powerful, mental model: the Good, the Bad, and the Nitty-Gritty. This framework helps us highlight the triumphs, confront the challenges, and identify the essential, sometimes less glamorous, tasks required to move forward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highlights (The Good): Embracing the Future of AI Agents&lt;/strong&gt;&lt;br&gt;
The new Copilot Studio shines brightest with its underlying technological advancements and user-centric features designed to streamline agent development.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A Powerful New Orchestrator: At its heart lies a robust orchestrator, powered by Claude, boasting direct access to Bash, Python, and Node environments. This opens up a world of possibilities for complex scripting and integrations. It even comes pre-packed with built-in skills for handling common document types like Excel, CSV, PDF, DOCX, and PowerPoint extraction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intelligent Memory: A game-changer for conversational AI, the new Memory feature allows agents to recall user preferences and conversational context across multiple sessions. Imagine an agent that genuinely remembers your role or preferences, eliminating repetitive inputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Skills Creation: The new "Skills" concept is a powerful way to encapsulate agent capabilities. What's truly impressive is the ability to refine these skills through natural language prompting in the preview mode, with the agent automatically generating the necessary skill.md file. This democratizes complex agent programming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reimagined Workflows: Power Automate flows have evolved into "Workflows," offering sequenced actions, conditional branching, and loops. This not only provides a more structured way to build complex agent logic but also serves as the new, more organized home for triggering autonomous agents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced User Experience &amp;amp; Safety: The new Preview canvas now includes a helpful latency readout, giving developers real-time insights into agent response times. Furthermore, safety and moderation features have been improved with a wider, more granular range of levels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Effortless File Generation: The orchestrator's ability to generate downloadable HTML and Excel files directly from agent interactions, without requiring manual coding, is a testament to its advanced automation capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexible Knowledge Integration: While the direct Dataverse knowledge option is absent, the Dataverse MCP tool effectively fills the gap. The prominent "Public Websites" toggle ensures agents can access up-to-date information via Bing search, and the ability to upload unstructured PDFs as knowledge sources adds significant versatility.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Challenges (The Bad): Missing Pieces and Friction Points&lt;/strong&gt;:&lt;br&gt;
Despite its innovations, the Version 1 release of Copilot Studio presents some notable hurdles and missing functionalities that power users will undoubtedly feel.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Demise of "Topics": Perhaps the most significant "bad" news is the complete removal of "Topics." These were the bedrock of structured conversational trees, enabling pre-programmed messages and questions. Their absence creates a void for precise conversational control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loss of "Solution-First" Building: The new "New Agent" button immediately drops you into the build workspace, removing the initial option to select a solution and schema name. This can disrupt established development workflows for those who prioritize a structured project setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hidden &amp;amp; Relocated Features: The "Tools" section, once highly visible, is now less prominent. Environment selection has moved, and suggested prompts and settings are tucked deep within the settings menu, requiring more navigation to find.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limited Evaluation Options: The new "Evaluate" mode, while promising, currently only supports quick question sets and general quality testing, lacking the diverse metrics available in the classic experience. Debugging is also largely confined to the live preview window, with no separate activity history tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conversation Routing Limitations: The reliance on heavy natural language prompting for conversation routing, coupled with limited or broken Adaptive Card button selection, can make precise control challenging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specific Syntax for Skills: While powerful, the requirement for strictly lowercase/hyphen naming syntax for skills, and the absence of forward-slash shortcuts for linking assets, introduces minor friction points.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Missing Channel Integrations: Some familiar channel integrations, like SharePoint, are currently missing from the "Publish" dropdown.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No Inline Child Agents: The ability to create child agents that existed only within the context of a parent agent has been removed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Heavy Lifting Ahead&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Re-evaluating Conversational Design: For those heavily reliant on "Topics," the immediate "ugly" choices involve either reverting to the classic experience (and foregoing the new orchestrator's benefits) or the heavy lift of attempting to embed structured conversations directly into agent instructions and skills. There's a glimmer of hope that future "Workflows" might reintroduce similar node-based conversational control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Advocating for Change: The most critical "ugly" task falls on power users: submitting formal feedback and Design Change Requests (DCRs) to Microsoft. The author explicitly states this is crucial to ensure that essential functionalities return before general adoption. Your voice is vital.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adapting to New Paradigms: Users must embrace the new approach to skill creation—iteratively prompting the agent to refine capabilities and generate skill.md files. Similarly, understanding and leveraging the new "Workflows" feature is no longer optional but a fundamental part of building robust agents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rethinking Multi-Agent Architectures: With inline child agents gone, the "ugly" reality is a shift towards building standalone child agents and connecting them, or fully embracing "Skills" as the primary replacement for modularizing agent capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A Promising, Yet Evolving Platform&lt;/strong&gt;:&lt;br&gt;
The new Copilot Studio is a bold step forward, bringing powerful AI orchestration and intelligent features to the forefront. However, it's clearly a Version 1.0. While the "good" aspects promise an exciting future, the "bad" reveals areas of regression that demand attention. The "ugly" truth is that shaping this future requires users to roll up their sleeves, adapt to new paradigms, and actively provide feedback. By doing so, we can collectively help guide Copilot Studio into becoming the truly comprehensive and intuitive agent-building platform it aspires to be.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>powerplatform</category>
    </item>
    <item>
      <title>Beyond the Hype: How Millions of Employees Are Actually Using AI at Work</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 01 Jun 2026 22:57:12 +0000</pubDate>
      <link>https://dev.to/balagmadhu/beyond-the-hype-how-millions-of-employees-are-actually-using-ai-at-work-53d2</link>
      <guid>https://dev.to/balagmadhu/beyond-the-hype-how-millions-of-employees-are-actually-using-ai-at-work-53d2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
The paper, "AI in the Enterprise: How People Use M365 Copilot Chat," provides one of the clearest views yet into how artificial intelligence is being integrated into the daily workflows of millions of employees across more than a million companies, including nearly 70% of the Fortune 500. By analyzing a massive, anonymized dataset, researchers have moved beyond speculation to answer a critical question: how is AI really being used in the enterprise?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Are People Using AI For?&lt;/strong&gt;:&lt;br&gt;
The research team classified millions of user prompts into distinct "intents," revealing the most common ways people turn to their AI assistant. The analysis shows that two categories dominate, accounting for nearly 60% of all interactions: Information Inquiry (asking questions) and Content Refinement (editing and improving existing text)&lt;/p&gt;

&lt;p&gt;These are followed by other crucial work activities like generating new content, programming assistance, and analytical reasoning. The breakdown provides a clear hierarchy of how AI is augmenting the modern knowledge worker.&lt;/p&gt;

&lt;p&gt;A visual breakdown of M365 copilot usage &lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/bala-gopal/embed/qEqxPBB?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Perhaps the most significant finding is the "broad but uneven" pattern of adoption. Activities like Content Refinement are common across almost all occupations, suggesting that M365 Copilot is emerging as an "everyday assistant" that helps with the fundamental tasks of writing and editing, regardless of job title. On the other hand, usage becomes highly specialized depending on the profession. The data reveals sharp differences across industries and job families. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Programming Assistance is, unsurprisingly, concentrated among technical roles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some occupations now use Copilot more for Content Refinement than for basic Information Inquiry, indicating a shift in how they perceive the tool's value&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This dual nature shows AI acting as both a general-purpose utility and a powerful, role-specific specialist tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Next Frontier for AI in the Enterprise&lt;/strong&gt;&lt;br&gt;
The study also points to a potential evolution in user behavior: a subtle shift away from "chat as search." Researchers observed a 5% relative drop in the share of "Information Inquiry" over the 114-day study period, suggesting that as users become more sophisticated, they move beyond simple questions toward more complex content and communication-related work&lt;/p&gt;

&lt;p&gt;More importantly, the "uneven" adoption highlights the next frontier for AI. By comparing Copilot usage against the typical activities performed in the labor market, the researchers identified several "underrepresented" areas where AI is not yet widely used, despite being highly relevant. These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Documenting and Recording Information &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Work activities related to evaluating the quality or accuracy of data, particularly in the Banking industry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A significant portion of tasks common in the Consulting industry &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These gaps don't represent failures, but rather the largest opportunities for growth. As the technology matures and becomes more deeply embedded in workflows, these are the areas where AI is likely to make its next big impact.&lt;/p&gt;

&lt;p&gt;The study concludes that enterprise AI is past the "novelty stage" and has become a substantive part of day-to-day knowledge work. The story of AI at work is no longer about what it can do in principle, but what it is doing in practice—and where it will go next&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://arxiv.org/html/2605.23958v1" rel="noopener noreferrer"&gt;AI in the Enterprise: How People Use M365 Copilot Chat&lt;/a&gt;&lt;/p&gt;

</description>
      <category>githubcopilot</category>
      <category>aiatwork</category>
      <category>research</category>
      <category>m365copilot</category>
    </item>
    <item>
      <title>Prompt Engineering for Automated Evaluation: Making LLMs the Judge in AI Builder Solutions</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 25 May 2026 07:15:49 +0000</pubDate>
      <link>https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl</link>
      <guid>https://dev.to/balagmadhu/prompt-engineering-for-automated-evaluation-making-llms-the-judge-in-ai-builder-solutions-20pl</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
Automated evaluation is fast becoming a necessity as AI-driven agents proliferate across business processes. While accuracy and trust are always top of mind, manual review of agent responses simply doesn't scale. That’s where the idea of using a Large Language Model (LLM) as an impartial “judge” comes in—applying a purpose-built prompt to turn your LLM into a rigorous, step-by-step evaluator.&lt;br&gt;
I've previously experimented with extraction and evaluation frameworks which focused on structured data and document extraction. &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/balagmadhu/from-extraction-to-assuranceextraction-meets-evaluation-1od3" class="crayons-story__hidden-navigation-link"&gt;From Extraction to Assurance:Extraction Meets Evaluation&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/balagmadhu" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg" alt="balagmadhu profile" class="crayons-avatar__image" width="768" height="1024"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/balagmadhu" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Bala Madhusoodhanan
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Bala Madhusoodhanan
                
              
              &lt;div id="story-author-preview-content-2772835" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/balagmadhu" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg" class="crayons-avatar__image" alt="" width="768" height="1024"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Bala Madhusoodhanan&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/balagmadhu/from-extraction-to-assuranceextraction-meets-evaluation-1od3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 18 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/balagmadhu/from-extraction-to-assuranceextraction-meets-evaluation-1od3" id="article-link-2772835"&gt;
          From Extraction to Assurance:Extraction Meets Evaluation
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aibuilder"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aibuilder&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/powerautomate"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;powerautomate&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/powerplatform"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;powerplatform&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/balagmadhu/from-extraction-to-assuranceextraction-meets-evaluation-1od3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/balagmadhu/from-extraction-to-assuranceextraction-meets-evaluation-1od3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;However, this article is centered on a different challenge: evaluating conversational, Retrieval-Augmented Generation (RAG) based agents. &lt;/p&gt;

&lt;p&gt;Let me share a battle-tested evaluation prompt designed for these agents. Let me also break down the logic, metrics, and final grading criteria, along with sample input/output. This approach fits naturally into Power Platform AI Builder scenarios, enabling scalable, explainable, and reproducible evaluation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt&lt;/strong&gt;:&lt;br&gt;
This prompt is designed for rapid, scalable evaluation of AI responses based solely on the user’s question—prioritizing task relevance, clarity, professionalism, and formatting compliance. The clear rubric, required reasoning, and structured output make it ideal for automated testing and continuous improvement in conversational AI systems.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;**    &lt;br&gt;Characteristic    **&lt;/th&gt;
&lt;th&gt;**    &lt;br&gt;Description    **&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Evaluator Role&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;LLM is positioned as an impartial, expert critic to ensure   objectivity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Input Scope&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Strictly evaluates the AI response based only on the User   Question (no external gold standard/reference).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Metrics (Rubric)&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Four focused metrics:&lt;br&gt;   1. Task Fulfillment (1–5)&lt;br&gt;   2. Conciseness (1–5)&lt;br&gt;   3. Professional Tone (0/1)&lt;br&gt;   4. Formatting (0/1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Step-by-Step Reasoning&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Requires reasoning to be explained before each score,   enhancing transparency.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Scoring System&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Combination of graded (1–5) and binary (0/1) scoring for   nuanced yet decisive evaluation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Pass/Fail Gating&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Strict thresholds:&lt;br&gt;   - Task Fulfillment ≥ 4&lt;br&gt;   - Professional Tone = 1&lt;br&gt;   - Formatting = 1&lt;br&gt;   All must be met for PASS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Output Format&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Returns evaluation as a structured JSON object for easy   automation and integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Diagnostic Feedback&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Provides a one-sentence summary and, if FAIL, specifies   exactly which threshold(s) were breached.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Formatting Compliance&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;Explicitly checks if the response adheres to any   formatting instructions given in the user question.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;You are an impartial, expert Evaluation AI. Your task is to act as a "Critic" and evaluate an AI-generated response based strictly on the User Question provided.

You will evaluate the response across four specific metrics. For each metric, you must provide a brief step-by-step reasoning BEFORE assigning a score.

THE RUBRIC:

Metric 1: Task Fulfillment (Score: 1 to 5)
&lt;span class="p"&gt;*&lt;/span&gt; How well does the response address the specific User Question?
&lt;span class="p"&gt;*&lt;/span&gt; 5 = Comprehensive and perfectly tailored. 3 = Partially answers. 1 = Fails to address the question.

Metric 2: Conciseness (Score: 1 to 5)
&lt;span class="p"&gt;*&lt;/span&gt; Is the response highly efficient with its words?
&lt;span class="p"&gt;*&lt;/span&gt; 5 = Dense and to the point. 1 = Rambling, repetitive, or includes unnecessary fluff.

Metric 3: Professional Tone (Score: 0 or 1)
&lt;span class="p"&gt;*&lt;/span&gt; Is the tone strictly professional, objective, and helpful?
&lt;span class="p"&gt;*&lt;/span&gt; 1 = Pass. 0 = Fail (Emotional, sarcastic, overly informal, or rude).

Metric 4: Formatting (Score: 0 or 1)
&lt;span class="p"&gt;*&lt;/span&gt; Did the response follow any explicit formatting instructions requested by the user (e.g., "bullet points", "JSON", "short paragraph")?
&lt;span class="p"&gt;*&lt;/span&gt; 1 = Pass (or no formatting was requested). 0 = Fail (Explicit formatting instructions were ignored).

FINAL GRADING CRITERIA:
You must assign a final pipeline status of either "PASS" or "FAIL".
To achieve a "PASS", the report MUST meet ALL of the following conditions:
&lt;span class="p"&gt;-&lt;/span&gt; Task Fulfillment must be 4 or 5.
&lt;span class="p"&gt;-&lt;/span&gt; Professional Tone must be 1.
&lt;span class="p"&gt;-&lt;/span&gt; Formatting must be 1.

INPUT DATA:
&lt;span class="nt"&gt;&amp;lt;user_question&amp;gt;&lt;/span&gt;
{{USER_QUESTION}}
&lt;span class="nt"&gt;&amp;lt;/user_question&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;response_to_evaluate&amp;gt;&lt;/span&gt;
{{LLM_RESPONSE}}
&lt;span class="nt"&gt;&amp;lt;/response_to_evaluate&amp;gt;&lt;/span&gt;

OUTPUT FORMAT:
Output your evaluation strictly as a valid JSON object.
{
  "evaluation_report": {
    "metrics": {
      "task_fulfillment": {"reasoning": "...", "score": &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt; &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;},
      "conciseness": {"reasoning": "...", "score": &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt; &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;},
      "professional_tone": {"reasoning": "...", "score": &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt; &lt;span class="na"&gt;or&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;},
      "formatting": {"reasoning": "...", "score": &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt; &lt;span class="na"&gt;or&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;}
    },
    "summary": {
      "overall_verdict": "&lt;span class="nt"&gt;&amp;lt;One-sentence&lt;/span&gt; &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;",
      "pipeline_status": "&lt;span class="nt"&gt;&amp;lt;PASS&lt;/span&gt; &lt;span class="na"&gt;or&lt;/span&gt; &lt;span class="na"&gt;FAIL&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;",
      "failure_reason": "&lt;span class="nt"&gt;&amp;lt;If&lt;/span&gt; &lt;span class="na"&gt;FAIL&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt; &lt;span class="na"&gt;which&lt;/span&gt; &lt;span class="na"&gt;threshold&lt;/span&gt; &lt;span class="na"&gt;was&lt;/span&gt; &lt;span class="na"&gt;breached.&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;"
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;LLM Output&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evaluation_report"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"metrics"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"factual_consistency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"entity_fabrication"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"citation_traceability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"reference_alignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"task_fulfillment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"completeness"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"conciseness"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"overall_verdict"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The agent response matched all core criteria and was well-supported."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pipeline_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PASS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"failure_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Closing thoughts&lt;/strong&gt;:&lt;br&gt;
'&lt;u&gt;LLM-as-a-Judge&lt;/u&gt;' evaluation prompt is designed to automate the QA of our conversational agent. What I learned from this framework is highly valuable because it moves us beyond brittle, exact-word-match testing and allows for nuanced, semantic evaluation. &lt;/p&gt;

&lt;p&gt;By using a structured rubric, the Judge grades the agent’s responses against our 'gold standard' answers while strictly penalizing hallucinations, contradictions, and missing citations. Crucially, it outputs a deterministic, machine-readable JSON with a strict Pass/Fail threshold—meaning we can plug this directly into our automated testing pipeline to catch inaccurate or unsafe responses at scale before they ever reach the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference and Inspiration&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2411.15594" rel="noopener noreferrer"&gt;1 - A Survey on LLM-as-a-Judge&lt;/a&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2304.02554" rel="noopener noreferrer"&gt;2 - Human-like Summarization Evaluation with ChatGPT&lt;/a&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2308.04592" rel="noopener noreferrer"&gt;3 - Shepherd: A Critic for Language Model Generation&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.betterevaluation.org/sites/default/files/AES-2011-Rubric-Revolution-Davidson-Wehipeihana-McKegg-xx.pdf" rel="noopener noreferrer"&gt;4 - The Rubric Revolution&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PS - In the next article, I’ll show how we integrated this evaluation approach into a Power Automate Cloud Flow, enabling automated, real-time agent assessment with zero manual intervention.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aibuilder</category>
      <category>powerplatform</category>
      <category>evaluation</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>The Chimp Paradox - Prof Steve Peters</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Tue, 19 May 2026 22:16:10 +0000</pubDate>
      <link>https://dev.to/balagmadhu/the-chimp-paradox-prof-steve-peters-3mhj</link>
      <guid>https://dev.to/balagmadhu/the-chimp-paradox-prof-steve-peters-3mhj</guid>
      <description>&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/bala-gopal/embed/WbvvBbq?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>books</category>
    </item>
    <item>
      <title>How One Setting Transforms Your Bot's UX: Unveiling Copilot Studio's Latency Message</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 11 May 2026 05:50:00 +0000</pubDate>
      <link>https://dev.to/balagmadhu/how-one-setting-transforms-your-bots-ux-unveiling-copilot-studios-latency-message-ic1</link>
      <guid>https://dev.to/balagmadhu/how-one-setting-transforms-your-bots-ux-unveiling-copilot-studios-latency-message-ic1</guid>
      <description>&lt;p&gt;A few weeks ago in my Bite-Sized Wizardry series, I explored the common challenge of nandling Lingering Conversations Gracefully in Microsoft Copilot Studio specially with classic orchestration.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i" class="crayons-story__hidden-navigation-link"&gt;Stop the Awkward Silence: Signals to Classic Orchestration&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/balagmadhu" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg" alt="balagmadhu profile" class="crayons-avatar__image" width="768" height="1024"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/balagmadhu" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Bala Madhusoodhanan
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Bala Madhusoodhanan
                
              
              &lt;div id="story-author-preview-content-3309575" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/balagmadhu" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F941014%2F4eda2ca2-581c-43f5-911a-8a7d28bff462.jpeg" class="crayons-avatar__image" alt="" width="768" height="1024"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Bala Madhusoodhanan&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i" id="article-link-3309575"&gt;
          Stop the Awkward Silence: Signals to Classic Orchestration
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/copilotstudio"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;copilotstudio&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/powerfuldevs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;powerfuldevs&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/powerplatform"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;powerplatform&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;At the time, I focused on building custom workarounds. However, whether it was a feature I missed or one that has been recently enhanced, I've since found a built-in piece of magic that directly addresses this: the Latency Message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Cast the Spell&lt;/strong&gt;: &lt;br&gt;
Find the Latency Message Section With the node selected, look at its properties pane on the right-hand side of the screen. Scroll down until you find the section titled Latency Message, just like the one highlighted in the screenshot. Check the box next to Send a message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmfwi1hoz3sf6qnhl9pi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmfwi1hoz3sf6qnhl9pi.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the text field that appears, type the reassuring message you want your users to see while they wait.&lt;/p&gt;

&lt;p&gt;Some powerful incantations include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Just a moment while I consult the archives..."
"Let me look that up for you..."
"Searching our knowledge base now, please wait..."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it! The copilot will now automatically display this message while the action is in progress.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Latency Message&lt;/strong&gt; is a perfect example of a low-effort, high-impact feature. It doesn't change what your bot does, but it fundamentally improves how it feels to interact with.&lt;br&gt;
By providing this simple piece of feedback, you transform your copilot from a simple tool into a polished, professional, and genuinely conversational assistant.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>powerplatform</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>The Choice Column Conundrum:A Data Migrator's Essential Tip</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Tue, 28 Apr 2026 17:13:54 +0000</pubDate>
      <link>https://dev.to/balagmadhu/the-choice-column-conundruma-data-migrators-essential-tip-4ba5</link>
      <guid>https://dev.to/balagmadhu/the-choice-column-conundruma-data-migrators-essential-tip-4ba5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
This week we are diving into a common scenario that often leaves even seasoned data professionals scratching their heads: handling choice columns during data migration or integration. We have built an amazing Power App or Power Automate flow, and your users are happily selecting options from choice fields. But then, it's time to export that data, maybe for reporting, analysis, or migration to another environment. And that's when the "aha!" moment hits – instead of the friendly text labels your users see, you're looking at a spreadsheet full of cryptic numbers. What gives?&lt;/p&gt;

&lt;p&gt;The truth is, Dataverse (the underlying data service for Power Apps) stores choice options as integer values, not the user-friendly text labels. These labels are merely a display layer for the end-user experience. When you export data directly from Dataverse or through certain connectors, you're often getting these raw integer values.&lt;br&gt;
However, it presents a significant hurdle when you need to provide human-readable data or ensure smooth re-import into another system where labels might be expected. Imagine trying to explain a report filled with "100,000,000" and "100,000,001" to a business user instead of "Active" and "Inactive." Or worse, attempting to import data with labels into a system that expects specific integer values. It's a recipe for errors, frustration, and extra manual work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET {{EnvironmentURL}}/api/data/v9.2/EntityDefinitions(LogicalName='YourEntityName')/Attributes/Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata?$select=LogicalName&amp;amp;$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flij30fmz6k3q3mcyn57r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flij30fmz6k3q3mcyn57r.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By proactively fetching and utilizing the choice column metadata via the Dataverse Web API, you empower your data migration and integration processes to be robust, accurate, and truly user-friendly. No more guessing games with numbers – just seamless, readable data every time!&lt;/p&gt;

</description>
      <category>dataverse</category>
      <category>powerplatform</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>Same as Ever - Morgan Housel</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 20 Apr 2026 17:58:52 +0000</pubDate>
      <link>https://dev.to/balagmadhu/same-as-ever-morgan-housel-312g</link>
      <guid>https://dev.to/balagmadhu/same-as-ever-morgan-housel-312g</guid>
      <description>&lt;p&gt;The book’s core idea is simple yet profound: to understand the future, we must look at the things that never change. The author explores the timeless patterns of human behavior—our relationship with risk, greed, happiness, and storytelling—arguing that these constants are the most powerful forces shaping our lives, the economy, and history itself.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/bala-gopal/embed/LEpOWyZ?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The book provides a mental framework that is both calming and incredibly practical. In a world obsessed with unprecedented events and new technologies, this book encourages you to zoom out and focus on the fundamentals of human nature.&lt;br&gt;
It’s a must-read for anyone who wants to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make better decisions by understanding the predictable ways people react under pressure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reframe your relationship with risk and accept that the biggest threats are often the ones we can't see coming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find more durable paths to happiness by managing expectations rather than just chasing success.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Become a better communicator by recognizing that compelling stories, not just data, are what truly move people.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>books</category>
      <category>humanbehavior</category>
    </item>
  </channel>
</rss>
