# Steve McDougall — Personal Site Practical engineering education, courses, and resources for the modern PHP & Laravel developer. ## Core Pages - [Home](https://www.juststeveking.com/) - Practical API Design & Laravel Architecture Education - [Articles](https://www.juststeveking.com/articles/) - Opinionated articles on PHP, Laravel, and APIs - [Guides](https://www.juststeveking.com/guides/) - Comprehensive written guides and references - [Series](https://www.juststeveking.com/series/) - Step-by-step learning series - [Videos](https://www.juststeveking.com/videos/) - Video archives and live coding - [Talks](https://www.juststeveking.com/talks/) - Presentation slides and slides list - [Podcasts](https://www.juststeveking.com/podcasts/) - Podcast appearances - [Work](https://www.juststeveking.com/work/) - Career history and CV details - [Contributions](https://www.juststeveking.com/contributions/) - Open-source contributions aggregated by organisation - [Career Framework](https://www.juststeveking.com/career-framework/) - Interactive levels framework - [About](https://www.juststeveking.com/about/) - Biography and testimonials ## Articles - [Eighteen Files And One Nix Module: How My Brain Works](https://www.juststeveking.com/articles/how-my-brain-works/) - The Obsidian vault I use as a system of record for every project, why the checkouts inside it are gitignored, and why half of it is generated from my NixOS flake. - [MCP Goes Stateless: What Changed and Why It Matters](https://www.juststeveking.com/articles/mcp-goes-stateless/) - The Streamable HTTP transport replaced HTTP+SSE and quietly made MCP servers stateless. Here is what that means, how the new transport works, and why it unlocks serverless and edge deployments. - [One Host, Twenty-One Files: A NixOS Flake That Stays Out Of Your Way](https://www.juststeveking.com/articles/a-nixos-flake-that-stays-out-of-your-way/) - How auto-imported flake-parts modules, wrapped desktop packages, and a single base16 palette file shape one NixOS config - and where each one bites. - [Seven Days in Ten Milliseconds](https://www.juststeveking.com/articles/seven-days-in-ten-milliseconds/) - A workflow that sleeps for three days is not a workflow you can test by waiting. Owning the clock, asserting on absence, and the races you only get one shot at. - [Building an order fulfilment workflow in Laravel](https://www.juststeveking.com/articles/building-an-order-fulfilment-workflow/) - Build a real order fulfilment workflow in Laravel: signals from webhooks, timeouts, retries, branching, sleep and saga compensation, one step at a time. - [Building Bulletproof Laravel APIs using Schema-First Contract Validation](https://www.juststeveking.com/articles/bulletproof-laravel-apis-schema-first-contract-validation/) - Stop letting undocumented fields into your Laravel API. Write the JSON Schema first, then enforce it in middleware, DTOs, and your Pest test suite. - [Strangling Procedural Legacy PHP into Laravel](https://www.juststeveking.com/articles/strangling-legacy-php-into-laravel/) - Replace a procedural PHP monolith with Laravel one route at a time. Nginx ingress, session bridging that actually works, and Eloquent on a legacy schema. - [Give your Laravel AI agent real-time web knowledge](https://www.juststeveking.com/articles/real-time-web-knowledge/) - The Laravel AI SDK is provider-agnostic, but its built-in web tools aren't. Here's how to give your agent real-time web knowledge without losing that independence. - [The Right Agent at the Right Time](https://www.juststeveking.com/articles/the-right-agent-at-the-right-time/) - How to run AI across the whole dev lifecycle: the right agent at each stage, human gates on judgement, and decision records that keep architecture honest. - [Fibers Plus the Polling API: What Async PHP Actually Looks Like Now](https://www.juststeveking.com/articles/async-php/) - Fibers give PHP concurrency. The Polling API gives it native epoll and kqueue. Here's how to build on both, with honest benchmarks. - [The Polling API Is the Most Underrated RFC PHP Has Shipped in Years](https://www.juststeveking.com/articles/php-8-6-polling-api-rfc/) - The Polling API gives PHP 8.6 native epoll and kqueue at last. Here's why the RFC nobody discussed is the most consequential in years. - [A Proper Look at Tabstack](https://www.juststeveking.com/articles/tabstack-review/) - A developer's review of Tabstack, the Mozilla-backed web API that gives AI agents clean extraction, browser automation, and cited research without a scraper. - [Giving your agents a terminal: a first look at the tabstack CLI](https://www.juststeveking.com/articles/tabstack-cli/) - A hands-on look at Mozilla's tabstack CLI: a single Go binary that turns any URL into clean Markdown or JSON, runs browser automation, and scripts neatly. - [The Tips Behind API Artisan: Building Laravel APIs Developers Actually Want to Use](https://www.juststeveking.com/articles/api-tips-and-tricks-from-my-book/) - Practical tips for building Laravel APIs developers trust: contract-first design, versioning, RFC 9457 errors, idempotency and more. Free book inside. - [Testing Actions, Not Mocks](https://www.juststeveking.com/articles/testing-actions-not-mocks/) - Mocking your own Actions tests the wiring, not the behaviour. How I test Laravel Action classes for real with Pest, and where fakes still belong. ## Deep-Dive Guides - [Bulk updates via async jobs](https://www.juststeveking.com/guides/bulk-updates-via-async-jobs/) - Move heavy bulk operations out of the request/response cycle with job resources. Enqueue work, return quickly, let clients poll for status. - [Cursor-based pagination for stable lists](https://www.juststeveking.com/guides/cursor-based-pagination-for-stable-lists/) - Use opaque cursors instead of numeric offsets for more stable pagination over changing data like feeds, logs, or events. - [Deferred writes with the Outbox Pattern](https://www.juststeveking.com/guides/deferred-writes-with-the-outbox-pattern/) - Write events to your database inside the same transaction as your state changes, then publish them reliably with a background worker. - [Expandable relationships with sparse expansions](https://www.juststeveking.com/guides/expandable-relationships-with-sparse-expansions/) - Avoid over-fetching by default while letting clients pull related data in one call when needed using expand parameters. - [Idempotency keys for safe retries](https://www.juststeveking.com/guides/idempotency-keys-for-safe-retries/) - Let clients safely retry non-idempotent calls without accidentally creating duplicates. Essential for payments and critical operations. - [Webhook event delivery with signed payloads](https://www.juststeveking.com/guides/webhook-event-delivery-with-signed-payloads/) - Push events to third-party systems in near-real-time with signed payloads, retry logic, and event replay capabilities. ## Learning Series - [Building Software in the AI Era](https://www.juststeveking.com/series/building-software-with-ai/) - Master the tools, habits, and operating models needed to ship high-quality software in a day-to-day workflow shaped by LLMs, moving past outdated sprints and velocity metrics. - [Engineering Management](https://www.juststeveking.com/series/engineering-management/) - Scale your engineering organization and build a high-performing team culture. Learn modern leadership frameworks for managing remote engineers, technical debt, and team coaching. - [From Requirements to Reality](https://www.juststeveking.com/series/from-requirements-to-reality/) - Transition from writing simple code to designing complete architectures. Learn how to shape features, design database entity-relationship diagrams (ERDs), and plan before you build. - [Building Modern Laravel APIs](https://www.juststeveking.com/series/modern-laravel-apis/) - Build and deploy production-ready Laravel 13 APIs using PHP 8.5. Design an opinionated, robust architecture that scales under real production load through a step-by-step complete application build. ## Podcast Appearances - [Analytics for your API, with Steve McDougall from Treblle](https://www.juststeveking.com/podcasts/api-analytics/) - Phil and Mike sit down for a chat with Steve MacDougall, who has just recently started working in Developer Relations at Treblle, a past sponsor of APIs You Won't Hate. - [PHP Frameworks, API's and more - With Steve McDougall](https://www.juststeveking.com/podcasts/laravel-magazine-1/) - A conversation with Steve McDougall about PHP frameworks, APIs, and his contributions to the Laravel community. - [Let's talk APIs w/ Steve McDougall](https://www.juststeveking.com/podcasts/overengineered-apis/) - Steve McDougall (aka JustSteveKing) is known as the 'API guy' on Twitter. In today's episode we start with the question, 'what if the best option is just a single page app with a good, RESTful API?' - [PHP Alive And Kicking: Episode 32 Tessa Kriesel & Steve McDougall](https://www.juststeveking.com/podcasts/php-alive-and-kicking-32/) - A lively episode talking all things tabstack with Tessa Kriesel and Steve McDougall, oh also Steve wrote a book. - [PHP Alive And Kicking: Episode 7 – Steve McDougall](https://www.juststeveking.com/podcasts/php-alive-and-kicking-7/) - A lively episode profiling Steve McDougall—from bored sysadmin to PHP developer—covering DIY projects born from necessity. - [With Steve McDougall. Streaming, Learning Laravel and PHP + Much More!](https://www.juststeveking.com/podcasts/streaming-learning-php-and-more/) - A conversation with Steve McDougall about streaming development, learning PHP and Laravel, and his contributions to the developer community. - [Interview with Steve McDougall](https://www.juststeveking.com/podcasts/voices-of-the-elephant/) - In this episide, Cal and Steve chat about Steve's journey into development, and what he is doing in the PHP community right now.