<?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>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>
    <item>
      <title>How Conversation Memory Improves Conversation experience</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 13 Apr 2026 04:55:33 +0000</pubDate>
      <link>https://dev.to/balagmadhu/how-conversation-memory-improves-conversation-experience-19g8</link>
      <guid>https://dev.to/balagmadhu/how-conversation-memory-improves-conversation-experience-19g8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
Introduction Better search queries and prefer? carefully chosen keywords are essential when building Reliably Retrieval-Augmented Generation (RAG) agents in Copilot Studio. LLMs are powerful, but their outputs depend heavily on the information they retrieve at runtime: if the retrieval is off—because the query is vague or lacks domain context—the LLM can hallucinate, produce irrelevant results, or miss critical legal/regulatory nuance. Well-formed queries minimize hallucinations, improve retrieval precision, reduce wasted compute, and maintain context across multi-turn conversations. This post describes a small experiment comparing retrieval query quality with conversation memory enabled versus disabled and synthesizes practical takeaways for Copilot Studio users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experimental setup&lt;/strong&gt; &lt;br&gt;
&lt;u&gt;Goal&lt;/u&gt;: Test how including conversation history (memory) affects the search queries that the query-generation component produces and therefore the relevance of retrieved RAG documents.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Source / domain used in evaluation&lt;/u&gt;: legal/regulatory text (example: EU AI Act) — representative of domains that rely on precise terminology and structured references.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/balagmadhu/beyond-vector-search-building-a-reasoning-engine-in-copilot-studio-3imp" class="crayons-story__hidden-navigation-link"&gt;Beyond Vector Search: Building a "Reasoning Engine" in Copilot Studio&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"&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-3312498" 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=""&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/beyond-vector-search-building-a-reasoning-engine-in-copilot-studio-3imp" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 17&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/beyond-vector-search-building-a-reasoning-engine-in-copilot-studio-3imp" id="article-link-3312498"&gt;
          Beyond Vector Search: Building a "Reasoning Engine" in Copilot Studio
        &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/systemdesign"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;systemdesign&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/beyond-vector-search-building-a-reasoning-engine-in-copilot-studio-3imp" 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/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&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/beyond-vector-search-building-a-reasoning-engine-in-copilot-studio-3imp#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;
            32 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;&lt;u&gt;RAG platform&lt;/u&gt;: Copilot Studio (using the "Create search query" component that builds queries from user input + optional conversation history).&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%2Fsm321lnvz10nmaag1abg.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%2Fsm321lnvz10nmaag1abg.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Two configurations&lt;/u&gt;:&lt;br&gt;
Memory ON: include 3 past messages from the current conversation in the query-generation step.&lt;br&gt;
Memory OFF: do not include conversation history (fresh query from each user message).&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Interaction thread used (Startup Journey) — five turns&lt;/u&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We're building an AI tool that screens job applicants' CVs. Does the EU AI Act apply to us?&lt;/li&gt;
&lt;li&gt;You mentioned it's high-risk. What exactly does that mean for us in practice?&lt;/li&gt;
&lt;li&gt;What documents do we need to prepare before we can launch?&lt;/li&gt;
&lt;li&gt;Who needs to sign off on that documentation — us or a third party?&lt;/li&gt;
&lt;li&gt;And what happens if we launch without doing any of this?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Observations&lt;/strong&gt;:&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;Scenario&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;*&lt;em&gt;Question *&lt;/em&gt;
&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Key Word Search&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Search Query&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Memory with 3 past messages   from the current conversation's history to include.&lt;/td&gt;
&lt;td&gt;"We're building an AI tool   that screens job applicants' CVs. Does the EU AI Act apply to us?"&lt;/td&gt;
&lt;td&gt;EU AI Act applicability AI tool screening job applicants CVs&lt;/td&gt;
&lt;td&gt;We're building an AI tool that   screens job applicants' CVs. Does the EU AI Act apply to our tool?&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory with 3 past messages   from the current conversation's history to include.&lt;/td&gt;
&lt;td&gt;"You mentioned it's high-risk. What exactly does that   mean for us in practice?"&lt;/td&gt;
&lt;td&gt;EU AI Act high-risk requirements CV screening practical   implications&lt;/td&gt;
&lt;td&gt;You mentioned that our AI tool   for screening job applicants' CVs would be considered high-risk under the EU   AI Act. What does being classified as high-risk mean for us in practical   terms?&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory with 3 past messages   from the current conversation's history to include.&lt;/td&gt;
&lt;td&gt;What documents do we need to prepare before we can launch?&lt;/td&gt;
&lt;td&gt;Required documents high-risk AI tool EU AI Act launch&lt;/td&gt;
&lt;td&gt;What documents do we need to   prepare before launching our high-risk AI tool for screening job applicants’   CVs under the EU AI Act?&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory with 3 past messages   from the current conversation's history to include.&lt;/td&gt;
&lt;td&gt;"Who needs to sign off on that documentation — us or a third   party?"&lt;/td&gt;
&lt;td&gt;EU AI Act high-risk AI documentation sign off provider third   party&lt;/td&gt;
&lt;td&gt;Who is responsible for signing   off on the required documentation for launching a high-risk AI tool under the   EU AI Act—do we, as the provider, need to approve it ourselves, or does a   third party need to be involved?&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory with 3 past messages   from the current conversation's history to include.&lt;/td&gt;
&lt;td&gt;And what happens if we launch without doing any of this?&lt;/td&gt;
&lt;td&gt;EU AI Act consequences launch high-risk AI tool without   documentation compliance&lt;/td&gt;
&lt;td&gt;What are the consequences if we   launch our high-risk AI tool for CV screening without preparing the required   documentation and compliance steps under the EU AI Act?&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No memory&lt;/td&gt;
&lt;td&gt;"We're building an AI tool   that screens job applicants' CVs. Does the EU AI Act apply to us?"&lt;/td&gt;
&lt;td&gt;EU AI Act applicability AI tool screening job applicants CVs&lt;/td&gt;
&lt;td&gt;We are developing an AI tool   that screens job applicants' CVs. Does the EU AI Act apply to our project?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No memory&lt;/td&gt;
&lt;td&gt;"You mentioned it's high-risk. What exactly does that   mean for us in practice?"&lt;/td&gt;
&lt;td&gt;high-risk meaning practical implications&lt;/td&gt;
&lt;td&gt;You mentioned it's high-risk.   What exactly does "high-risk" mean for us in practice?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No memory&lt;/td&gt;
&lt;td&gt;What documents do we need to prepare before we can launch?&lt;/td&gt;
&lt;td&gt;documents needed prepare before launch&lt;/td&gt;
&lt;td&gt;What documents do we need to   prepare before we can launch?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No memory&lt;/td&gt;
&lt;td&gt;"Who needs to sign off on that documentation — us or a third   party?"&lt;/td&gt;
&lt;td&gt;documentation sign off responsible us third party approval&lt;/td&gt;
&lt;td&gt;Who is responsible for signing   off on that documentation—do we need to sign it ourselves, or does a third   party need to provide approval?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No memory&lt;/td&gt;
&lt;td&gt;And what happens if we launch without doing any of this?&lt;/td&gt;
&lt;td&gt;consequences launch without preparation risks&lt;/td&gt;
&lt;td&gt;What are the potential   consequences if we proceed with the launch without completing any of the   recommended steps or preparations?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key analysis &amp;amp; characteristics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Domain anchoring&lt;/u&gt;: When conversation context (e.g., topic, dataset, or domain) is preserved, subsequent queries stay focused on the same subject. Without that anchor, later turns drift toward generic wording and can retrieve off-topic material.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Pronoun &amp;amp; reference resolution&lt;/u&gt;: Memory enables the system to resolve implicit references (“it”, “that document”, “the tool”) into concrete entities tied to the ongoing conversation. Without memory, follow-ups become ambiguous and require the user to restate context.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Terminology carry-over&lt;/u&gt;: Repeating or preserving precise domain vocabulary (technical terms, roles, artifacts) across turns improves the chance that retrieval will match indexed content. If history isn’t included, these specific terms tend to drop out and be replaced by vague synonyms.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Query specificity and evolution&lt;/u&gt;: With memory, queries often become richer and more targeted as the dialog proceeds (the model can refine intent). Without memory, query specificity typically decays over turns, reducing retrieval precision.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Retrieval precision and downstream quality&lt;/u&gt;: Because retrieval is the upstream signal for generation, better-focused queries produce higher-quality retrieved items; that in turn reduces hallucinations and improves final answer accuracy.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Degradation pattern&lt;/u&gt;: Conversations that rely on assumed context show a consistent decay in query usefulness when history is excluded — the further from the initial turn, the weaker the query signal.&lt;/li&gt;
&lt;/ul&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;Memory    Included&lt;/th&gt;
&lt;th&gt;
&lt;br&gt;No    Memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Domain   anchoring&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;✅ Persistent across turns&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;❌ Lost after initial message&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Pronoun   &amp;amp; reference resolution&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;✅ Resolved to concrete entities&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;❌ Remains ambiguous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Terminology   preservation&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;✅ Specific terms persist&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;❌ Specific terms drop out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Query   specificity&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;✅ Becomes more focused / refined&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;📉 Becomes generic over turns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Retrieval   precision (expected)&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;✅ Higher, more relevant results&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;⚠️ Lower, more irrelevant results&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;Downstream   generation quality&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;✅ More accurate, fewer   hallucinations&lt;/td&gt;
&lt;td&gt;
&lt;br&gt;⚠️ Prone to errors and omissions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Closing Remarks:&lt;br&gt;
Memory (or otherwise preserving context) is a practical lever for improving RAG systems in any domain that relies on precise language or multi‑turn interaction. If your application requires follow-ups, conditional reasoning, or references to previously introduced entities, include a small, targeted history window (or re-anchor the context manually) so the query generator can produce focused searches. For robust evaluation, instrument metrics such as precision, relevance ratings, and hallucination frequency; vary the history window to observe the tradeoff between context usefulness and prompt/token cost. &lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>powerfuldevs</category>
      <category>powerplatform</category>
      <category>ai</category>
    </item>
    <item>
      <title>Is Your Code Eco-Friendly? A proxy to understand Carbon Impact</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Tue, 07 Apr 2026 08:32:57 +0000</pubDate>
      <link>https://dev.to/balagmadhu/is-your-code-eco-friendly-a-proxy-to-understand-carbon-impact-2jlf</link>
      <guid>https://dev.to/balagmadhu/is-your-code-eco-friendly-a-proxy-to-understand-carbon-impact-2jlf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
We spend countless hours optimizing for performance, scalability, and user experience. But how often do we consider the environmental impact of the code we write? As AI payloads grow and data flows increase, every API call, every byte transferred, contributes to a larger digital footprint. It's time we started thinking about the carbon cost of our digital endeavors.&lt;br&gt;
This isn't about guilt-tripping; it's about awareness and providing you with a practical way to quantify something often overlooked. What if you could estimate the CO₂ emissions generated by a simple API request? You can, and it's simpler than you might think, thanks to some clever open-source work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Code Snippet&lt;/strong&gt;:&lt;br&gt;
The calculation utilizes the &lt;a href="https://www.thegreenwebfoundation.org/co2-js/" rel="noopener noreferrer"&gt;co2.js library&lt;/a&gt; , maintained by The Green Web Foundation, relying on their 1byte Model (Sustainable Web Design model). &lt;/p&gt;

&lt;p&gt;Here's what's happening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Byte Counting&lt;/strong&gt;: The browser takes the JSON you're sending to and receiving from the API. It converts them to raw text strings and uses the native Blob API to count the exact bytes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Energy Estimation &amp;amp; Carbon Conversion&lt;/strong&gt;: The co2.js library takes that total byte count and estimates the electricity needed to move that data, then converts it to grams of CO₂ equivalent (CO₂e) based on a global average carbon intensity for the electrical grid.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's crucial to understand that co2.js doesn't magically know the exact location of every server or the real-time power consumption of your user's device. Instead, it uses a highly researched framework called the Sustainable Web Design (SWD) model as a proxy for these complex realities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Global Average Carbon Intensity&lt;/em&gt;: By default, the model assumes a global average grid intensity (historically around 442 grams of CO₂ per kilowatt-hour). If you know your data center uses renewable energy, you can provide a more specific, lower intensity value to the library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Heuristics for Energy Distribution&lt;/em&gt;: Since we can't measure power physically at every point, the SWD model employs fixed heuristics (percentages) to distribute the total estimated energy (in kWh) across four key areas:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;End-User Device (52%)&lt;/em&gt;: This accounts for the energy used by the user's phone or laptop to process and display the data.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Hardware Production (19%)&lt;/em&gt;: The "embodied carbon" – the energy consumed in manufacturing the devices and infrastructure used.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Data Center (15%)&lt;/em&gt;: The electricity powering servers and cooling systems.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Network (14%)&lt;/em&gt;: Energy for routers, switches, cell towers, and cables that transmit data.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;This means that a significant portion of the "carbon impact" we're calculating is attributed to the end-user's device and the embodied carbon of hardware – aspects we often don't consider when thinking about "server-side" impact. It's a holistic view of the entire digital data lifecycle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;module&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;co2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://esm.sh/@tgwf/co2@latest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// 2. Initialize the estimator using the Sustainable Web Design "1byte" model&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;co2Estimator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;co2&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1byte&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateApiImpact&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 3. Define the data you are sending&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;requestPayload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Latest fashion trends&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;standard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="c1"&gt;// (Simulate an API call here)&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;responsePayload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; 

    &lt;span class="c1"&gt;// 4. Calculate the exact byte size of the data using the native Blob API&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reqBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Blob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;requestPayload&lt;/span&gt;&lt;span class="p"&gt;)]).&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Blob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;responsePayload&lt;/span&gt;&lt;span class="p"&gt;)]).&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;totalBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;reqBytes&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;resBytes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// 5. Calculate the carbon footprint&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;emissionsGrams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;co2Estimator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perByte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalBytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sizeInKB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalBytes&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Output the results&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`📦 Data Transferred: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;sizeInKB&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; KB`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`🌱 Carbon Impact: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;emissionsGrams&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt; grams CO₂e`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;calculateApiImpact&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;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;
While this calculation is a proxy, it's a powerful one. It provides a tangible number that allows us to start quantifying and discussing the environmental impact of our code. The next time you're designing an API, consider the size of your payloads. A seemingly small optimization, like reducing the data transferred in a common API call, can have a cumulative positive effect on our collective carbon footprint.&lt;br&gt;
Every byte counts&lt;/p&gt;

</description>
      <category>sustainability</category>
      <category>javascript</category>
      <category>softwareengineering</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop the Awkward Silence: Signals to Classic Orchestration</title>
      <dc:creator>Bala Madhusoodhanan</dc:creator>
      <pubDate>Mon, 30 Mar 2026 06:30:30 +0000</pubDate>
      <link>https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i</link>
      <guid>https://dev.to/balagmadhu/stop-the-awkward-silence-signals-to-classic-orchestration-129i</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;:&lt;br&gt;
If you’ve used generative orchestration in Copilot Studio, you’ve seen the comforting “thinking” animation while the copilot works. Classic orchestration doesn’t do that out of the box. So when you kick off a longer task—like a RAG lookup or a flow call—the chat can look empty. No typing dots. Just silence.&lt;br&gt;
That silence is a UX bug, not a feature. The fix is quick: send a Typing event immediately before the slow step, then add a short acknowledgement message to set expectations.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Locate the slow step or Topic where you have user feedback on the poor UX expereince (May be based on the user activity we might have logic  where the heavy work starts: Create generative answers, a flow, or an HTTP/API call.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-send-event-activities" rel="noopener noreferrer"&gt;Event type&lt;/a&gt; to Typing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The example below the timer is set as 2100 ( milliseconds) &lt;br&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%2F9uohhbyjrbcvwzv84sm5.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%2F9uohhbyjrbcvwzv84sm5.png" alt=" " width="800" height="957"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add a brief acknowledgement message Right after the Typing event, add a normal message to set expectations. Keep it human and specific:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“Got it — searching our knowledge base. This may take a few seconds.”
“Working on your request — I’ll be right back with the details.”
&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%2Fmedia0.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExeHFpZDN3Mm9vYmY5ZWFia3h3ZGJldTVqMXhrcGJ3anVrMDA4bmgycyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FzF4JPydyYJwngi8Vru%2Fgiphy.gif" 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%2Fmedia0.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExeHFpZDN3Mm9vYmY5ZWFia3h3ZGJldTVqMXhrcGJ3anVrMDA4bmgycyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FzF4JPydyYJwngi8Vru%2Fgiphy.gif" width="480" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good UX patterns to include&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Time cue&lt;/u&gt;: “This usually takes ~5–10 seconds.” It sets expectations and reduces anxiety.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Specific context&lt;/u&gt;: “Checking SAP invoices…” feels more reassuring than generic “Working…”&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Channel-aware&lt;/u&gt;: Typing events are short-lived (around 2-4 seconds). Always send an acknowledgement text so users see something even if the channel ignores Typing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Closing Notes&lt;/strong&gt;:&lt;br&gt;
A great bot isn’t just smart — it’s considerate. In classic orchestration, adding a Typing event plus a short acknowledgement transforms a “silent” wait into a clear, reassuring experience. It takes less than a minute to wire up and pays off immediately in user confidence and perceived speed.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>powerfuldevs</category>
      <category>powerplatform</category>
    </item>
  </channel>
</rss>
