<?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: Hamza A</title>
    <description>The latest articles on DEV Community by Hamza A (@hamza_a_1dba9c327788c448f).</description>
    <link>https://dev.to/hamza_a_1dba9c327788c448f</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%2F2039501%2F01a9c68e-6315-4f90-b3f8-7df3c5546882.jpg</url>
      <title>DEV Community: Hamza A</title>
      <link>https://dev.to/hamza_a_1dba9c327788c448f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hamza_a_1dba9c327788c448f"/>
    <language>en</language>
    <item>
      <title>Microsoft Fabric and OneLake: The Unified Data Platform</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:28:53 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/microsoft-fabric-and-onelake-the-unified-data-platform-4lj8</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/microsoft-fabric-and-onelake-the-unified-data-platform-4lj8</guid>
      <description>&lt;p&gt;For years, the Microsoft data story was a shopping list: Synapse, ADF, Power BI, Purview, ADLS, Databricks-or-not. &lt;strong&gt;Microsoft Fabric&lt;/strong&gt; and &lt;strong&gt;OneLake&lt;/strong&gt; collapse most of that into a single SaaS platform — and in 2026, it is finally mature enough to bet a production workload on.&lt;/p&gt;

&lt;p&gt;Here is what actually changed and what to watch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea
&lt;/h2&gt;

&lt;p&gt;One tenant, one lake. OneLake is the &lt;strong&gt;OneDrive for data&lt;/strong&gt;: a single logical data lake across your entire org, built on Delta/Parquet, accessible from every Fabric workload (Data Engineering, Data Warehouse, Real-Time Intelligence, Data Science, Power BI) without copying data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shortcuts&lt;/strong&gt; let you point at data in ADLS, S3, or GCS and treat it as if it lived in OneLake. No duplication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No more pipeline jungle&lt;/strong&gt; just to get data into Power BI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Lake&lt;/strong&gt; mode in Power BI queries Parquet files directly — no import, no DirectQuery tax&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git integration&lt;/strong&gt; for notebooks, pipelines, and semantic models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified governance&lt;/strong&gt; via Purview baked in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One compute metering model&lt;/strong&gt; (capacity units) across all workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where it is great
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Organizations already standardized on Power BI&lt;/li&gt;
&lt;li&gt;Mid-size data estates that never wanted to operate Databricks themselves&lt;/li&gt;
&lt;li&gt;Teams that want medallion architecture without assembling six services&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where it is not yet the answer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Very large, very custom Spark workloads (Databricks still wins)&lt;/li&gt;
&lt;li&gt;Teams with strict multi-cloud strategies (Fabric is Azure-first)&lt;/li&gt;
&lt;li&gt;Workloads that need streaming semantics beyond what KQL and Eventstream provide&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Start with &lt;strong&gt;one domain&lt;/strong&gt;, not the whole estate&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;shortcuts&lt;/strong&gt; before you move data — prove the queries work first&lt;/li&gt;
&lt;li&gt;Adopt &lt;strong&gt;medallion layout&lt;/strong&gt; in OneLake from day one (Bronze / Silver / Gold)&lt;/li&gt;
&lt;li&gt;Bring &lt;strong&gt;Git integration&lt;/strong&gt; in early — it is the biggest quality-of-life upgrade&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/microsoft-fabric-onelake-unified-data-platform" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>data</category>
      <category>dataengineering</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Event-Driven Serverless Patterns That Scale on Azure</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:28:09 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/event-driven-serverless-patterns-that-scale-on-azure-ko5</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/event-driven-serverless-patterns-that-scale-on-azure-ko5</guid>
      <description>&lt;p&gt;Serverless hit its awkward teenage years somewhere around 2022. In 2026, it is grown up: the patterns are settled, the tooling is boring (good), and event-driven architectures on Azure genuinely scale when you build them right.&lt;/p&gt;

&lt;p&gt;Here are the patterns that actually hold up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three building blocks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event Grid&lt;/strong&gt; — cheap, low-latency, pub/sub for reactive workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Bus&lt;/strong&gt; — durable, ordered, transactional messaging for business logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Hubs&lt;/strong&gt; — high-throughput streaming for telemetry and logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use all three. They are not competitors; they are different instruments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patterns that scale
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Grid → Function → Bus
&lt;/h3&gt;

&lt;p&gt;Event Grid fans out a lightweight notification to a Function. The Function does the minimum work needed to enqueue a durable command into Service Bus. Keeps the hot path fast and the business path reliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Outbox → Event Grid
&lt;/h3&gt;

&lt;p&gt;Write to your database and to an outbox table in the same transaction. A tiny worker drains the outbox to Event Grid. You get exactly-once-ish semantics without distributed transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Saga over Service Bus
&lt;/h3&gt;

&lt;p&gt;Long-running business processes as a chain of Service Bus messages with compensation steps. Durable Functions make the orchestration readable.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Event Hubs → Stream Analytics → Fabric
&lt;/h3&gt;

&lt;p&gt;High-volume telemetry lands in Event Hubs, gets projected into Fabric or ADX for queries. Functions handle alerts off the same stream.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things to get right early
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency keys&lt;/strong&gt; on every handler&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poison queues&lt;/strong&gt; and &lt;strong&gt;dead letter&lt;/strong&gt; alarms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema registry&lt;/strong&gt; for event contracts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracing&lt;/strong&gt; via OpenTelemetry across the whole chain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backpressure&lt;/strong&gt; — Functions can scale, your downstream database cannot&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When not to go serverless
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Long-running heavy compute (use Container Apps)&lt;/li&gt;
&lt;li&gt;Very latency-sensitive synchronous APIs (use Container Apps or AKS)&lt;/li&gt;
&lt;li&gt;When your team has zero operational experience with distributed systems&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/event-driven-serverless-patterns-scale-azure" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>azure</category>
      <category>serverless</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Cloud-Native Authentication Patterns for Web Apps</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:27:36 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/cloud-native-authentication-patterns-for-web-apps-346b</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/cloud-native-authentication-patterns-for-web-apps-346b</guid>
      <description>&lt;p&gt;Authentication in cloud-native web apps in 2026 is not about rolling your own login form. It is about picking the right &lt;strong&gt;pattern&lt;/strong&gt; for your topology — single-page app, server-rendered, mobile, or API-first — and wiring it to an identity provider you trust.&lt;/p&gt;

&lt;p&gt;Here are the patterns that hold up in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four shapes of modern auth
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Authorization Code + PKCE (SPAs and mobile).&lt;/strong&gt; The default for anything client-side. No client secret, PKCE binds the token to the client, refresh via rotating tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BFF (Backend-for-Frontend) with session cookies.&lt;/strong&gt; The comeback pattern. Keep tokens on the server, give the browser a signed session cookie. Works beautifully with SSR frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client Credentials (service-to-service).&lt;/strong&gt; For machine-to-machine, scoped to one audience per client. Never reuse across services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device Code (CLIs and IoT).&lt;/strong&gt; For inputs without a browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to put on the identity provider
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entra ID / Auth0 / Clerk / Keycloak&lt;/strong&gt; — pick one and commit&lt;/li&gt;
&lt;li&gt;Configure &lt;strong&gt;per-environment tenants&lt;/strong&gt; or at least per-environment apps&lt;/li&gt;
&lt;li&gt;Enforce &lt;strong&gt;MFA&lt;/strong&gt; at the IdP, not the app&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;short-lived access tokens&lt;/strong&gt; and &lt;strong&gt;refresh token rotation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Storing access tokens in &lt;code&gt;localStorage&lt;/code&gt; (XSS steals them instantly)&lt;/li&gt;
&lt;li&gt;Treating ID tokens as access tokens&lt;/li&gt;
&lt;li&gt;Rolling custom JWT verification instead of using the IdP SDK&lt;/li&gt;
&lt;li&gt;Skipping audience and issuer checks&lt;/li&gt;
&lt;li&gt;No token revocation story&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The BFF pattern in one paragraph
&lt;/h2&gt;

&lt;p&gt;Your frontend talks only to your backend via &lt;code&gt;HttpOnly&lt;/code&gt;, &lt;code&gt;Secure&lt;/code&gt;, &lt;code&gt;SameSite=Lax&lt;/code&gt; cookies. Your backend holds the real tokens, talks to downstream APIs on behalf of the user, and handles refresh. Result: zero tokens in JavaScript, no &lt;code&gt;localStorage&lt;/code&gt; exposure, and CSRF is manageable with the usual double-submit pattern.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/cloud-native-authentication-patterns-web-apps" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>cloud</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Azure IoT Operations: Edge Intelligence for Industry</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:27:01 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/azure-iot-operations-edge-intelligence-for-industry-1khe</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/azure-iot-operations-edge-intelligence-for-industry-1khe</guid>
      <description>&lt;p&gt;If you run industrial IoT in 2026, the center of gravity has moved to the edge. &lt;strong&gt;Azure IoT Operations&lt;/strong&gt; is Microsoft's Arc-enabled, Kubernetes-native edge stack — and it is finally the answer to "how do I run real logic next to my PLCs without shipping everything to the cloud?"&lt;/p&gt;

&lt;p&gt;Here is what it actually is and when to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What IoT Operations gives you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arc-enabled Kubernetes&lt;/strong&gt; as the runtime — you can use AKS Edge Essentials, K3s, or any CNCF-conformant cluster&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MQTT broker&lt;/strong&gt; at the edge (replaces the old IoT Edge hub)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data flows&lt;/strong&gt; for transformation and routing before data leaves the plant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OPC UA connector&lt;/strong&gt; for talking to industrial equipment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema registry&lt;/strong&gt; so you are not shipping untyped JSON around&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in observability&lt;/strong&gt; via OpenTelemetry&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where it beats classic IoT Edge
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes-native, so your existing GitOps and Helm workflows just work&lt;/li&gt;
&lt;li&gt;Clean separation of broker, connectors, and data flows&lt;/li&gt;
&lt;li&gt;Local processing with cloud-optional operation&lt;/li&gt;
&lt;li&gt;Better story for high availability at the edge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architectural patterns that work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plant-local MQTT + cloud fan-out.&lt;/strong&gt; Brokers at the edge, with filtered routes to Event Hubs or Fabric.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol translation at the edge.&lt;/strong&gt; OPC UA in, Cloud Events out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules at the edge, analytics in the cloud.&lt;/strong&gt; Fast loops stay local, slow loops go to Fabric or ADX.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where teams stumble
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating it like IoT Edge v2 instead of a Kubernetes platform&lt;/li&gt;
&lt;li&gt;Skipping the schema registry — you will regret it in month six&lt;/li&gt;
&lt;li&gt;Under-provisioning edge clusters for real workloads&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/azure-iot-operations-edge-intelligence-industry" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>azure</category>
      <category>iot</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Azure IoT Hub: Enterprise Device Management at Scale</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:26:21 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/azure-iot-hub-enterprise-device-management-at-scale-32oe</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/azure-iot-hub-enterprise-device-management-at-scale-32oe</guid>
      <description>&lt;p&gt;Managing 10 IoT devices is a weekend project. Managing 100,000 is a platform problem — and in 2026, &lt;strong&gt;Azure IoT Hub&lt;/strong&gt; is still the most battle-tested way to do it if you are already on Azure.&lt;/p&gt;

&lt;p&gt;Here is what running IoT Hub at real scale actually looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  What IoT Hub gives you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-device identity and auth&lt;/strong&gt; (X.509, SAS, TPM)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bi-directional messaging&lt;/strong&gt; — telemetry up, commands and direct methods down&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device twins&lt;/strong&gt; for desired/reported state sync&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message routing&lt;/strong&gt; to Event Hubs, Service Bus, Storage, or custom endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device Provisioning Service (DPS)&lt;/strong&gt; for zero-touch onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The scaling patterns that work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shard by DPS enrollment groups&lt;/strong&gt;, not by hub. Start with one hub per region and grow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route telemetry out immediately.&lt;/strong&gt; IoT Hub is a message broker, not a database. Land it in Event Hubs or ADX.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use device twins for state, not telemetry.&lt;/strong&gt; Twins are not free — treat them like config, not a data stream.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Back off on ingestion spikes.&lt;/strong&gt; Use the built-in throttles instead of fighting them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Operational gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connection storms&lt;/strong&gt; after a regional outage can overwhelm DPS — stagger reconnects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quota limits per hub&lt;/strong&gt; are real; plan for S2/S3 tiers before you hit them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message size matters&lt;/strong&gt; — batch small payloads, compress where you can&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs are expensive&lt;/strong&gt; — route diagnostics to Log Analytics selectively&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to look elsewhere
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You are fully on AWS → IoT Core is fine&lt;/li&gt;
&lt;li&gt;You need MQTT 5 features IoT Hub does not yet expose&lt;/li&gt;
&lt;li&gt;You are at the edge and want local-first → pair IoT Hub with IoT Operations&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/azure-iot-hub-enterprise-device-management-scale" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>azure</category>
      <category>iot</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Digital Twins Meet BIM: Smart Building Intelligence</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:24:59 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/digital-twins-meet-bim-smart-building-intelligence-17m5</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/digital-twins-meet-bim-smart-building-intelligence-17m5</guid>
      <description>&lt;p&gt;Building Information Modeling (BIM) gave us detailed 3D models of buildings. Digital twins gave us live, data-connected replicas of physical systems. In 2026, combining the two is finally producing the "smart building" outcomes that were overpromised for a decade.&lt;/p&gt;

&lt;p&gt;Here is what is actually working in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when BIM meets a digital twin
&lt;/h2&gt;

&lt;p&gt;A static BIM model is a snapshot of design intent. A digital twin fuses that model with real-time telemetry — HVAC, occupancy, energy, water, elevators — so operators can reason about a building the way a pilot reasons about an aircraft.&lt;/p&gt;

&lt;p&gt;The result is a queryable, time-series-aware model of the building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use cases that pay for themselves
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Predictive HVAC tuning.&lt;/strong&gt; Cut energy by 15–30% by learning occupancy patterns instead of running fixed schedules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fault detection and diagnostics.&lt;/strong&gt; Catch failing chillers and leaky dampers weeks before they trigger tenant complaints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Space optimization.&lt;/strong&gt; Use live occupancy to rightsize floors, meeting rooms, and amenities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tenant experience.&lt;/strong&gt; Wayfinding, booking, and indoor air quality dashboards tied to the same model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The architecture that keeps working
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion:&lt;/strong&gt; IoT Hub or MQTT broker at the edge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Azure Digital Twins (DTDL) or an open twin framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics:&lt;/strong&gt; Time-series DB plus a rules engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualization:&lt;/strong&gt; Unity or web-based 3D viewer bound to the twin graph&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where teams get stuck
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating the twin as a dashboard project instead of a data platform&lt;/li&gt;
&lt;li&gt;Underestimating the BIM cleanup work — most IFC exports need heavy normalization&lt;/li&gt;
&lt;li&gt;Ignoring change management — if facilities teams do not trust the twin, nothing ships&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/digital-twins-bim-smart-building-intelligence" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>data</category>
      <category>iot</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Azure DevOps vs GitHub Issues: Choosing the Right PM Stack</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:19:57 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/azure-devops-vs-github-issues-choosing-the-right-pm-stack-4l13</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/azure-devops-vs-github-issues-choosing-the-right-pm-stack-4l13</guid>
      <description>&lt;p&gt;If you are picking a project management stack for an engineering team in 2026, the question is no longer "Jira or not." It is &lt;strong&gt;Azure DevOps or GitHub Issues&lt;/strong&gt; — and the answer matters more than it used to, because the new AI-powered developer features are shipping exclusively on GitHub.&lt;/p&gt;

&lt;p&gt;Here is the honest comparison after running both in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Azure DevOps still wins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise reporting and compliance.&lt;/strong&gt; Boards, queries, and audit trails that a PMO actually trusts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test plans and manual QA workflows.&lt;/strong&gt; Nothing in GitHub comes close.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep integration with the Microsoft stack&lt;/strong&gt; — AAD, Power BI, Office 365, Teams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fine-grained work item hierarchies&lt;/strong&gt; (Epic → Feature → PBI → Task) out of the box.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where GitHub Issues pulls ahead
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copilot and agent features&lt;/strong&gt; ship there first and often only there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects v2&lt;/strong&gt; is finally good — spreadsheet-style views, custom fields, and automation rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything lives next to the code.&lt;/strong&gt; Reviewers, issues, discussions, and CI in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower friction for open source and contractor collaboration.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The practical call
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regulated enterprise with a PMO and test teams?&lt;/strong&gt; Stay on Azure DevOps for now. Use GitHub for source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product engineering team shipping fast?&lt;/strong&gt; Move to GitHub Issues + Projects. The AI tooling gap is widening every quarter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid?&lt;/strong&gt; It works, but pick &lt;em&gt;one&lt;/em&gt; as the source of truth for work items. Duplication kills you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Work item history does not transfer cleanly — export to CSV and archive&lt;/li&gt;
&lt;li&gt;Custom fields in Azure Boards rarely map 1:1 to GitHub Projects&lt;/li&gt;
&lt;li&gt;Pipelines vs Actions is a separate migration — do not do both at once&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/azure-devops-vs-github-issues-choosing-right-pm-stack" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>github</category>
      <category>management</category>
    </item>
    <item>
      <title>RFC 9457: Structured Errors Cut AI Agent Costs 98%</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:18:36 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/rfc-9457-structured-errors-cut-ai-agent-costs-98-o83</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/rfc-9457-structured-errors-cut-ai-agent-costs-98-o83</guid>
      <description>&lt;p&gt;If you are still returning &lt;code&gt;{"error": "Something went wrong"}&lt;/code&gt; from your HTTP APIs in 2026, it is time to upgrade. &lt;strong&gt;RFC 9457&lt;/strong&gt; (Problem Details for HTTP APIs) is now the de facto standard — and it obsoletes the older RFC 7807 that most teams copy-pasted into production years ago.&lt;/p&gt;

&lt;p&gt;Here is what actually changed and what it means for your services.&lt;/p&gt;

&lt;h2&gt;
  
  
  What RFC 9457 defines
&lt;/h2&gt;

&lt;p&gt;A standard JSON (or XML) shape for error responses so clients can reliably parse and act on failures:&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/probs/out-of-credit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"You do not have enough credit."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your current balance is 30, but that costs 50."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"instance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/account/12345/msgs/abc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"balance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"accounts"&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="s2"&gt;"/account/12345"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/account/67890"&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;The required fields are minimal: &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;detail&lt;/code&gt;, and &lt;code&gt;instance&lt;/code&gt;. Everything else is an extension you control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is new vs RFC 7807
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clarifications around extension members&lt;/strong&gt; — you can safely add your own fields without breaking clients&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better guidance on &lt;code&gt;type&lt;/code&gt; URIs&lt;/strong&gt; — they should be stable and dereferenceable documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit support for i18n&lt;/strong&gt; via content negotiation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tightened security guidance&lt;/strong&gt; so you do not leak stack traces or internal IDs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters for your team
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clients can finally handle errors generically.&lt;/strong&gt; No more "every service has its own error shape."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability gets easier.&lt;/strong&gt; Your logs and traces can pivot on &lt;code&gt;type&lt;/code&gt; without custom parsers per service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fewer support tickets.&lt;/strong&gt; A stable &lt;code&gt;instance&lt;/code&gt; URL makes bug reports actually reproducible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pick a single &lt;code&gt;type&lt;/code&gt; URI namespace and document it&lt;/li&gt;
&lt;li&gt;Keep &lt;code&gt;title&lt;/code&gt; human-readable and stable; put the variable bits in &lt;code&gt;detail&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Never put PII or secrets in &lt;code&gt;detail&lt;/code&gt; or extensions&lt;/li&gt;
&lt;li&gt;Map your existing error codes to &lt;code&gt;type&lt;/code&gt; URIs before changing the wire format&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/rfc-9457-structured-errors-cut-ai-agent-costs" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Claude Code Is Reshaping Software Engineering in 2026</title>
      <dc:creator>Hamza A</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:14:14 +0000</pubDate>
      <link>https://dev.to/hamza_a_1dba9c327788c448f/claude-code-is-reshaping-software-engineering-in-2026-4ljf</link>
      <guid>https://dev.to/hamza_a_1dba9c327788c448f/claude-code-is-reshaping-software-engineering-in-2026-4ljf</guid>
      <description>&lt;p&gt;Claude Code is now authoring roughly &lt;strong&gt;4% of all commits on GitHub&lt;/strong&gt;. That is not a rounding error — it is a structural shift in how software gets written.&lt;/p&gt;

&lt;p&gt;Over the last few weeks we dug into what agentic coding actually looks like in production across multiple client teams: where it works, where teams are getting burned, and which workflows are quietly becoming the new default in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline stat
&lt;/h2&gt;

&lt;p&gt;4% of commits sounds small until you remember that a year ago it was essentially zero. The adoption curve is steeper than anything we have seen since the original GitHub Copilot launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  What surprised us
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PR velocity is not the real win.&lt;/strong&gt; Review quality is. Teams that treat Claude Code as a junior dev who needs feedback ship better code, not just faster code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The biggest gains are not from the heaviest users.&lt;/strong&gt; The teams winning are the ones with the tightest guardrails around review, testing, and spec-first prompting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails are the moat, not the model.&lt;/strong&gt; Anyone can point an agent at a repo. Very few teams have figured out the review loop that makes it safe.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where it genuinely saves time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Boilerplate migrations (framework upgrades, test scaffolding, API client generation)&lt;/li&gt;
&lt;li&gt;Reading and summarizing unfamiliar codebases before a refactor&lt;/li&gt;
&lt;li&gt;Writing tests for existing code with clear contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where it creates review debt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Large cross-cutting refactors without a spec&lt;/li&gt;
&lt;li&gt;Anything involving subtle business logic the agent cannot infer from context&lt;/li&gt;
&lt;li&gt;"Just let it run" workflows with no human checkpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 2026 default
&lt;/h2&gt;

&lt;p&gt;Spec-first prompting is becoming the norm. The teams that win treat the prompt like a design doc: acceptance criteria, constraints, non-goals, and a plan the agent has to confirm before touching code.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.horizon-tech.io/en-US/blog/claude-code-reshaping-software-engineering-2026" rel="noopener noreferrer"&gt;Horizon Tech Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>claude</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
