Loop Integration
in Teams Chat

Seamless Loop integration for dynamic collaboration in Teams

Role

Lead designer

Year

2024

Platforms

Teams on Desktop
Teams on Web

Teams

Teams Framework
Loop
This is some text inside of a div block.

OVERVIEW

Loop is a flexible, collaborative workspace that enables users to create and co-author dynamic content, which update in real-time across Microsoft 365 apps.

The integration of Loop into the chat app of Teams resolves key pain points from earlier iterations, where Loop felt like a third-party plugin and lacked adequate screen real estate for effective collaboration. This limitation often drove users to leave Teams and access Loop in their browser, resulting in context switching and a fragmented user experience.

This is some text inside of a div block.
This is some text inside of a div block.

The million dollar question

How might we make collaboration in Loop feel seamless within Teams?

USER PAIN POINTS

I conducted a user study with internal Microsoft employees and scoured our customer feedback portal (OCV) to observe real workflows. As a result, I gained a deeper understanding of how users interact with Loop components in Teams, where friction arises, and how these challenges impact collaboration.

TLDR...

Current Loop integration into Teams chat burdens collaboration with unnecessary friction.

This is some text inside of a div block.

INSUFFICIENT SPACE TO WORK

Loop within Teams chat is confined to a chat bubble, making it challenging to view all your content, especially when there are rich components like tables.

Messy File Management

Files are thrown into a shared tab in chat, which has lackluster organization and management tools, making it difficult to find an existing Loop once it is sent.

NO designated Collab Space

Chats have a designated space for companion experiences, like Copilot, but lacks a persistent collab space, causing scattered workflows across various Loop pages and M365 documents.

Fragmented Design Language

Loop has a separate design language from Teams, which makes it feel visually disjointed and more like a 3rd party surface rather than native to Teams.

The Proposal

Lightning Loop ⚡️

What if Loop could transform from a standalone tool into a cohesive, fully embedded feature? This required aligning its design with Teams’ frameworks, ensuring visual and functional harmony through the following principles:

Seamless collaboration

Support both real-time and asynchronous collaboration without context switching.

Cohesive and coherent

Feel like a natural extension of Teams, ensuring a familiar and intuitive experience.

Simple by Default, powerful on demand

Support diverse workflows with a clean focused UX that scales in functionality.

We named this concept Lightning Loop (aka LLoop), which is a modular canvas anchored to a singular chat for only its members. Now users have a designated collaboration space for each chat, which is easily accessible and provides the necessary space to get work done.

While the LLoop itself can’t be shared outside the chat, it’s built with Loop components — bite sized pieces of content that remain shareable.

But, where should Lightning Loop live within chat?

LOOP AS A TAB

Loop is added as a persistent tab in the chat header, which designates Loop as a main canvas experience.

PROS

✅ Easily accessible
✅ Plenty of space to get work done
✅ Gets to be the primary experience

CONS

❌ Feels separated
❌ Results in context switching
❌ Tabs receive little engagement

LOOP AS A CONTEXTUAL PANE

Loop is added as a contextual pane (right rail), allowing for a side-by-side companion experience to chat.

PROS

✅ Synchronous collab
✅ Inline multitasking
✅ Pane stays open for easier re-engagement

CONS

❌ Hard to use at the default width
❌ Limited to companion experience

What are user needs for Lightning loop?

We conducted a user research study with 12 internal Microsoft participants to evaluate user needs with LLoop as a collaboration tool and preferences for accessing Loop inline to chat versus as a separate tab in the header. It boiled
down to this:

1

Loop in Context = Loop in Use

Loop feels "part of the conversation" when inline, whereas a tab made it feel like a separate task they had to remember to check. However, users still want the flexibility of choosing when Loop gets to be the main experience.

2

One Loop Per Chat Isn't Sufficient

Different topics require separate spaces. Many were concerned with needing to overwrite existing content or move to a Loop workspace on web, since a single Loop page could easily become outdated or unorganized.

3

Notification Management is Overwhelming

Notification management in Teams is already fragmented and overwhelming. Users need a way to stay on top of important updates without further complicating the existing Teams notification triaging process.

4

Locked Permissions Limit Collaboration

Limiting LLoop to only chat participants made it more difficult to collaborate with broader teams. This could prevent LLoop from being used for larger scope projects.

The decision was clear...

A contextual pane streamlines synchronous collaboration, enables side-by-side multitasking, and feels more native to Teams.

But navigating the other feebdack wasn't...

Addressing all of the key feedback would require a significant increase in scope and cost, as well as dependencies on many other teams, which we simply did not have the capacity to take on all at once. Instead, we split this workstream up into two distinct phases.

navigating constrainsts

The Teams framework team owns the slot infrastructure and therefore the contextual pane as a reusable component. Adopting the framework team's common controls brought significant benefits, all of which improved development velocity and ensured a cohesive, native experience in chat:

✨ Reusable components
✨ Dynamic reflow
✨ Resizable panes

However, these advantages came with trade-offs. Loop had to conform to strict contextual pane guidelines to maintain consistency, which impacted the discoverability and usability of the Loop pane at the proposed defaults:
 
🔻 320px default width
🔻 User defined width and slot state being opened/closed is not stored
🔻 No mechanism to make Loop the main experience

Loop aimed to

Override the default width in order to enhance usability at the default size.

Teams Aimed to

Ensure a consistent experience across all panes. Some panes are preferred at a smaller default width.

Loop aimed to

Give users flexibility of whether Loop is the companion or main experience.

Teams Aimed to

Maintain a predictable system by ensuring the main canvas is main experience across all apps.

Loop aimed to

Maintain slot size and state persistence to support users' continuity in their workflows.

Teams Aimed to

Reduce disorientation for users who return to a conversation and don't expect their end slot to be open.

Default Slot Dimensions

To avoid disorienting users with jostling when switching between experiences, we ruled out a width override. Alternatively, drastically increasing the default width to our ideal size would have compromised experiences not designed for larger layouts.

Instead, we worked with the framework team to adjust slot dimensions: default, max, and min, to scale progressively with window size. We also increased the standard default width from 320px to 420px at a 1440px window size, making Loop more usable without degrading other experiences.

Collapsible Slots

Allows for the main canvas to be collapsed down to 12px when there is a contextual pane open. Users can accomplish this by dragging the divider past the maximum width of the slot, at which it will collapse. This provides LLoop and all other contextual panes the flexibility of being the companion or main experience depending on the particular workflow. Since this is an opt-in experience, the main canvas will still be the default main experience.

Persistence

Time-based persistence is a model of context persistence by means of by retaining context (like an open pane) only for a meaningful window of time. Rather than persisting indefinitely, which can lead to confusion when returning to outdated or irrelevant content. Time-based persistence will help the pane open if the user returns within 30 minutes and automitically close it if they return after 30 minutes. It helps users pick up where they left off if they return shortly, while resetting stale UI states after a period of inactivity to reduce cognitive load and prevent disorientation.
This is some text inside of a div block.

Defining the default state

Most chats will not require multiple LLoop documents, so defaulting to a hierarchical view can feel heavy for users who just want to drop in a single lightweight component. In order to reduce friction, the first time a user opens the LLoop pane in a chat, an empty Loop document will be the default state to encourage users to start collaborating. The secondary view would be the default until the user manually navigates to the list view, at which point the list view become the default view. In addition, to encourage users to add rich elements into their LLoop pane, we will hoist a few commonly used elements at the bottom of the pane, which will disappear once the user starts typing.

Permissions

LLoop documents always inherit the permissions of their original location, meaning only members of that chat can view or edit it. To support external collaboration with members outside of the chat, users are now able to change the permissions to General, meaning it can be shared via a link or Loop component without needing to add someone to the original chat.  

NOtifications

Notifications for key activities such as @mentions, changes to the Loop, and comments will be delivered through existing channels like the Activity feed. Users will have the flexibility to manage or turn off notifications through settings. Additionally, inline badging will provide a lightweight visual cue to help users stay aware of new changes.
This is some text inside of a div block.

Learnings and Reflections

This project has been incredibly fun and rewarding to work on. It pushed me to think holistically by balancing user needs, technical constraints, and long-term scalability. I had to lean into systems thinking, craft thoughtful interaction patterns, and demonstrate deep product and design reasoning to solve a complex problem. Here are my three key main takeaways:

🌱  PROGRESSIVE COMPLEXITY

One of the key lessons was the importance intentionally starting with a focused experience that supports lightweight collaboration, while laying the groundwork for deeper functionality to emerge over time. Many users don’t start out needing deep structure, so we focused on delivering a clean, intuitive starting point while allowing room for the experience to scale as collaboration deepens.

💌   ITERATION WITH INTENTION

Splitting the work into clear phases allowed us to ship early value and validate core behaviors while keeping extensibility in mind. We prioritized must-have functionality like contextual pane integration then introduced organizing tools like folders and saved views only when data showed they were needed. This phased approach helped reduce delivery risk, avoid unnecessary complexity, and ensure we didn’t overbuild too early.

🤝  TEAMWORK MAKES THE DREAM WORK

Lastly, this project reinforced the importance of tight cross-functional collaboration. Aligning product, design, and engineering around shared principles and a clear sequencing strategy ensured we could move quickly without sacrificing cohesion or quality. For me, it was a lesson in how thoughtful scoping and principled iteration can lead to both speed and strong user outcomes.