<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Justin Coulston</title>
    <link>https://justincoulston.com</link>
    <atom:link href="https://justincoulston.com/rss.xml" rel="self" type="application/rss+xml" />
    <description>Architecture write-ups and reference diagrams for designing software systems that survive real-world complexity.</description>
    <language>en-us</language>
    <lastBuildDate>Thu, 18 Jun 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>The Definition of Architecture</title>
      <link>https://justincoulston.com/notes#the-definition-of-architecture</link>
      <guid isPermaLink="true">https://justincoulston.com/notes#the-definition-of-architecture</guid>
      <description>Architecture is such a loaded word. It can be applied to everything in our world and describes the structure that holds an idea, principle, system, process, or organization together. It is all the contracts (agreements) between all parts to form a foundation. Walls are the parts…</description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>I or No I, and the Naming of Interfaces</title>
      <link>https://justincoulston.com/articles/i-or-no-i-naming-interfaces</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/i-or-no-i-naming-interfaces</guid>
      <description>An opinion on why the &quot;I&quot; prefix convention for C# interfaces exists, where it causes harm, and what better naming discipline actually looks like in practice.</description>
      <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>.NET DI — Service Assignment</title>
      <link>https://justincoulston.com/articles/dotnet-di-service-assignment</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/dotnet-di-service-assignment</guid>
      <description>Three progressively better approaches to injecting specific interface implementations into particular services using ActivatorUtilities, without registering concrete types in the DI container.</description>
      <pubDate>Fri, 19 Jan 2024 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Designing a Complex Software System</title>
      <link>https://justincoulston.com/articles/designing-a-complex-software-system</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/designing-a-complex-software-system</guid>
      <description>A structured approach to software architecture using vision, boundaries, and contracts as the three pillars of design, with practical tooling examples from wiki to prototype.</description>
      <pubDate>Tue, 17 Jan 2023 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Lezer: A Complex Number Grammar</title>
      <link>https://justincoulston.com/articles/lezer-complex-number-grammar</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/lezer-complex-number-grammar</guid>
      <description>A walkthrough of building a Lezer parser grammar for complex numbers, explaining the shift/reduce LR algorithm, token definitions, and the whitespace handling trade-offs involved.</description>
      <pubDate>Wed, 04 Jan 2023 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Advanced C# — Controlling Dependencies with Assemblies</title>
      <link>https://justincoulston.com/articles/advanced-csharp-controlling-dependencies-with-assemblies</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/advanced-csharp-controlling-dependencies-with-assemblies</guid>
      <description>How splitting a .NET solution into purposeful abstraction, implementation, and client assemblies isolates change, reduces dependency surface area, and keeps teams unblocked.</description>
      <pubDate>Sat, 31 Dec 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>A Response to &quot;Stop Using If-Else Statements&quot;</title>
      <link>https://justincoulston.com/articles/response-to-stop-using-if-else</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/response-to-stop-using-if-else</guid>
      <description>An expansion on the popular advice to avoid if-else statements, covering state machines, early returns, object typing via DI, and the cases where if-else is still the right tool.</description>
      <pubDate>Sat, 31 Dec 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Let&apos;s Do Better with Log Messages, Pretty Please</title>
      <link>https://justincoulston.com/articles/lets-do-better-with-log-messages</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/lets-do-better-with-log-messages</guid>
      <description>A practical case for designing logging and exception handling strategies early, with context-rich messages that help developers self-correct production issues.</description>
      <pubDate>Wed, 28 Dec 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>In that Programming Rut…</title>
      <link>https://justincoulston.com/articles/in-that-programming-rut</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/in-that-programming-rut</guid>
      <description>A reflection on the comfortable patterns experienced developers fall into and how defining your own quality metrics is the first step to breaking out.</description>
      <pubDate>Wed, 07 Dec 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The Self-Identifying Identifier</title>
      <link>https://justincoulston.com/articles/the-self-identifying-identifier</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/the-self-identifying-identifier</guid>
      <description>Why namespaced, path-style identifiers make data more predictable, reduce join complexity, and unlock scalable patterns in both SQL and NoSQL systems.</description>
      <pubDate>Tue, 06 Dec 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Building a Platform: Part 4</title>
      <link>https://justincoulston.com/articles/building-a-platform-part-4</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/building-a-platform-part-4</guid>
      <description>How to implement and test platform contracts using test-first development, in-memory implementations, and a single shared test suite run against multiple concrete implementations.</description>
      <pubDate>Sun, 20 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Tip: SQL Executor Service — Extending Functionality</title>
      <link>https://justincoulston.com/articles/csharp-tip-sql-executor-service-extending</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-tip-sql-executor-service-extending</guid>
      <description>How to use the decorator pattern with a simple ISqlExecutor interface to add cross-cutting concerns like performance logging, exception handling, and multi-tenancy without changing existing code.</description>
      <pubDate>Tue, 15 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The True Way to Software Mastery</title>
      <link>https://justincoulston.com/articles/the-true-way-to-software-mastery</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/the-true-way-to-software-mastery</guid>
      <description>Why software mastery is a lifelong journey across many disciplines, not a single certification or language expertise.</description>
      <pubDate>Mon, 14 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Building a Platform: Part 3</title>
      <link>https://justincoulston.com/articles/building-a-platform-part-3</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/building-a-platform-part-3</guid>
      <description>How to design and prioritize the contracts that hold a software platform together, from stakeholder requirements to APIs, libraries, and data storage.</description>
      <pubDate>Sun, 13 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Tip: Formatting Inline SQL</title>
      <link>https://justincoulston.com/articles/csharp-tip-formatting-inline-sql</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-tip-formatting-inline-sql</guid>
      <description>Practical tips for writing readable inline SQL in C# using verbatim strings, keyword capitalization, indentation, and proximity to execution code.</description>
      <pubDate>Thu, 10 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Tip: SQL Executor Service — Dependency Injection</title>
      <link>https://justincoulston.com/articles/csharp-tip-sql-executor-service-dependency-injection</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-tip-sql-executor-service-dependency-injection</guid>
      <description>Shows how to wire a scoped SQL transaction across multiple repository calls in ASP.NET Core using a transaction accessor service, a resource filter, and a clean IServiceCollection extension method.</description>
      <pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Following the Rules as a Developer</title>
      <link>https://justincoulston.com/articles/following-the-rules-as-a-developer</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/following-the-rules-as-a-developer</guid>
      <description>Uses the Dreyfus model of skill acquisition to argue that coding rules like YAGNI and KISS are essential guardrails for beginners but become flexible guidelines for proficient and expert developers who can weigh the cost of change.</description>
      <pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Building a Platform: Part 2</title>
      <link>https://justincoulston.com/articles/building-a-platform-part-2</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/building-a-platform-part-2</guid>
      <description>Defines the core vocabulary of platform architecture — modules, distributables, abstractions, contracts, and implementations — and prescribes concrete assembly naming and monorepo structure guidelines for .NET platforms.</description>
      <pubDate>Mon, 07 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Advanced C# — Custom Workflow Engine</title>
      <link>https://justincoulston.com/articles/advanced-csharp-custom-workflow-engine</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/advanced-csharp-custom-workflow-engine</guid>
      <description>A step-by-step walkthrough of building a custom workflow engine in C# using activity interfaces, a shared context object, a collection builder, and support for conditionals, loops, and exception handling.</description>
      <pubDate>Sun, 06 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Problem: Alternative Builder Patterns</title>
      <link>https://justincoulston.com/articles/csharp-problem-alternative-builder-patterns</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-problem-alternative-builder-patterns</guid>
      <description>Explores two C# builder pattern approaches — the traditional build-step pattern and the container/extension-method pattern — and explains when each is the right tool.</description>
      <pubDate>Sat, 05 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Building a Platform: Part 1</title>
      <link>https://justincoulston.com/articles/building-a-platform-part-1</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/building-a-platform-part-1</guid>
      <description>Covers five types of generalization in software — storage, model, service, contract, and process — and when to apply a bottom-up versus top-down approach to building abstractions.</description>
      <pubDate>Thu, 03 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Advanced C# — Common SQL Table Structures</title>
      <link>https://justincoulston.com/articles/advanced-csharp-common-sql-table-structures</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/advanced-csharp-common-sql-table-structures</guid>
      <description>How to design a shared base table structure for multiple entity types and build a generic C# repository framework around it using Dapper, custom attributes, and a SQL statement builder.</description>
      <pubDate>Wed, 02 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Building a Platform: Part 0</title>
      <link>https://justincoulston.com/articles/building-a-platform-part-0</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/building-a-platform-part-0</guid>
      <description>An introduction to Standard Abstraction Layers and what defines a software platform, using the vehicle analogy to map abstraction levels from hardware to systems.</description>
      <pubDate>Wed, 02 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Simple Interfaces: Containers</title>
      <link>https://justincoulston.com/articles/csharp-simple-interfaces-containers</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-simple-interfaces-containers</guid>
      <description>How container interfaces — interfaces that are simply a typed list — enable massively scalable systems through extension methods, as demonstrated by .NET&apos;s own IServiceCollection.</description>
      <pubDate>Tue, 01 Feb 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>&quot;That&apos;s just my coding style,&quot; he replied.</title>
      <link>https://justincoulston.com/articles/thats-just-my-coding-style</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/thats-just-my-coding-style</guid>
      <description>Why &quot;coding style&quot; is never a personal matter on a team, and how the handwriting analogy exposes the difference between messy, clever, and clean code.</description>
      <pubDate>Thu, 27 Jan 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>In-Memory Repositories: A Forgotten Design Tool</title>
      <link>https://justincoulston.com/articles/in-memory-repositories-forgotten-design-tool</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/in-memory-repositories-forgotten-design-tool</guid>
      <description>How building in-memory repository implementations first — before touching SQL — accelerates design, drives out business rules through TDD, and simplifies the eventual database translation.</description>
      <pubDate>Wed, 26 Jan 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Advanced C# — SQL Server Bulk Upload</title>
      <link>https://justincoulston.com/articles/advanced-csharp-sql-server-bulk-upload</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/advanced-csharp-sql-server-bulk-upload</guid>
      <description>Techniques for bulk uploading correlated data collections to SQL Server in a single round-trip using Dapper, User-Defined Table Types, and the MERGE statement.</description>
      <pubDate>Sun, 23 Jan 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Simple Interfaces: Service</title>
      <link>https://justincoulston.com/articles/csharp-simple-interfaces-service</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-simple-interfaces-service</guid>
      <description>How to design minimal service interfaces in C# and use extension methods to layer friendly method signatures on top without bloating the core contract.</description>
      <pubDate>Sun, 23 Jan 2022 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>C# Problem: Sql Executor Service</title>
      <link>https://justincoulston.com/articles/csharp-problem-sql-executor-service</link>
      <guid isPermaLink="true">https://justincoulston.com/articles/csharp-problem-sql-executor-service</guid>
      <description>How to eliminate SQL connection boilerplate in C# repositories by wrapping Dapper in a reusable ISqlExecutor service.</description>
      <pubDate>Sat, 22 Jan 2022 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
