Download audio: https://op3.dev/e/dts.podtrac.com/redirect.mp3/developers.podcast.go-aws.com/media/221.mp3
SharePoint helps communicators create rich, engaging stories, announcements or news posts for their organizations. Viva Engage helps those stories travel through the communities and conversations where people connect every day. With SharePoint News and Viva Engage cross-posting, authors can now bring these experiences together.
The new experience lets you distribute a SharePoint news post to a Viva Engage storyline or community. Readers can open the complete news post in full fidelity from Engage, while comments, replies, and reactions made in SharePoint or across Engage surfaces remain synchronized as one conversation.
See this video with Reetik Chandra and Vesa Juvonen for the live demo of new features.
A great news post should not stop at the boundary of a single site. Cross-posting extends the reach of SharePoint news into Viva Engage feeds, digests, and connected experiences. Readers get the same experience whether they use Engage on the web or mobile app, including iOS, or the Engage apps in Microsoft Teams and Outlook. Authors can reach these audiences without recreating content or managing separate discussions.
The Engage feed card gives readers a clear entry point to the complete SharePoint story. Wherever people discover the cross-post in Engage, selecting View news post opens the complete SharePoint page in full fidelity. It is not a screenshot or a simplified copy: sections, images, buttons, links, custom SPFx webparts and other page elements remain available as part of the original news post.
Links in both experiences make it easy to move between the original SharePoint news post and the Engage conversation. The result is one story that remains visually consistent wherever readers encounter it.
Cross-posting creates a single synchronized conversation. Comments, replies, and reactions made from SharePoint or Engage appear in the same thread. Readers can participate from the experience that works best for them while authors keep one connected discussion attached to the news.
Because the comment thread is shared, communicators do not need to monitor or reconcile separate conversations. Readers see the same discussion, including nested replies and reactions, from either product.
The experience is built into the SharePoint publishing flow and is also available for news posts that have already been published:
The Engage composer retains the publishing options authors already use in Engage. Authors can add people, send the post as an announcement when they have the required role, and, if they are configured as a delegate, publish on behalf of the person they support.
This feature is available to everyone with a Microsoft 365 license, including users who do not have a Viva C&C license. Those users see Promote instead of Amplify in the SharePoint command bar; the remaining cross-posting steps are the same.
Authors can use analytics in SharePoint and Engage together to understand how their news is performing across distribution channels. SharePoint page analytics can show performance from SharePoint and Engage, while Engage analytics provides a channel-level view of reach, reactions, and comments.
Available analytics can vary by license, and SharePoint news is identified as a distinct post type in Engage conversation rollups.
SharePoint News and Viva Engage cross-posting combines the rich authoring experience of SharePoint with the reach and participation of Engage. Authors can publish once, bring the story to a wider audience, and keep every comment and reaction connected to the original news post.
Try cross-posting your next SharePoint news post to a Viva Engage storyline or community, connect people with important news and create more unified conversations across your organization!
Copilot in SharePoint helps you do more with your content — ask questions, run workflows, and create sites, pages, interactive reports, and Office files using natural language. This month, reusable skills can follow you across SharePoint and OneDrive, Copilot can measure and improve those skills with evaluations, and new guidance helps AI agents build live, SharePoint-safe experiences. Here's everything that's new.
What's new: Create a personal skill once and use it across all your SharePoint sites
Why it matters: Your preferred formats, standards, and repeatable ways of working can travel with you instead of being tied to one site.
Sample use cases:
Try these prompts:
Watch a demo: https://www.youtube.com/watch?v=yc7foD5cHfs&t=30s
What's new: Ask Copilot to improve a skill with tests, evaluations, and measured changes instead of manually rewriting instructions and hoping for a better result.
Why it matters: You can see whether a change actually improves quality before you share the skill more broadly.
Sample use case: A Legal Operations team asks Copilot to improve its Marketing Legal review skill. Copilot suggests tests, evaluation criteria, and targeted updates to align external content with legal guidance and identify risks.
Try this prompt: “Improve my marketing legal document review skill. Create representative tests, evaluate the current results, and recommend measured changes.”
Watch the demo: https://www.youtube.com/watch?v=yc7foD5cHfs
What’s new: Every Microsoft 365 customer now has tenant-specific HTML guidance at _html. Point Cowork, Scout, GitHub Copilot, Copilot Studio, or another AI assistant to this page for up-to-date instructions on creating HTML designed to work within SharePoint’s sandbox. The guidance supports capabilities such as live-linked SharePoint lists, helping reports stay connected to their source data.
Why it matters: AI assistants typically generate standard web HTML, which may not work as expected in SharePoint. This guidance removes the need to explain SharePoint’s requirements yourself—and updates automatically as new capabilities become available in your tenant. More people can create rich, securely shareable experiences without requiring custom development for every scenario.
Sample use case: In Cowork, turn a SharePoint project-tracking list into an interactive status report with filters, key milestones, risks, and links to the source items.
Try this prompt (in Cowork, Scout, Copilot Studio, or another AI assistant): “Use https://[tenantname].sharepoint.com_html to generate a new HTML project status report about the content in this folder.
Watch the demo: https://youtu.be/yc7foD5cHfs?t=339
What’s new: Ask questions about images across a document library—without selecting and reviewing them individually.
Why it matters: Copilot could already explain or extract text from a selected image. Now, it can analyze images across your library to surface relevant details and extract visible text at scale.
Sample use case: A facilities team asks Copilot to review site photos, identify equipment and labels, and flag images that may show maintenance issues.
Try this prompt: “Review the images in this library. Summarize the equipment and labels shown, extract relevant text, and flag anything that may require follow-up.”
What's new: Let your team know when new files are added or key metadata updates occur. Send a simple message in a group chat or channel with the file title, link and your own custom text.
Why it matters: Conversations and collaboration happen in Teams. Keep the source file in SharePoint and get feedback from colleagues, notify a partner team a file is ready to review, or send a weekly reminder to look at files with an upcoming due date filtered view.
Sample use cases:
Try this prompt: Send me a chat for new files, when status = final. Post a message in our group chat, or post in our Team channel when a due date is updated.
Learn more: Getting started with Workflows | Microsoft Support
What's new: Track approvals in the context of your files and lists, collect required information, and route requests to the right reviewers.
Why it matters: Approvals stay connected to the content and status that triggered them, giving requestors and reviewers a clearer record of what was submitted, who needs to act, and what happens next.
Sample use cases:
Try this prompt: Collect new PTO requests, route approvals to our team manager whenever submitted. Tell the requestor when they are approved.
Learn more: Approvals in Lists & Document Libraries | Microsoft Support
Copilot in SharePoint now delivers more consistent, predictable cards in chat, making information, approvals, and available actions easier to scan so you can verify the context and take the next step with confidence.
Copilot in SharePoint is available for users with a Microsoft 365 Copilot license. For ready-to-use prompts and step-by-step guidance, explore the Copilot in SharePoint Adoption Hub and the Getting Started Prompt Library .
Bring us your business challenge! If your team has a high-value SharePoint scenario that could benefit from Copilot, nominate it for the Copilot in SharePoint co-build program and work with us to shape the solution.
See you next month for the next round of what's new! 🚀
From device recovery and unattended remote support to post-quantum cryptography readiness and Windows 365 improvements, August delivered a broad set of updates for IT admins. In this edition of Windows news you can use, explore new recovery and management tools, security enhancements designed to strengthen protection by default, Windows Server updates, AI-related improvements in Windows, and upcoming lifecycle milestones that may require action in your environment.
To explore what's new in security across the Microsoft platform, see What's new in Microsoft Security: July 2026.
For the latest features and improvements for Windows Server, see the Windows Server 2025 release notes and Windows Server 2022 release notes.
Install the August 2026 security update for Windows 11, versions 25H2 and 24H2 to get these and other capabilities, which will be rolling out gradually:
New features and improvements are coming in the September 2026 security update. You can preview them by installing the August 2026 optional non-security update for Windows 11, versions 25H2 and 24H2. This update includes the gradual rollout of:
To learn about planned productivity, security, and reliability updates for Windows 11, visit the Windows Roadmap.
Check out our lifecycle documentation for the latest updates on Deprecated features in the Windows client and Windows Server 2025.
Looking for the latest news and previews for Windows, Copilot, Copilot+ PCs, the Windows and Windows Server Insider Programs? Find out this and more through the following resources:
Is this update missing areas or topics you want us to include? Drop us a note in the Comments and share your thoughts on what you'd like to see.
Continue the conversation. Find best practices. Bookmark the Windows Tech Community. Looking for support? Visit Windows on Microsoft Q&A.
Kotlin Toolchain 0.12.0 is out. This release brings some long-awaited features: multiplatform libraries publication, a preview of Wasm application support, Compose Hot Reload from the command line, and more.
Read on for the details, and check the release notes for the full list of changes and bug fixes.
Additionally, klibs.io now uses the Kotlin Toolchain in production. A real backend and not a sample, it’s built on JDK 21, Spring Boot 4 (with Spring AI), PostgreSQL, and OpenSearch. We’ve converted nine convention plugins to Kotlin Toolchain templates, and two Gradle plugins with no built-in equivalent: Jib and Git Properties, which we’ve implemented as local Kotlin Toolchain plugins. Check out the sources yourself.
To get support for Kotlin Toolchain’s latest features, use IntelliJ IDEA 2026.2.1 (or newer). Make sure the latest version of the Kotlin Toolchain plugin is installed.
Library publishing arrived in preview in 0.11, but only for JVM libraries. Starting with 0.12, multiplatform libraries work too, with exactly the same configuration:
product:
type: lib
platforms: [jvm, android, iosArm64, iosSimulatorArm64, wasmJs]
settings:
publishing:
enabled: true
group: org.example
version: 1.0.0
The Kotlin Toolchain publishes everything your users need to depend on your library from any of its targets: the common API, one artifact per platform, the sources, and the module publication metadata that lets build tools pick the right pieces automatically.
Cinterop bindings are supported as well. They are published both commonized and per platform, so your users get the same C API you compiled against without setting up interop themselves. The result is consumable from Gradle projects like any other multiplatform library.
For more details, see the documentation.
Note: Resources of Compose Multiplatform libraries are not part of the publication yet. Follow KTC-5698 for progress.
Because of the new quotas on Maven Central publications that Sonatype will soon enforce, we made a few notable changes to reduce the number of files published by default:
.asc.sha1) are not necessary and are no longer published..md5 and .sha1 checksums are published by default now. If you need to continue publishing the .sha256 and .sha512 checksums, use settings.publishing.checksums: [md5, sha1, sha256, sha512].wasm-js/app modules can now be built into a ready-to-use web application.

Among the supported features are:
kotlin run command.index.html and other resources. More information on working with Wasm web applications is available in the documentation.
We are actively working to make the output of the kotlin command less verbose and more user-friendly.
For example, here are some of the recent diagnostics improvements:

Running tests are now visible in the status widget under the respective tasks and their suites. There are also short test execution statistics visible during the run.
There are more things to iron out, but we’ll get there.
Android modules and kmp/lib modules that have Android as one of their targets now support the Compose preview feature, powered by the androidx.compose.ui.tooling.preview.Preview annotation and the Android plugin.
The IDE now correctly recognizes Compose resources, updates Res classes on the fly, provides navigation, completion, and refactorings that update both XMLs and your code.

Adding to the Compose preview support mentioned above, we have also brought support for more of the Android features you are accustomed to, such as:
R class) navigation and completionStarting with IntelliJ IDEA 2026.2.1, the experience of working with iOS applications should be closer to what you’re used to in Gradle projects.
The run configuration now lets you pick a device, configure Xcode options, and choose a debug/release configuration mode.

We’ve also fixed a few issues with Kotlin/Swift interoperability, which should be more stable now.
Catalog dependencies in module files and templates now have an inlay hint next to them displaying coordinates that each entry points to.

We now properly support Compose Hot Reload from the command line using the kotlin run --compose-hot-reload-mode command.
We now support an MCP server for agents to interact with applications running with Compose Hot Reload.
To get started, add the following snippet in your mcp.json:
{
"mcpServers": {
"Compose Hot Reload": {
"command": "./kotlin",
"args": [
"compose-hot-reload-mcp-server"
]
}
}
}
With this, agents can interact with, reload, restart, and view window snapshots, and dump the tree of composables. Read more about these capabilities here.
// prefixPreviously, the only way to define local module dependencies was to use relative paths starting with the . (dot) symbol. This approach had several problems. For example, moving a module from one directory level to another required changing all the dependency paths, such as from../../foo to ../foo. And having a multitude of ../ in deeply nested directory structures generally made paths hard to read.
The new recommended way to define local module dependencies is to use project-root-relative paths starting with the // prefix. You might be familiar with this syntax from tools like Bazel. The // prefix represents the project root directory and can be used not only in the dependencies block but in any place that expects a path as well, for example, apply.
Before:

After:

The old relative-paths approach still works for now.
This is a step toward allowing multiple modules with the same directory name.
Until now, the minimum JDK version supported by the Kotlin Toolchain was not clearly documented anywhere, and the build would just fail in different places if you used a JDK that was too old. There is now a clear diagnostic and a clear minimum: only JDK 17 and higher are supported to compile your code. You can still use settings.jvm.release to set a lower target if your code should be runnable on lower JREs.
The minimum Kotlin compiler version was raised from 2.1.10 to 2.2.20. This allows simplifying our code, and is in line with the new security support policy for the Kotlin standard library.
We’ve also updated some of the default versions for built-in toolchains and frameworks:
To get started with the Kotlin Toolchain, check out our Getting started guide. Take a look at some examples, follow the tutorial, or read the comprehensive user guide, depending on your learning style.
To update an existing project, use the kotlin update command.
The Kotlin Toolchain is still in Alpha and under active development. You can provide feedback about your experience by joining the discussion in the #kotlin-toolchain Slack channel (get invite: https://kotl.in/slack) or by sharing your suggestions and ideas in a YouTrack issue. Your input and use cases help shape the future of the Kotlin Toolchain!
If you’re a software developer or DevOps engineer, you've probably come across OpenTelemetry. It comes up a lot, especially when talking about observability, monitoring, or debugging distributed systems.
You might even know the basic definition, but knowing what OpenTelemetry is vs how it actually works are two different things.
By the end of this guide, you'll understand how OpenTelemetry works end-to-end, from the moment a request enters your application to the moment you can see it in your observability backend. You'll learn how traces, spans, context propagation, and exporters all fit together into one pipeline.
If you're completely new to OpenTelemetry, don't worry: the next section will get you up to speed before we go any further.
OpenTelemetry is an open-source, vendor-neutral observability framework. It gives you a standard way to instrument your application, generate telemetry data, and export that data to any observability backend of your choice.
Before OpenTelemetry, every monitoring tool had its own way of collecting data. If you used Datadog, you’ll have to instrument your app the Datadog way. If you switched to Jaeger, you started over. OpenTelemetry changed that by giving you one standard way to instrument your application, regardless of which backend you use
[!NOTE] OpenTelemetry is not a monitoring platform, dashboard, or data store. It provides the tools and standards for collecting and exporting telemetry from your application to an observability backend, where the data can be stored, queried, and analyzed.
The data OpenTelemetry collects is called telemetry. It's the information your application produces about itself as it runs, and it comes in three forms:
Traces tell you how a request traveled through your system.
Metrics give you numbers, like how many requests per second your app is handling, or how much memory it's using.
Logs are timestamped records of specific events that happened inside your application.
When a request hits your application, a lot happens behind the scenes. OpenTelemetry's job is to capture all of that activity (the traces, metrics, and logs) and send them to the right place.
Here’s what it looks like:
Each stage has a specific job. Let's walk through them one by one.
Before OpenTelemetry can capture anything, your application needs to be instrumented. Instrumentation is simply the process of adding code that tells OpenTelemetry what to watch and what to record.
There are two ways to instrument your application: automatically or manually.
This is the easiest one to start with. You add a library to your project, and it instruments your application for you with no changes to your existing code.
For example, if you're running a Node.js Express app, you can add the OpenTelemetry auto-instrumentation package, and it will automatically start capturing incoming HTTP requests, outgoing calls, database queries, and more.
Here's what that setup looks like:
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const sdk = new NodeSDK({
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start();
Once this runs before your app starts, OpenTelemetry begins capturing telemetry automatically. For a complete setup guide, see Getting started with OpenTelemetry in Node.js.
Automatic instrumentation covers a lot, but it can't capture everything that happens inside your own code. If you want to track what happens inside a specific function, like how long it takes to process a payment or validate a user, you need to add that yourself.
Here's a simple example. Let’s say you have a function that processes an order:
function processOrder(orderId) {
// processing logic
}
With manual instrumentation, you wrap it like this:
const { trace } = require('@opentelemetry/api');
const tracer = trace.getTracer('order-service');
function processOrder(orderId) {
return tracer.startActiveSpan('processOrder', (span) => {
// processing logic
span.end();
});
}
What happens is that you created a span. That span now records when processOrder started, when it ended, and how long it took. You'll learn more about spans in Step 3.
For the full manual instrumentation reference, see OpenTelemetry JavaScript instrumentation.
Once your application is instrumented, OpenTelemetry starts producing telemetry data about what your application is doing. That data comes in three forms, called signals, which we've already briefly talked about: traces, metrics, and logs. Each signal answers a different kind of observability question.
Traces show you how a request moved through your system, which services it touched, and how long each step took. Metrics give you numbers over time, things like request rate, error rate, and memory usage. Logs are timestamped records of specific events that happened inside your application.
Here's a quick comparison:
| Signal | What to shows | Example | Question it answers |
|---|---|---|---|
| Trace | The journey of a request through your system | A checkout request passing through your API, order service, and database | Why is this request slow? Where did it fail? |
| Metric | A measured value over time | 200 requests per second, 95ms average response time | Is my application healthy right now? |
| Log | A record of a specific event | ERROR: payment failed for order #1234 |
What exactly happened at this point in time? |
You don't have to choose between them. In practice, you'll use all three together. A metric tells you something is wrong, a trace shows you where, and a log tells you exactly what happened.
When a user sends a request to your application, that request usually touches multiple services before a response comes back. A trace is the complete record of that journey, from the moment the request enters your system to the moment it finishes.
A trace is actually made up of smaller units called spans. Each span represents one operation, like an API call, a database query, or a function execution, and together they give you the full picture of what happened.
Every trace gets a unique trace ID, and every span gets its own span ID. The trace ID is what links all the spans together. No matter how many services a request passes through, they all share the same trace ID, so you can follow the request from start to finish in your observability backend.
Here's a simple example. A user places an order, and the request flows through four services:
Each span has a start time and an end time, so you can see how long each operation took. If something slowed down or failed, you can pinpoint exactly where it happened just by looking at the spans.
In Step 3, you saw how a single trace is made up of spans from multiple services. But here's a question you need to ask: how does OpenTelemetry know that a span in your payment service belongs to the same trace as a span in your order service?
Without something connecting them, each service would record its own spans independently. Your API gateway would see one operation, your order service would see another, and your payment service would see a third. They'd look like completely separate requests with no relationship to each other, which makes debugging across services nearly impossible.
That's where context propagation comes in. As a request moves from one service to another, OpenTelemetry attaches the trace context to it, typically as HTTP headers. That context carries the trace ID and the parent span ID, so every service that handles the request knows which trace it belongs to and where it sits in the chain.
Here's what that looks like in practice:
All three services share the same trace ID. That's what lets your observability backend connect the spans together into one complete trace.
OpenTelemetry doesn't invent its own rules for this. It follows the W3C Trace Context standard, a widely adopted specification that defines how trace context should be formatted and passed between services, so it works consistently across different languages, frameworks, and vendors.
The good news is that if you're using automatic instrumentation, context propagation happens automatically. OpenTelemetry handles the headers for you, so you don't have to think about it unless you're working with a custom transport or a non-standard setup.
At this point, OpenTelemetry is capturing telemetry and keeping traces connected across services. But between the moment a span is created and the moment it leaves your application, something has to process it. That's the SDK's job.
When your instrumented code creates a span, it does that through the OpenTelemetry API. The API is what you interact with as a developer, things like trace.getTracer() and tracer.startActiveSpan(). But the API alone doesn't process or send anything. It needs the SDK behind it to actually do the work.
Once the SDK receives the telemetry, it runs it through a processor. The processor is responsible for things like batching spans together before sending them, adding extra attributes, or filtering out data you don't need. The most common one you'll see is the BatchSpanProcessor, which groups spans and exports them in batches rather than one at a time, making it more efficient in production.
Before the processor even runs, the SDK also handles sampling. Sampling lets you control how much telemetry you actually collect. In high-traffic applications, recording every single span would generate an enormous amount of data. With sampling, you can tell the SDK to only capture a percentage of traces, which keeps your costs and data volume manageable without losing visibility.
Once the processor is done, it hands the data to the exporter, which is what actually sends it to its destination. You'll see how that works in the next step.
The exporter's job is simple: take the telemetry the SDK prepared and send it to whatever destination you've configured.
OpenTelemetry uses OTLP, the OpenTelemetry Protocol, to transport telemetry data. It's a standard wire protocol designed specifically for transmitting traces, metrics, and logs, and it runs over either HTTP or gRPC.
[!NOTE] OTLP and OpenTelemetry are not the same thing. OpenTelemetry is the full framework, covering instrumentation, the SDK, the Collector, and more. OTLP is just the protocol it uses to transport data.
Although OTLP is the default, not every exporter uses it. Some exporters send data directly to specific backends in their own format, like Jaeger or Prometheus. So depending on your setup, you might use an OTLP exporter to send data to a Collector or backend, or a vendor-specific exporter to send it directly."
The OpenTelemetry Collector is a standalone service that sits between your application and your observability backend. It receives telemetry data, processes it, and forwards it to one or more destinations.
Using the Collector is common but not mandatory. You can configure your exporter to send data directly to your backend and skip the Collector entirely. But in most production setups, teams add a Collector because it gives them a central place to manage telemetry, without touching application code.
The Collector has three stages:
Receivers accept incoming telemetry from your applications, typically over OTLP.
Processors transform the data at the Collector level, things like batching spans, filtering out noise, or adding attributes before forwarding.
Exporters send the processed data to your backend, or multiple backends if needed.
Here's a minimal Collector configuration:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
processors:
batch:
exporters:
otlphttp:
endpoint: https://your-backend.com
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp]
This config accepts traces over gRPC, batches them for efficiency, and forwards them to an observability backend over HTTP.
The Collector can also receive data from multiple applications simultaneously and route it to one or more destinations. So instead of each application shipping telemetry directly to your backend, they all send it to the Collector, and the Collector handles the rest.
For the full configuration, see the OpenTelemetry Collector configuration docs.
This is where OpenTelemetry's job ends. Once your telemetry leaves the Collector, it arrives at your observability backend.
The backend is what stores your data, lets you query it, and gives you the dashboards and alerts you actually interact with day to day. OpenTelemetry doesn't provide any of that. It gets the data there, and the backend does the rest.
A few popular backends that support OpenTelemetry natively:
Open-source: Jaeger, Prometheus, Grafana Tempo
Commercial: Datadog, New Relic, Honeycomb, Dynatrace, Elastic, Lightstep, Grafana Cloud, Middleware.
Once your data is in the backend, you can search through traces to debug a slow request, build dashboards to monitor your application's health, and set up alerts when something goes wrong.
Let’s assume a user initiates a bank transfer on a mobile banking app. The request hits your API gateway, and because your application is instrumented, OpenTelemetry immediately starts capturing what’s happening. It creates a span for the incoming request and assigns it a trace ID.
As the request moves to the authentication service, context propagation carries that trace ID along in the request headers. The authentication service creates its own span and attaches it to the same trace. The same thing happens when the authentication service calls the transaction service, and when the transaction service hits the database to process the transfer. Four services and four spans, with one trace ID connecting them all.
Meanwhile, the SDK processes the telemetry in the background, runs the spans through the batch processor, and hands them to the exporter. The exporter packages everything into OTLP and sends it to the Collector, which applies your processing rules and forwards it to your observability backend.
Here’s a summary of every component involved in that flow:
| Component | Role |
|---|---|
| Instrumentation | Captures what’s happening inside your application |
| API | Exposes the methods your code calls to create spans, metrics, and logs |
| SDK | Processes and prepares telemetry for export |
| Exporter | Packages and sends telemetry via OTLP |
| Collector | Receives, processes, and routes telemetry to your backend |
| Observability backend | Stores, queries, and visualizes your telemetry |
From that single transfer request, you now have a complete trace in your backend. When you open your dashboard and search the trace ID, you'll see every service, every span, and every millisecond of that transaction laid out in front of you.
To be honest, you don’t need every component to get started with OpenTelemetry. The pipeline you’ve seen throughout this article is the full setup, but not every team uses all of that.
Without the Collector: Your exporter sends telemetry directly to your backend with nothing in between. Works well for smaller projects or when you're just getting started.
With the Collector: The more common production setup. Teams add the Collector when they need more control, like routing telemetry to multiple backends, filtering sensitive data, or managing telemetry from dozens of services in one place.
The Collector is powerful, but it’s not mandatory. Start without it if your setup is simple, and add it when you actually need it.
You've now seen how every piece of OpenTelemetry fits together. Here's why it's worth using:
Vendor-neutral instrumentation: Before OpenTelemetry, switching observability tools meant you had to re-instrument your entire application from scratch. With OpenTelemetry, you instrument once and switch backends freely.
Consistent telemetry across services and languages: Your backend might be in Go, your microservices in Python, and your data pipeline in Java. OpenTelemetry has SDKs for all of them, and they all produce telemetry in the same format, so your whole stack speaks the same language.
Correlated observability signals: Traces, metrics, and logs all flow through the same pipeline. So when something goes wrong, a spike in your metrics leads you to a trace, and that trace points you to the exact log entry where things broke down.
It's becoming the industry standard: Most observability backends already support OpenTelemetry natively. Instead of learning a vendor-specific instrumentation approach every time you adopt a new tool, you learn OpenTelemetry once and it works everywhere.
OpenTelemetry gives you a standard way to instrument your application, collect telemetry, and ship it to any backend you choose, without locking you into a specific vendor or tool.
If you remember nothing else from this article, remember this: you instrument your application, generate telemetry, process it, export it, and analyze it. Every step has a component behind it, and now you know what each one does.
If you're just getting started, you don't need to set everything up at once. Start with instrumentation, get your telemetry flowing to a backend, and add the Collector when you need it. You can always add more as your needs grow.
If you found this helpful, I'd love to connect. You can find me on LinkedIn or X. Feel free to reach out if you have questions or just want to talk about observability and developer tooling.