<?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: Jakub</title>
    <description>The latest articles on DEV Community by Jakub (@jkaczynski).</description>
    <link>https://dev.to/jkaczynski</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3698576%2F172432bb-68b7-460e-af16-daf1c4825613.png</url>
      <title>DEV Community: Jakub</title>
      <link>https://dev.to/jkaczynski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jkaczynski"/>
    <language>en</language>
    <item>
      <title>Using MQTT at Scale: Where Things Usually Go Wrong</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Wed, 14 Jan 2026 07:42:34 +0000</pubDate>
      <link>https://dev.to/jkaczynski/using-mqtt-at-scale-where-things-usually-go-wrong-97a</link>
      <guid>https://dev.to/jkaczynski/using-mqtt-at-scale-where-things-usually-go-wrong-97a</guid>
      <description>&lt;p&gt;“Just Publish It”… and Suddenly Nothing Talks to Each Other&lt;/p&gt;

&lt;p&gt;(MQTT, UNS, and why patterns matter)&lt;/p&gt;

&lt;p&gt;“It’s just MQTT — we’ll figure it out as we go.”&lt;/p&gt;

&lt;p&gt;A few sprints later:&lt;/p&gt;

&lt;p&gt;half the topics mean different things to different teams&lt;/p&gt;

&lt;p&gt;payloads drift without anyone noticing&lt;/p&gt;

&lt;p&gt;dashboards disagree&lt;/p&gt;

&lt;p&gt;and debugging feels like archaeology, not engineering&lt;/p&gt;

&lt;p&gt;If this sounds familiar, the problem usually isn’t MQTT itself — it’s how it’s being used.&lt;/p&gt;

&lt;p&gt;A useful concept to know: Unified Namespace (UNS)&lt;/p&gt;

&lt;p&gt;Unified Namespace (UNS) isn’t a product. It’s an architecture pattern for event-driven data integration.&lt;/p&gt;

&lt;p&gt;Instead of tightly coupling systems or wiring producer → consumer relationships directly, you publish data once into a shared, structured namespace. Everything else subscribes.&lt;/p&gt;

&lt;p&gt;From a software perspective, this usually means:&lt;/p&gt;

&lt;p&gt;fewer hard dependencies between services&lt;/p&gt;

&lt;p&gt;clearer boundaries between producers and consumers&lt;/p&gt;

&lt;p&gt;changes that are easier to reason about&lt;/p&gt;

&lt;p&gt;better visibility into what data exists and how it flows&lt;/p&gt;

&lt;p&gt;Often, MQTT is used as the transport layer — but MQTT alone doesn’t give you structure, semantics, or safety. That’s where patterns matter.&lt;/p&gt;

&lt;p&gt;Why teams adopt this pattern&lt;/p&gt;

&lt;p&gt;When done well, UNS helps teams avoid a lot of familiar pain:&lt;/p&gt;

&lt;p&gt;fewer fragile “don’t touch anything” integrations&lt;/p&gt;

&lt;p&gt;clearer data context (what / where / when) so downstream code doesn’t guess&lt;/p&gt;

&lt;p&gt;easier onboarding of new consumers (dashboards, analytics, ML, alerting)&lt;/p&gt;

&lt;p&gt;simpler debugging — you can trace who published what and when&lt;/p&gt;

&lt;p&gt;a natural place to enforce data contracts and versioning&lt;/p&gt;

&lt;p&gt;But none of this comes “for free” just by introducing MQTT.&lt;/p&gt;

&lt;p&gt;Do’s ✅ (software-friendly)&lt;/p&gt;

&lt;p&gt;Treat topic structure like an API surface&lt;br&gt;
Design hierarchy and naming intentionally. Changing topics later is a breaking change, even if it doesn’t look like one.&lt;/p&gt;

&lt;p&gt;Use explicit data contracts&lt;br&gt;
Schemas, units, timestamps, quality flags, ownership. Version them like you would any public interface.&lt;/p&gt;

&lt;p&gt;Build observability in from day one&lt;br&gt;
Health topics, heartbeats, last-known-state patterns, metrics, logs. If you can’t observe it, you can’t debug it.&lt;/p&gt;

&lt;p&gt;Don’ts ❌&lt;/p&gt;

&lt;p&gt;Don’t turn the namespace into a data dumpster&lt;br&gt;
“Just publish everything” scales badly. Curate signals, model events, keep semantics tight.&lt;/p&gt;

&lt;p&gt;Don’t ship silent breaking changes&lt;br&gt;
Changing schemas, units, or timestamps without versioning recreates point-to-point pain — just hidden behind pub/sub.&lt;/p&gt;

&lt;p&gt;Don’t skip governance&lt;br&gt;
ACLs, ownership, lifecycle rules, and lightweight review processes matter more than broker choice.&lt;/p&gt;

&lt;p&gt;I wrote this because I’ve seen too many teams lose weeks to “small” MQTT changes that should’ve been boring — but weren’t, because patterns were missing.&lt;/p&gt;

&lt;p&gt;If you want a practical breakdown of UNS with MQTT, including best practices, common patterns, and where teams usually get stuck, here’s the full article:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://ttpsc.com/en/blog/unified-namespace-mqtt-best-practices/" rel="noopener noreferrer"&gt;https://ttpsc.com/en/blog/unified-namespace-mqtt-best-practices/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mqtt</category>
      <category>architecture</category>
      <category>iot</category>
      <category>unifiednamespace</category>
    </item>
    <item>
      <title>“Just a Tiny Data Change”… and Your OT Stack Falls Apart (UNS to the Rescue)</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Mon, 12 Jan 2026 08:15:34 +0000</pubDate>
      <link>https://dev.to/jkaczynski/just-a-tiny-data-change-and-your-ot-stack-falls-apart-uns-to-the-rescue-94g</link>
      <guid>https://dev.to/jkaczynski/just-a-tiny-data-change-and-your-ot-stack-falls-apart-uns-to-the-rescue-94g</guid>
      <description>&lt;p&gt;“It’s just a tiny data format change,” someone said.&lt;br&gt;
Two hours later: SCADA’s gone silent, MES is offended, and ERP is pretending it’s never met these people.&lt;/p&gt;

&lt;p&gt;If that feels familiar, it’s usually a symptom of tight coupling and point-to-point integration sprawl: lots of custom connectors, hidden assumptions, and changes that ripple through the stack in weird, non-obvious ways. It works… until it doesn’t (and somehow it’s always Friday).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A useful concept to know: Unified Namespace (UNS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UNS is less a “tool” and more an architecture pattern for data integration. Think event-driven, not “sync systems directly.”&lt;br&gt;
Instead of every consumer calling every producer, you publish once into a shared, structured stream, and services subscribe to what they need (often implemented with pub/sub tech like MQTT).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From a software perspective, it’s basically:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer direct dependencies&lt;/li&gt;
&lt;li&gt;clearer boundaries&lt;/li&gt;
&lt;li&gt;more predictable change management&lt;/li&gt;
&lt;li&gt;better observability of what data exists and how it flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why teams use this pattern?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;fewer fragile “don’t touch anything” integrations&lt;/li&gt;
&lt;li&gt;clearer data context (what / where / when) so downstream code doesn’t guess&lt;/li&gt;
&lt;li&gt;easier to add new consumers (dashboards, analytics, ML, alerting) without re-wiring everything&lt;/li&gt;
&lt;li&gt;easier debugging because you can trace “who published what and when”&lt;/li&gt;
&lt;li&gt;a more natural place to enforce data contracts and versioning&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Do’s&lt;/strong&gt; ✅ (software-friendly)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define a topic structure + naming conventions early (treat it like an API surface, not an afterthought).&lt;/li&gt;
&lt;li&gt;Use data contracts: schemas, units, timestamps, quality flags, and explicit ownership. Version changes like you’d version an API.&lt;/li&gt;
&lt;li&gt;Bake in observability: health/heartbeat topics, last-known-state patterns, and logs/metrics so you can actually troubleshoot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Don’ts&lt;/strong&gt; ❌&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don’t treat UNS as a data dumpster. “Just publish everything” becomes technical debt fast. Curate signals, model events, keep semantics tight.&lt;/li&gt;
&lt;li&gt;Don’t ship breaking changes silently (schema/unit/timestamp changes). That’s how you recreate point-to-point pain, just in pub/sub form.&lt;/li&gt;
&lt;li&gt;Don’t skip governance: ACLs, ownership, lifecycle rules, and a simple review process for changes. Without this, the architecture won’t save you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wrote this because I’ve seen too many teams lose weeks to “small” integration changes that should’ve been boring.&lt;br&gt;
If you’ve got questions (or integration horror stories), drop them in the comments — happy to go deeper on contracts, versioning strategies, topic design, or where these projects usually get stuck.&lt;/p&gt;

&lt;p&gt;If you want a practical breakdown with examples, here you go:&lt;br&gt;
👉 [&lt;a href="https://ttpsc.com/en/blog/what-is-unified-namespace/" rel="noopener noreferrer"&gt;https://ttpsc.com/en/blog/what-is-unified-namespace/&lt;/a&gt;]&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
