Powell's Law: Time, Progress and the Cost of Interruption in Resilient Systems
A long-form position paper examining time, durable progress and recovery effort as distinct consequences of interruption in resilient systems.
A long-form position paper examining time, durable progress and recovery effort as distinct consequences of interruption in resilient systems.
A practical analysis of GitHub Copilot Pro versus Pro+, including Premium Requests, AI Credits, token pricing, cache usage, model selection and the hidden difficulty of comparing the two billing models.
A practical guide to Temporal Nexus in .NET: what it is, where it fits, how it compares to Event Grid, and how to implement workflow-backed Nexus operations in a real sample.
A detailed review of Temporal's .NET Nexus preview API, with source-linked feedback on what should change before GA.
A practical explanation of durable execution, why retry libraries are not enough, and the WOWL rule: Write Once, Write Last.
The final part of a long-form essay series mapping the likely winners and losers after the AI bubble breaks and the mature AI economy begins.
The seventh part of a long-form essay series arguing that the AI crash, when it comes, will not be the end of AI, but the start of its mature economic phase.
The sixth part of a long-form essay series. The market does not stop believing in AI. It starts doubting who owns it. The pressure map showing how multiple assumptions can weaken at the same time.
The fifth part of a long-form essay series. Firm-ware is the operating logic embedded into the company itself. AI makes that logic programmable.
The fourth part of a long-form essay series arguing that SaaS is more vulnerable to AI than many people believe because SaaS won partly because custom software was too expensive. That compromise is now being repriced.
The third part of a long-form essay series arguing that intelligence alone is not the moat. Durable moats may be context, distribution, workflow, identity, permissions, governance, execution rights, data and systems of record.
The second part of a long-form essay series arguing that early AI companies and interfaces are prototypes of futures they may not own. A prototype can be directionally right and economically doomed.
The first part of a long-form essay series arguing that the AI bubble will burst not because AI is fake, but because AI is real. This opening chapter uses lived experience from the dotcom bubble to explain why real paradigm shifts produce the most dangerous bubbles.
Preface to an eight-part essay series arguing that the AI bubble will burst not because AI is fake, but because AI is real enough to break the market's first ownership story.
I started with a single ‘Temporal .NET skill’ file, then realised I’d built a context-stretching custom agent. Here’s the structure I use now: a small router agent, modular skills, reusable prompts, and MCP-powered observability via Aspire + Temporal docs.
A step-by-step guide to building, publishing, and using a .NET Aspire Hosting Extension for webhook testing.
An adventure coding without coding.
Part 3 of a multi-part blog series on Temporal with .NET Aspire.
Part 2 of a multi-part blog series on Temporal with .NET Aspire.
Part 1 of a multi-part blog series on Temporal with .NET Aspire.
A step-by-step guide to upgrading AstroPaper from v4 to v5, highlighting new features, breaking changes, and migration tips.
Over the past 30 years, distributed systems have undergone a quiet revolution. From crude polling loops to language-native durable execution engines, the way we build and orchestrate resilient business logic has advanced through a series of distinct technological waves.
A step-by-step guide on migrating from WordPress on Digital Ocean VPS to Cloudflare Pages and Astro SSG, including integrating Giscus comments and other benefits.
A step-by-step guide on migrating from WordPress on Digital Ocean VPS to Cloudflare Pages and Astro SSG, including integrating Giscus comments and other benefits.
A step-by-step guide on integrating Giscus comments into AstroPaper v5, including fixes for common issues.
A guide on migrating blog content to Astro, including exporting from WordPress, setting up Astro, importing Markdown files, and cleaning them up using GitHub Copilot.
An exploration of the hidden costs and inefficiencies caused by the overuse of Microsoft Excel in business environments, with recommendations for identifying and addressing these issues.
An exploration of the qualities that define exceptional developers, including T-shaped skills, continuous learning, problem-solving, and the ability to switch between big-picture thinking and detailed focus.
An exploration of name matching challenges in automated systems, discussing fuzzy matching algorithms and machine learning techniques, with insights from a conversation with OpenAI's ChatGPT.
Troubleshooting NServiceBus and RavenDb issues in a .NET application, including solutions for GUID formatting errors and corrupted performance counters after a Windows 10 update.
Discusses the benefits and methods of auto-generating documentation and SDKs for ASP.NET Web API using tools like Swagger and AutoRest.
A comprehensive guide to best practices in web development, covering design/UI, graphics/charts, HTML/JavaScript, data handling, site setup, server configuration, and general process.
An overview of the JavaScript module design pattern, highlighting its benefits for code organization and readability, with resources for further learning.
A detailed guide on setting up SSL with Perfect Forward Secrecy using VirtualMin and StartSSL, including configuration tips and security best practices.
An overview of tools for wireframing and prototyping, including Axure RP and Balsamiq Mockups, highlighting their features and benefits for design and collaboration.
A comprehensive guide to common .htaccess redirects, including examples for single pages, entire sites, subfolders, and advanced redirection techniques using mod_rewrite.
Discusses the challenges and solutions for adding a new column to a large table using FluentMigrator, including handling timeouts and adjusting SQL command timeout settings.
An overview of the P versus NP problem, explaining the difference between the complexity classes P and NP and the significance of determining whether every problem whose solution can be quickly verified can also be quickly solved.
Discusses the challenges and solutions related to SQL Server indexes with AllowRowLocks set to false, including troubleshooting deadlocks and failed deletes, and provides guidance on enabling row locks.
A practical guide on reducing database space usage with a SQL script that identifies tables with high data-per-row ratios, helping to improve database performance.
A practical guide to database migrations in .NET using FluentMigrator, covering challenges with existing databases, deployment strategies with Octopus Deploy and TeamCity, and overcoming migration complexities. This post provides insights into automation, version control, and structured schema changes for efficient database management.
A solution to the Apache2 error "Could not reliably determine the server's fully qualified domain name," including steps to configure ServerName and correct the hosts file on a Digital Ocean VPS with VirtualMin.
A detailed guide on using Powershell and .NET to transfer large amounts of files to the cloud, including challenges faced and solutions implemented for efficient file migration and database updates.
Essential guidelines for developers on implementing encryption, highlighting common pitfalls and recommending best practices for secure cryptographic methods and algorithms.s for developers on implementing encryption, highlighting common pitfalls and recommending best practices for secure cryptographic methods and algorithms.
A humorous recount of the browser wars in 2014, highlighting Chrome's dominance, Firefox's struggle, and Internet Explorer's obsolescence, with playful analogies and reflections on the ongoing competition.of the browser wars in 2014, highlighting Chrome's dominance, Firefox's struggle, and Internet Explorer's obsolescence, with playful analogies and reflections on the ongoing competition.
An exploration of implementing teletype effects in JavaScript, including references to jQuery plugins and a live example on jsFiddle.
A guide on opening a command prompt from Windows Explorer in Vista, Windows 7, and Windows 8, including adding a Visual Studio Command Prompt to the context menu and using Git Bash for Unix-like tools.a command prompt from Windows Explorer in Vista, Windows 7, and Windows 8, including adding a Visual Studio Command Prompt to the context menu and using Git Bash for Unix-like tools.
A guide to fixing the issue where Internet Explorer prompts to save JSON responses when uploading files via AJAX, including a solution for modifying HTTP headers in ASP.NET MVC.
An introduction to Unirest, a lightweight HTTP request library for .NET, including examples of basic POST requests and an overview of its features.
A detailed guide on setting up a Digital Ocean droplet with ZPanel, and configuring DKIM and SPF records for email authentication, including securing the server and installing Spam Assassin.