Skip to main content
WritingSpeakingCodeAboutNow
For conference organisers

Speaking

Everything you need to book me is on this page: what I talk about, where I have talked about it, three bios at the lengths you actually ask for, and a headshot you can download without emailing me first. If something is missing, the last section is my address.

13talks delivered across 12 events
4countries in person, plus online
2019first talk in this archive
Feb 2024PHP-FIG Core Committee member since

What I can talk about

Stop Building CRUD APIs

Most APIs are shaped like a database, and the clients pay for it.

Most Laravel APIs start the same way: a resource controller, a few routes, and a clean set of CRUD endpoints. It looks good - until real behaviour shows up. In this live coding session, we’ll take a typical CRUD API and push it to its limits, exposing where it starts to fall apart. From there, we’ll refactor it into something that reflects how systems actually work - focusing on actions, intent, and clarity over convention. We’ll cover where CRUD works (and where it doesn’t), why “update” endpoints become a dumping ground, how to model real behaviour in your API design, and a practical structure you can apply in Laravel today. No slides, no theory overload - just real code, real problems, and better ways to approach them.

Runtime
45 minutes
Workshop version
Yes

The writing behind this talk

Reliable API Calls Without the Stress

The third-party call that does not fail, it just gets slow, and takes your workers with it.

Most advice about calling somebody else's API is about failure: catch the exception, retry with a backoff, put a circuit breaker in front of it. The calls that hurt in production tend to succeed. A dependency that starts answering in eleven seconds instead of two hundred milliseconds still returns a perfectly valid 200, so nothing retries and nothing trips, and every worker you have ends up sitting inside that call waiting for it. Laravel's HTTP client will wait thirty seconds by default before it gives up on one.

This talk works through the two problems retries do not solve. The first is the dual write. You save a record and tell another system about it, and whichever order you do those in, there is a gap where one happens without the other. We close it with the Outbox pattern in Laravel, so the call is made from committed state and still goes out when the queue falls over. The second is the slow dependency, where the fix is a timeout somebody chose on purpose and a cap on how much of your capacity any one integration is allowed to take. You leave with patterns you can apply to the integrations you already have, and a way to tell which of them need it.

Runtime
30 minutes
Workshop version
Yes

The writing behind this talk

The Rewrite You Should Not Do

Why the team proposing the rewrite usually already knows, and what to do instead.

Every mature codebase eventually produces a list. The test suite mostly hits the database, one model is load-bearing for six features, the bulk tool and the endpoint disagree about the same rule, and there is an interface that has never had a second implementation. Somebody reads the list and says what somebody always says: we should rewrite it.

A rewrite looks cheap because it compares the good parts of a new system against all of the old one. The old one holds years of corrections nobody wrote down. Every strange branch is there because something happened in production, and a rewrite rediscovers each of them one incident at a time, while shipping nothing until the day it is finished. This talk covers what to do instead: strangle the parts that genuinely need replacing behind a seam you can move traffic across, fix in place when a change is provably behaviour preserving, and write down and leave alone the parts nobody goes near. The deciding factor is churn. Coupling only costs you when you touch it, one git command shows where the team actually spends its time, and the overlap between that and the list is your real backlog. It is usually much shorter than the list you started with.

Runtime
45 minutes
Workshop version
Yes

The writing behind this talk

Scaling APIs in Laravel

Finding the call that is actually costing you, rather than the one the dashboard shouts about.

When an API gets slow, the usual response is to scale all of it, with bigger servers and a cache in front of everything. The cost usually sits in one or two calls, and the one getting blamed on the dashboard is often not one of them.

This talk works through an API using the tools Laravel already ships with: route structure, response shape and filtering, caching, and the write operations that start to hurt first as traffic grows. Each change starts from the same question, which request is costing you and why, so the work goes where the time is actually going rather than where the graph is loudest.

Runtime
45 minutes
Workshop version
Yes

The writing behind this talk

Talks delivered

Talk archive →
Stop Building CRUD APIs (do this instead)Laravel Serbia · online · meetupEvent
May 2026
Reliable API Calls Without the StressPHP Sussex · Brighton, UK · meetupEvent
Jun 2025
Artisanal API Platforms: Crafting Developer-First ExperiencesAPI Platform Conference 2024 · Lille, France · conferenceEvent
Sept 2024
Building High-Performance APIs with Laravel's Built-in ToolsLaravel Worldwide Meetup · online · meetupEvent
Jul 2024
Scaling APIs in Laravel: Performance & Architecture PatternsZagreb PHP Meetup · Zagreb, Croatia · meetupEvent
Jul 2024
Composable Architecture in Laravel: Building Maintainable ApplicationsLaravel Live Pakistan · online · conferenceEvent
Mar 2024
The 10 REST Commandments: Principles for Better API DesignNordic APIs Platform Summit · Stockholm, Sweden · conferenceEvent
Nov 2023
Building & Testing Robust APIs in LaravelLaravel Worldwide Meetup · online · meetupEvent
Oct 2021
Laravel API Fundamentals: Design, Build, DeployPHP South West · online · meetupEvent
Mar 2021
PHP Package Development: From Concept to DistributionNashville PHP · online · meetupEvent
Mar 2021
Automating Code Quality: Tools & Workflows for Cleaner CodePHP South Wales · Cardiff, Wales · meetupEvent
Jul 2019

Organiser kit

Bio, 50 words

Steve McDougall is an API consultant from Wales. He fixes slow, unreliable APIs for SaaS and product teams without rewriting them, sits on the PHP-FIG Core Committee, and writes a column for php[architect]. He has been speaking at PHP and API conferences since 2019.

Bio, 100 words

Steve McDougall is an API consultant from Wales. He works with SaaS and product teams on slow, unreliable APIs, finding the real failure points and stabilising the riskiest one first rather than proposing a rewrite. He sits on the PHP-FIG Core Committee, writes a column for php[architect], and has published 13 talks and several hundred articles and videos on API design, architecture and PHP, all free to read. Before software he served in the Royal Tank Regiment. That shows up in how he works: systematic diagnosis, calm under pressure, and a preference for durable fixes over quick ones.

Bio, 250 words

Steve McDougall is an API consultant and technical director based in Wales. He works with SaaS and product teams whose APIs have grown slow and unreliable, and his approach is deliberately unglamorous: find the call that is actually costing the business, stabilise that one before anything else, and leave the team with patterns they can keep running without him. No rewrite, because the rewrite is almost never the answer and the team proposing it usually knows that already. He sits on the PHP-FIG Core Committee, where the standards work feeds directly back into what he teaches, and writes a regular column for php[architect]. Over 13 talks across 12 events since 2019, at conferences and meetups in 4 countries and online, he has spoken on API design, domain partitioning, resilience patterns, and how engineering teams actually make decisions. His writing archive runs to 195 recorded sessions and several hundred articles, none of it behind an email form. Before software he served in the Royal Tank Regiment, from 2007 to 2011. He is direct about what that left him with: systematic diagnosis, calm while something is actively on fire, and a strong preference for the fix that holds over the one that ships on Friday. He talks about the parts of engineering nobody writes down, using systems he has actually had to repair, and he will tell an audience which approach he would pick rather than presenting a balanced survey and leaving.

Headshot

Square, 1000px, suitable for a programme or a speaker card.

Download

Full talk archive

Every talk with its event, location and date.

Open

Contact

Email me. There is no form.

Tell me the event, the date, the audience and the slot length, and I will tell you straight away whether I can do it. I reply to everything that is not a template, and I will say no quickly rather than leave you waiting on a maybe.