Imagine inventing something, watching it become an industry standard, and then spending decades apologizing for it.

That's exactly what computing pioneer Sir Tony Hoare did in his legendary talk, "Null References: The Billion-Dollar Mistake”.

As part of the #InfoQ20 campaign, we're revisiting this classic archive video - a must-watch for every software practitioner. It's a powerful lesson in how a seemingly small design decision can shape the entire software industry for decades.

🎬 Watch the classic talk here: https://bit.ly/4aotulm

#ComputerScience #SoftwareEngineering #SoftwareArchitecture #TechHistory

📣 Last Chance to Save €300 with the #BlindBird!

Still thinking about joining #SAG2026? Here's what awaits you during the main conference (Nov 17–18):

💡 50+ sessions & keynotes
🎤 55+ internationally renowned experts
🌐 Expo with leading technology partners
🤝 Get-together with snacks, drinks & games
🍽️ Catering included
📄 Certificate of Participation & presentation slides

>> Secure your ticket before the Blind Bird ends today:
https://t1p.de/1wo8c <<

#SoftwareArchitecture #TechConference

🔌 Don’t migrate every dependency directly.

In ASP.NET Core migrations, ports work best when they describe application needs, not library APIs.

- Wrap SmtpClient behind IEmailSender.
- Move dictionary token storage behind IUserTokenStore.
- Swap adapters when the infrastructure is ready.

https://medium.com/@michael.kopt/use-ports-and-adapters-to-make-asp-net-core-migration-incremental-87fcf73cdf3c

#DotNet #DotNetCore #SoftwareArchitecture #ASPNET #ASPNETCore

🔌 Use Ports and Adapters to Make ASP.NET Core Migration Incremental

Wrap legacy framework dependencies behind stable interfaces so infrastructure can change without rewriting business logic.

Medium

Stop treating SharePoint like a playground for disposable widgets. If your code isn't modular and scalable, you’re just building technical debt. It’s time to master Library Components and build architecture that actually lasts. 🛠️ Get to work. #SPFx #SharePointDev #SoftwareArchitecture 🚀

https://bdking71.wordpress.com/2026/06/29/spfx-is-not-just-for-web-parts-exploring-library-components-and-extensions/

SPFx is Not Just for Web Parts: Exploring Library Components and Extensions.

1,724 words, 9 minutes read time.

Most developers treat SharePoint Framework like a digital skin-graft. They spend their days pushing pixels into web parts, duct-taping custom properties to interfaces, and praying that the next deployment doesn’t fracture their fragile dependency chain. This is the comfort zone, and it is a grave for your career. If you think SPFx is just a playground for building interactive widgets for a modern page, you have already lost the war against technical decay. You are building on sand while the foundation—the infrastructure of your organization—is screaming for order, reusability, and raw, high-performance capability.

When you refuse to master Library Components, you are essentially telling your organization that your code is a disposable artifact, fit only for a single page in a single site collection. That is not engineering; that is glorified templating. True power lies in the abstraction. By failing to push your logic into shared libraries, you are creating a landscape of redundant services, fragmented utilities, and thousands of lines of duplicated, error-prone boilerplate. Your code is bloated because your ambition is small. If your solution cannot scale across a tenant without a copy-paste operation, you have failed the first test of professional accountability.

Why Your Spaghetti Code is Killing Your Credibility

The industry loves to talk about DRY principles as if they were suggestions for a clean desk. They are not. They are the tactical equivalent of ammunition conservation. When you build utility functions, API wrappers, or complex business logic directly into a web part, you are effectively burying your best weapons in the dirt where they cannot be recovered. You create a tight coupling that binds your functionality to the lifecycle of a specific UI component. When the UI changes, your logic dies with it. This is technical cowardice disguised as expediency.

True architects understand that a Library Component is not just a bundle of TypeScript files; it is a declaration of intent. It says that you have done the work to identify what is universal and what is ephemeral. When you decouple your logic into a library, you are building a defensive perimeter around your intellectual property. You can version it, you can unit test it in isolation, and you can deploy it to multiple projects without risking the integrity of the host. If your code isn’t modular enough to be imported into a completely different solution, it isn’t software—it’s just a script you’re hoping stays upright.

Tactical Implementation: The Isolated Utility Pattern

Stop importing your API helpers from a local folder inside your src/components directory. Instead, build a dedicated Library Component solution. Export your logic as a concrete class or a set of pure functions. When you consume it in your web part, you aren’t referencing a file path; you are referencing an installed package version.

// Inside your Library Component project export class TenantSecurityVault { public static async validateClaims(token: string): Promise<boolean> { // Hardened logic here return true; } } // Inside your consuming Web Part (package.json) "dependencies": { "@my-corp/shared-security": "1.0.4" }

This single act of discipline forces you to define your interface before you write your implementation. It forces you to think about breaking changes before they hit production. It makes you a gatekeeper of your own codebase rather than a victim of it.

The Invisible Hand: Why Extensions Are Your Force Multipliers

If Library Components are the foundation of your fortress, Extensions are the scouts patrolling the perimeter. Most developers treat Application Customizers or Field Customizers as minor inconveniences—little scripts to inject a header or change a cell color. They lack the vision to see that these tools grant you the ability to manipulate the SharePoint DOM and user experience across the entire tenant, regardless of whether a page contains your specific web part. When you master Extensions, you stop being a localized contributor and start being a tenant-wide architect.

An Extension doesn’t care about your web part’s isolated scope. It operates at the Application level, intercepting page loads, global navigation, and rendering events before the user even realizes what’s happening. If you aren’t using these to enforce global branding, telemetry, or security headers, you are ignoring the most potent lever available to you. You are building in the dark. A poorly managed environment is a playground for chaos, and it is your job to impose order through systemic, tenant-wide interventions that exist outside the individual page lifecycle.

Tactical Implementation: The Global Telemetry Hook

Stop relying on hit-or-miss logging inside every individual web part. Use an Application Customizer to attach a global event listener that monitors every click or page navigation across your tenant. This is how you gain visibility into how your users actually interact with your architecture.

// Inside your Application Customizer's onInit public onInit(): Promise<void> { this.context.application.navigatedEvent.add(this, (args) => { // Inject global telemetry here TelemetryService.trackPageLoad(window.location.href); }); return Promise.resolve(); }

This ensures that no matter what new, half-baked web part another developer drops onto a page, your oversight mechanism is still firing. It provides you with a source of truth that exists independent of the UI components you’ve deployed.

If you are still manually auditing usage by visiting pages one by one, why should anyone trust your ability to manage a production environment at scale?

The War Against Mediocrity: Hardening Your Deployment Pipeline

The final bridge between a hobbyist and a lead architect is the deployment pipeline. You cannot claim to build sophisticated Library Components or robust Extensions if your deployment process consists of manual updates to a local package.json and a prayer-filled gulp bundle --ship. You need to treat your SharePoint solutions as immutable, versioned assets. If you are not using semantic versioning and automated dependency management, you are not evolving; you are just delaying the inevitable collapse of your tenant.

Building for SharePoint is not about writing code that works once; it is about writing code that survives the environment. Every library version must be treated as a contract. When you push a change to a library component, you must understand the ripple effect it has on every web part that consumes it. If you are not utilizing private feeds or a robust CI/CD pipeline to manage these dependencies, you are flying blind. Stop treating your code like a static document and start treating it like a living, breathing system that requires constant, rigorous maintenance to keep the rot at bay.

Tactical Implementation: Strict Dependency Versioning

Never use * or latest in your package.json for internal libraries. Lock your dependencies to specific versions to prevent unexpected breakages during deployment. If a bug is introduced in a library, you should be able to roll back to a specific, stable release instantly.

// package.json for your web part "dependencies": { "@my-corp/shared-ui-components": "2.1.4" // Not ^2.1.4, not latest. Specific. }

This level of control separates the pros from the amateurs. The pro knows exactly what code is running in production and how it got there. The amateur is still wondering why the “last stable build” suddenly broke the navigation bar.

If you cannot guarantee that your deployment will behave identically in every site collection, why are you authorized to touch the production environment at all?

Conclusion: Take Command of Your Codebase

The transition from a web-part-obsessed coder to a true architect is painful. It requires you to strip away the crutches of tight coupling, manual deployment, and localized thinking. It demands that you build libraries that stand on their own and extensions that command the tenant-wide user experience. The rot—the spaghetti code, the duplicated utilities, the lack of oversight—is not a SharePoint problem. It is a character problem. It is the result of a developer who values speed over structural integrity and convenience over professional discipline.

Stop looking for the easy way to build the next widget. Start looking for the way to build the infrastructure that makes widgets obsolete. Write your code with the assumption that you will be held accountable for every line six months from now when the production environment is on fire. If you aren’t building for scalability and reliability, you aren’t building at all—you are just waiting for the next technical debt crisis to end your career. The tools are here. The path is clear. Now, start building something that actually lasts.

Call to Action

Stop playing in the sandbox. The transition from a web-part-obsessed coder to a true architect is not a promotion you wait for; it is an identity you claim through sheer technical force. You are currently the architect of your own failure if you continue to treat your logic as a throwaway accessory to a UI. Every line of duplicated code is a confession of your laziness. Every manual deployment is a surrender to the chaos of the environment.

You have the tools to build systems that scale, libraries that endure, and extensions that govern. If you aren’t actively dismantling your technical debt and building a robust, versioned, and modular infrastructure, you are not a developer—you are a liability. Stop begging for easier tasks and start demanding higher standards of yourself. Refactor your arrogance into discipline. Audit your dependencies. Harden your lifecycle. The next time you sit down at the terminal, don’t ask what you can build; ask what you can systematize so you never have to build it again. You are the only person responsible for the quality of your output. Now, get back to work and make something that survives the fire.dr

SUPPORTSUBSCRIBECONTACT ME

D. Bryan King

Sources

Disclaimer:

The views and opinions expressed in this post are solely those of the author. The information provided is based on personal research, experience, and understanding of the subject matter at the time of writing. Readers should consult relevant experts or authorities for specific guidance related to their unique situations.

Related Posts

Rate this:

#APIIntegration #ApplicationCustomizer #architecturalDesign #CICD #cleanCode #codeMaintenance #codeModularity #codeQuality #codeRefactoring #customSharePointDevelopment #dependencyManagement #developerDiscipline #developerProductivity #DRYPrinciples #enterpriseApplicationDevelopment #enterpriseWebDevelopment #FieldCustomizer #frontEndDevelopment #fullStackSharePoint #LibraryComponents #Microsoft365Development #modernSharepoint #modularCode #productionStability #ProfessionalDevelopment #React #semanticVersioning #SharePointDevelopment #SharePointEcosystem #SharePointFramework #SharePointFrameworkTraining #SharePointInfrastructure #SharePointOnline #SharePointSolutions #SharePointTenant #softwareArchitecture #softwareCraftsmanship #softwareDesignPatterns #softwareEngineering #softwareScalability #SPFx #SPFxBestPractices #SPFxExtensions #technicalDebt #technicalLeadership #TypeScript #TypeScriptModules #unitTesting #webPartDevelopment

Most teams ask the wrong question about AI deployment. 🤖 Instead of obsessing over SOTA benchmarks, we need to ask: what’s actually good enough for the task?

Part 1 of our series breaks down the architecture driving pragmatic choices. It’s the map for everything ahead. Don’t get lost in feature bloat.

Read the full analysis: https://post.kapualabs.com/p4tycsm7

#ArtificialIntelligence #EnterpriseAI #SoftwareArchitecture

The Machine Behind "Good Enough" (0 of 11)

Cheapest LLM that's good enough for the work you're doing — per step of your pipeline. Updated weekly.

Recently I started writing up the things I run into at work.

This one reminded me how easy it still is to underestimate distributed systems. Even when you know better, you don't always think far enough ahead, and it gets you anyway.

https://marvinstrauch.de/idempotency-and-reconciliation-learned-the-hard-way/

#golang #softwarearchitecture #programming

Idempotency and reconciliation, learned the hard way - Marvin Strauch

A deleted machine that keeps running, and a snapshot that refuses to disappear. Two stories, one cause, about partial failures, idempotency, and reconciliation in distributed systems.

Marvin Strauch

RE: https://mastodon.social/@matyo91/116822528467675141

Pendant longtemps, la question était simple : comment rendre PHP plus rapide ?

Des frameworks comme Phalcon ont apporté une réponse très rationnelle : déplacer une partie du framework en natif (C / Zephir) pour réduire l’overhead MVC.
Et honnêtement, ce choix reste encore pertinent aujourd’hui sur certains workloads. ⚡

👉 Mon article complet ici : “Where Should Native Code Live?”

#PHP #Architecture #Symfony #Phalcon #Async #DDD #CQRS #SoftwareArchitecture #Darkwood #Flow

My routing agent sent the same task to the same sub-agent 47 times. On attempt 48 it stopped, thought hard, burned the tokens, and arrived at the exact route it had already arrived at 47 times before.

I knew the obvious fix. I also knew it was wrong.

A 1987 paper on general intelligence had already solved this. From run four onward, the planner stops running entirely.

https://praveenlavu.com/dispatch/soar-chunking-agents

#agents #llm #routing #softwarearchitecture

Caching LLM Agent Routing Decisions · Praveen Lavu

Your LLM routing agent re-decides the same dispatch every call. A task-fingerprint cache, not embedding similarity, skips the planner once the route is proven.

Praveen Lavu

𝗢𝘂𝗿 𝗕𝗹𝗶𝗻𝗱 𝗕𝗶𝗿𝗱 𝗷𝘂𝘀𝘁 𝗼𝗽𝗲𝗻𝗲𝗱 𝗼𝗻𝗲 𝗲𝘆𝗲 🐦😉 Surprise! We couldn't keep it a secret any longer. While our Blind Bird ticket is still available until Tuesday, June 30, we're already revealing the first highlights of #SAG2026! 🥳

Take a first look at the growing program and get your Blind Bird ticket before prices for the main conference (November 17-18) increase next Wednesday! 👉 https://t1p.de/hgd0g

#SAGconf #SoftwareArchitecture #iSAQB