Skip to main content

Command Palette

Search for a command to run...

Start Here

Start Here

This blog is a structured series, not a random collection of posts. Each article is an architectural decision record: a problem, what was considered, what was chosen, and what it costs.

If you are new here, pick the reading path that matches your goal.


Path A — "I want to understand the PowerCSharp ecosystem"

Read these in order. Each post builds on the previous.

  1. Introducing PowerCSharp: An Ecosystem Built on 20 Years of C# Architecture The blog launch post. What PowerCSharp is, why it exists, the three design principles, and the full package topology map.

  2. One Rule, 13 Packages: How I Designed the PowerCSharp Package Topology The dependency direction rule, three version families, why each package boundary exists, and the cost of modularity.

  3. 100+ Extension Methods: When Breadth Is a Design Decision How the Extensions layer is organized, the Dynamic LINQ production story, and CWE-73 path security.

After these three posts, use the Ecosystem page as a permanent reference.


Path B — "I want to understand the Features engine"

Start with Path A first, then continue:

  1. Why I Built a Feature Module Engine — and Why Feature Flag Libraries Weren't Enough The architectural decision record for PowerCSharp.Features. Module abstraction, composite flag resolver, safe-off floor, startup transparency.

  2. The Composite Flag Resolver (coming soon) How N providers are chained with defined precedence. How to build a custom IFeatureFlagProvider for Azure App Config, AWS SSM, or a database.


Path C — "I want to implement caching in my application"

Start with Path A posts 1–2, then:

  1. Building a Production Disk Cache in .NET: Atomic Writes, Cross-Process File Locks, and LRU Eviction The engineering behind PowerCSharp.Feature.Cache.Disk. Partial write prevention, cross-process file locking, sidecar metadata, background cleanup.

  2. CacheResult vs. T? — Why Typed Cache Results Matter for Correctness (coming soon) The correctness argument for discriminated cache results over nullable returns.

Use the Ecosystem page → Layer 3 section to pick the right cache provider for your use case.


Path D — "I want to build my own Feature module"

Read Path B fully, then:


Path E — "I want to follow the design decisions as they happen"

Subscribe to the blog. Posts follow this approximate cadence:

Month Topics
1 Features engine ADRs
2 BuiltInFeatures architecture
3 Cache abstractions
4 Cache provider implementations
5 Enterprise patterns (multi-tier cache, feature gating vs. feature flags)
6 PowerCSharp ecosystem (Extensions, Dynamic LINQ, Clean Architecture template)

Full calendar in the blog strategy (internal).


Update policy for this page

This page is updated whenever a new post is published. If a link shows (coming soon), the post is planned and in draft. Posts are published in the order listed — each one assumes you have read the ones before it in the same path.