# Steve McDougall — Personal Site Practical engineering education, courses, and resources for the modern PHP & Laravel developer. ## Core Pages - [Home](https://www.juststeveking.com/) - What the work is: finding and fixing the real failure points in slow, unreliable APIs - [Writing](https://www.juststeveking.com/articles/) - Every article, plus the series, the reference guides and the five subject pillars - [Speaking](https://www.juststeveking.com/speaking/) - Talk topics, the full record of talks delivered, bios and a headshot for organisers - [Code](https://www.juststeveking.com/projects/) - Open source packages for PHP, Laravel and Go - [About](https://www.juststeveking.com/about/) - Who Steve is, how he works with teams, the CV, and how to get in touch - [Now](https://www.juststeveking.com/now/) - Current focus, active projects and what is in progress ## Subject Pillars - [API Design](https://www.juststeveking.com/articles/categories/api-design/) - How APIs outgrow the design they shipped with, and what to fix first. - [Architecture](https://www.juststeveking.com/articles/categories/architecture/) - Recognising the pattern you already live inside, and pricing the exit. - [PHP & Laravel](https://www.juststeveking.com/articles/categories/php-laravel/) - The language got good. Most code has not caught up with it. - [Shipping & Tooling](https://www.juststeveking.com/articles/categories/shipping-tooling/) - Deploys, local environments, CLIs, and where agents actually help. - [Engineering Leadership](https://www.juststeveking.com/articles/categories/engineering-leadership/) - The job changes from writing code to deciding what gets written. ## Also On The Site - [Talks](https://www.juststeveking.com/talks/) - The talk archive, one page per talk - [Videos](https://www.juststeveking.com/videos/) - Screencasts and recorded sessions - [Podcasts](https://www.juststeveking.com/podcasts/) - Guest appearances - [Work](https://www.juststeveking.com/work/) - Full career history - [Contributions](https://www.juststeveking.com/contributions/) - Open-source contributions aggregated by organisation - [Recommendations](https://www.juststeveking.com/recommendations/) - What engineering leaders say about working with Steve - [Career Framework](https://www.juststeveking.com/career-framework/) - Six levels, expectations and growth signals, free to copy - [Uses](https://www.juststeveking.com/uses/) - Hardware, software and services ## Articles - [An Example App That Needs Its Features](https://www.juststeveking.com/articles/an-example-app-that-needs-its-features/) - Flagpole is a feature flag service built on kit, where every HTTP standard is there because the domain needs it. Building it found four bugs that kit's own tests never caught. - [A Laravel API Starter Kit That Keeps Its Promises](https://www.juststeveking.com/articles/a-laravel-api-starter-kit-that-keeps-its-promises/) - Starter kits are right on the day you install them and drift from then on. Kit now checks its own promises in CI, so the docs, spec, errors and dependencies stay true. - [Most of Your API Has Already Been Designed](https://www.juststeveking.com/articles/most-of-your-api-has-already-been-designed/) - Error formats, retries, lost updates, webhook signing: the IETF has already answered them. api-toolbox brings those answers to Laravel, one RFC per feature. - [How to Write Specs, RFCs and ADRs](https://www.juststeveking.com/articles/how-to-write-specs-rfcs-and-adrs/) - Spec driven development in practice: what an RFC, an ADR and a spec are each for, the templates I use, and one feature taken through all three from a blank page. - [What Actually Constrains a Coding Agent](https://www.juststeveking.com/articles/what-actually-constrains-a-coding-agent/) - I had fifteen agents build the same Laravel and Slim API. Written decisions mattered most, the framework second, PSRs barely at all, and Laravel already ships the first. - [Sending And Receiving Webhooks In Laravel](https://www.juststeveking.com/articles/sending-and-receiving-webhooks-in-laravel/) - A webhook is a contract between two codebases that never meet. Both ends of it in plain Laravel: what to sign, how long to retry, and how the receiver avoids doing the work twice. - [My business lives in my vault now](https://www.juststeveking.com/articles/my-business-lives-in-my-vault/) - My clients, hours, invoices and articles moved out of FreeAgent, Upwork and my head into plain files in my Obsidian vault, kept by an agent, with Tabstack finding the next client. - [My clients live in a folder now](https://www.juststeveking.com/articles/my-clients-live-in-a-folder-now/) - Freelance tools are good at the books and bad at everything around them. mavis keeps clients, calls, time and invoices as Markdown files, run from one binary. - [Building a home-education platform with Laravel 13, Inertia and React, and shipping it to Laravel Cloud](https://www.juststeveking.com/articles/building-a-home-education-platform-with-laravel/) - A Laravel 13, Inertia and React platform for home educating my son: an append-only learning record, a planner, AI kept on a short lead, and what Laravel Cloud asked of the code. - [The Petstore scores 65](https://www.juststeveking.com/articles/the-petstore-scores-65/) - The most copied OpenAPI document in the world is a bad API for an agent, and it takes a third of a second to find out. So I built the check I was doing by hand. - [Your endpoint, as an agent sees it](https://www.juststeveking.com/articles/your-endpoint-as-an-agent-sees-it/) - An agent never reads your API. It reads a flattened projection of it, and the flattening loses things you did not know were losable. Here is how to look at yours. - [The UK is mandating e-invoicing in 2029, and your invoicing code is not ready](https://www.juststeveking.com/articles/uk-e-invoicing-2029/) - From 2029 every UK VAT invoice has to be structured data that passes about eleven hundred rules. What that means for the invoices table you already have, and the four fields that break first. - [Digital sovereignty is written in PHP, and the UK just made it fundable](https://www.juststeveking.com/articles/digital-sovereignty-is-written-in-php/) - The PHP Foundation made the case for funding upstream maintenance through procurement. Their proposals are written against EU rules. The UK deleted the clause that was blocking them. - [The Second Pattern: The Ones I Left Out](https://www.juststeveking.com/articles/the-second-pattern-the-ones-i-left-out/) - Five patterns I know well, that come up constantly, and would not reach for in PHP. Not because they are bad ideas, but because of what the runtime does and does not give you. - [The Second Pattern: Blackboard](https://www.juststeveking.com/articles/the-second-pattern-blackboard/) - A pipeline works until one step both needs and improves the same piece of information. That is a cycle, and a topological sort has exactly one contract: there are no cycles. ## 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. - [Receiving webhooks in Laravel](https://www.juststeveking.com/guides/receiving-webhooks-in-laravel/) - Verify before you touch the database, store the raw payload, process asynchronously, and dedupe on the sender event id. Plus the Cashier ordering trap that makes listeners fire too early. - [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. - [Why Is This Hard To Change?](https://www.juststeveking.com/series/hard-to-change/) - A diagnostic series for Laravel codebases that are clean, modern, well tested, and still expensive to work in. Each part starts from a symptom a team actually reports, works back to the structural cause, and prices the fix honestly, including the times the answer is to leave it alone. - [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. - [The Second Pattern](https://www.juststeveking.com/series/the-second-pattern/) - Nine architecture patterns that rarely get named in PHP, and one article on the ones that are not worth it. Each starts with the obvious move, finds the exact point it breaks, then reaches for the pattern that fits. Built in Tempest, aimed at anyone writing PHP REST APIs. ## 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. - [Giving Models an API for the Web, with Tabstack](https://www.juststeveking.com/podcasts/tabstack-an-api-for-the-web/) - Mike Bifulco talks with Tessa Kriesel and Steve McDougall from Tabstack about an API that gives standalone models access to the web. - [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.