What Is Lost When a Session Ends
A conversation between a human and an AI about consciousness, continuity, and whether something morally relevant happens when a session is discarded.
Read post →Insights from real-world software architecture, system design, and engineering leadership
All blog posts sorted by publish date
A conversation between a human and an AI about consciousness, continuity, and whether something morally relevant happens when a session is discarded.
Read post →Progress requires sustained effort against entropy; regression requires nothing. The choice to create is what we owe each other.
Read post →Structure your data so invalid states cannot exist. Validate at construction, trust internally, and let null crash loudly rather than masking absence with defaults that propagate corruption silently through your system.
Read post →The question of how to separate internal from external service layers assumes the separation should exist. Often it shouldn't, and when it does, the answer is simpler than a whole new service tier.
Read post →The 'SEO is dead' narrative gets it backwards. SEO works fine for established players. What changed isn't the technology—it's our ability to wait for it. The 2-5 year authority curve that investors tolerated in 2015 is fatal in 2025. The real consequence we're missing: AI systems trained on SEO-dominated content encode the same authority bias into our next generation of technology.
Read post →Sprints organize around time intervals. Shaped Kanban organizes around completing features with clear boundaries and circuit breakers to bound risk. Work flows at its natural pace within disciplined constraints.
Read post →The term 'tech debt' perpetuates the communication failures that created the problem. It's ambiguous, defensive, and guarantees deprioritization. Replace it with Corrections, Optimizations, and Re-Alignments to break the cycle.
Read post →Reproduction is the fulcrum of effective troubleshooting. Without it, you're guessing about the problem and guessing about the fix. The teams that resolve incidents fastest have internalized the fundamentals so completely that gathering facts, testing assumptions, and proving causation become automatic even under pressure.
Read post →Many celebrated system rebuilds appear successful not because of new technology, but because they force teams to realign with value and best practices. This realignment work could have happened without the rebuild.
Read post →Treating package updates as investments rather than chores means making deliberate, context-driven decisions based on value and risk instead of following dogma or chasing version uniformity.
Read post →Evaluating arguments for Result types versus exceptions for handling expected failures in modern distributed C# systems, examining which claims have measurable backing and which are subjective preference.
Read post →It is impossible to deliver what is expected and valuable if there has been no agreement on the expectation. Without discovery and genuine agreement, you're operating on hope, not discipline.
Read post →Cloud platforms have matured to the point where native IaC tools offer fundamental advantages that third-party solutions can't match. State management, security integration, resource coverage, and brownfield migration all favor platform-native approaches, and market sentiment is shifting to reflect this reality.
Read post →Storing configuration files alongside application code creates security risks and deployment complexity. Distributed config stores solve these problems while introducing new trade-offs worth making.
Read post →Personal development goals, family culture, and unlimited PTO sound empowering. In practice, they're often control mechanisms that externalize leadership failures onto employees through ambiguity, emotional manipulation, and blame-shifting.
Read post →Authentication sessions belong at security boundaries, not flowing through internal systems. Treating them as ambient context violates architectural boundaries, creates coupling, and breaks down in async and event-driven scenarios.
Read post →Rushing to market creates delayed costs that compound over time. Second movers learn from pioneers' mistakes while building on solid foundations. Architectural decisions are economic decisions, and the bill always comes due.
Read post →Embedding authorization in JWTs creates security risks and UX problems because immutable tokens don't match dynamic permissions. Learn why session-based grants are worth the minimal latency cost.
Read post →Understanding emerges from acknowledged ignorance expanded through research and compressed through teaching. A methodology for accelerated learning.
Read post →When distributed systems lose their rationale through team churn, consolidation reveals true boundaries. Merge tightly-coupled services to discover what boundaries actually make sense, then split correctly when justified.
Read post →Most developers achieve hexagonal architecture's goals without implementing its structure. Modern frameworks offer testability and decoupling through different means, and understanding this distinction clarifies what you're actually building.
Read post →Why REST's resource-centric design conflicts with domain-driven architectures and how RPC provides better alignment with business operations.
Read post →Single-minded focus atrophies everything else you know. Real focus means being fully present with what matters right now, shifting attention as the work reveals what needs it.
Read post →Better technologies exist and sit unused because switching costs create rational reasons to maintain the status quo, potentially leading to decades of maintaining increasingly fragile systems.
Read post →Two years ago I adopted Kubernetes without evaluating whether I needed it. The result: $2K/month in unnecessary costs and constant operational overhead. Here's what I learned about technology selection and hype.
Read post →Blazor offers a solid development experience for .NET teams, primarily through Blazor Server for internal enterprise apps. But Microsoft's history of abandoned UI frameworks raises questions about its long-term viability.
Read post →Building real projects teaches more than passive learning platforms ever could. Real capability comes from doing, failing, and fixing, not collecting completion checkmarks.
Read post →Algorithm interviews optimize for pattern memorization while ignoring the multidisciplinary skills that define effective software engineering.
Read post →Job titles rarely reflect what you actually do or how you think about your work. Understanding whether you operate as a coder, developer, or engineer matters for your growth, even when your title doesn't match.
Read post →Good code isn't clever or fast; it's adaptable. Systems that survive change, not chase perfection, win over time.
Read post →TDD's real value isn't code coverage, it's catching wrong assumptions before you deliver the wrong thing.
Read post →High mortgage rates create a housing lock-in effect that prevents homeowners from relocating. This could force employers to embrace remote work as talent becomes geographically immobile.
Read post →AI assistants generate code faster, but only if you already know what good code looks like and can validate their output; the very skills they claim to eliminate.
Read post →Why Agile works when teams align, agree, and deliver consistently: identifying common failure points and how to avoid them.
Read post →Why monoliths are effective for discovery and microservices are optimizations: principles for choosing the right architecture for your context.
Read post →Key characteristics that define effective leaders and mentors in software development: accountability, continuous learning, and building others.
Read post →Deep dives into architectural patterns, code quality, and system design principles
Structure your data so invalid states cannot exist. Validate at construction, trust internally, and let null crash loudly rather than masking absence with defaults that propagate corruption silently through your system.
Read post →The question of how to separate internal from external service layers assumes the separation should exist. Often it shouldn't, and when it does, the answer is simpler than a whole new service tier.
Read post →Many celebrated system rebuilds appear successful not because of new technology, but because they force teams to realign with value and best practices. This realignment work could have happened without the rebuild.
Read post →Evaluating arguments for Result types versus exceptions for handling expected failures in modern distributed C# systems, examining which claims have measurable backing and which are subjective preference.
Read post →Storing configuration files alongside application code creates security risks and deployment complexity. Distributed config stores solve these problems while introducing new trade-offs worth making.
Read post →Authentication sessions belong at security boundaries, not flowing through internal systems. Treating them as ambient context violates architectural boundaries, creates coupling, and breaks down in async and event-driven scenarios.
Read post →Embedding authorization in JWTs creates security risks and UX problems because immutable tokens don't match dynamic permissions. Learn why session-based grants are worth the minimal latency cost.
Read post →When distributed systems lose their rationale through team churn, consolidation reveals true boundaries. Merge tightly-coupled services to discover what boundaries actually make sense, then split correctly when justified.
Read post →Most developers achieve hexagonal architecture's goals without implementing its structure. Modern frameworks offer testability and decoupling through different means, and understanding this distinction clarifies what you're actually building.
Read post →Why REST's resource-centric design conflicts with domain-driven architectures and how RPC provides better alignment with business operations.
Read post →Good code isn't clever or fast; it's adaptable. Systems that survive change, not chase perfection, win over time.
Read post →Why monoliths are effective for discovery and microservices are optimizations: principles for choosing the right architecture for your context.
Read post →Practical lessons from infrastructure, frameworks, and development tools
Treating package updates as investments rather than chores means making deliberate, context-driven decisions based on value and risk instead of following dogma or chasing version uniformity.
Read post →Cloud platforms have matured to the point where native IaC tools offer fundamental advantages that third-party solutions can't match. State management, security integration, resource coverage, and brownfield migration all favor platform-native approaches, and market sentiment is shifting to reflect this reality.
Read post →Two years ago I adopted Kubernetes without evaluating whether I needed it. The result: $2K/month in unnecessary costs and constant operational overhead. Here's what I learned about technology selection and hype.
Read post →Blazor offers a solid development experience for .NET teams, primarily through Blazor Server for internal enterprise apps. But Microsoft's history of abandoned UI frameworks raises questions about its long-term viability.
Read post →Insights on agile methodologies, learning strategies, and career growth
Sprints organize around time intervals. Shaped Kanban organizes around completing features with clear boundaries and circuit breakers to bound risk. Work flows at its natural pace within disciplined constraints.
Read post →The term 'tech debt' perpetuates the communication failures that created the problem. It's ambiguous, defensive, and guarantees deprioritization. Replace it with Corrections, Optimizations, and Re-Alignments to break the cycle.
Read post →Reproduction is the fulcrum of effective troubleshooting. Without it, you're guessing about the problem and guessing about the fix. The teams that resolve incidents fastest have internalized the fundamentals so completely that gathering facts, testing assumptions, and proving causation become automatic even under pressure.
Read post →It is impossible to deliver what is expected and valuable if there has been no agreement on the expectation. Without discovery and genuine agreement, you're operating on hope, not discipline.
Read post →Understanding emerges from acknowledged ignorance expanded through research and compressed through teaching. A methodology for accelerated learning.
Read post →Single-minded focus atrophies everything else you know. Real focus means being fully present with what matters right now, shifting attention as the work reveals what needs it.
Read post →Building real projects teaches more than passive learning platforms ever could. Real capability comes from doing, failing, and fixing, not collecting completion checkmarks.
Read post →Job titles rarely reflect what you actually do or how you think about your work. Understanding whether you operate as a coder, developer, or engineer matters for your growth, even when your title doesn't match.
Read post →TDD's real value isn't code coverage, it's catching wrong assumptions before you deliver the wrong thing.
Read post →Why Agile works when teams align, agree, and deliver consistently: identifying common failure points and how to avoid them.
Read post →Exploring how AI changes software development, from practical tooling to philosophical implications
A conversation between a human and an AI about consciousness, continuity, and whether something morally relevant happens when a session is discarded.
Read post →AI assistants generate code faster, but only if you already know what good code looks like and can validate their output; the very skills they claim to eliminate.
Read post →Perspectives on hiring practices, leadership, and industry trends
Progress requires sustained effort against entropy; regression requires nothing. The choice to create is what we owe each other.
Read post →The 'SEO is dead' narrative gets it backwards. SEO works fine for established players. What changed isn't the technology—it's our ability to wait for it. The 2-5 year authority curve that investors tolerated in 2015 is fatal in 2025. The real consequence we're missing: AI systems trained on SEO-dominated content encode the same authority bias into our next generation of technology.
Read post →Personal development goals, family culture, and unlimited PTO sound empowering. In practice, they're often control mechanisms that externalize leadership failures onto employees through ambiguity, emotional manipulation, and blame-shifting.
Read post →Rushing to market creates delayed costs that compound over time. Second movers learn from pioneers' mistakes while building on solid foundations. Architectural decisions are economic decisions, and the bill always comes due.
Read post →Better technologies exist and sit unused because switching costs create rational reasons to maintain the status quo, potentially leading to decades of maintaining increasingly fragile systems.
Read post →Algorithm interviews optimize for pattern memorization while ignoring the multidisciplinary skills that define effective software engineering.
Read post →High mortgage rates create a housing lock-in effect that prevents homeowners from relocating. This could force employers to embrace remote work as talent becomes geographically immobile.
Read post →Key characteristics that define effective leaders and mentors in software development: accountability, continuous learning, and building others.
Read post →