What does switching to AI Engineering actually mean for your career? Drawing from my experience pivoting to SRE, I offer an honest assessment of the opportunities and challenges for software engineers considering this move—from high-impact, high-pressure work to the realities of slower progress and less visible product surface.| blog.lawrencejones.dev
Working in AI today, I'm seeing the innovator's dilemma play out in real time. While larger companies carefully plan deployments that work for their entire customer base, smaller teams like ours can ship, learn, and improve our AI products through actual usage. This isn't just about moving faster—it's about fundamental advantages in how AI products develop that favor startups, regardless of the resources incumbents can deploy. The dynamics surprised me, and they might surprise you too.| blog.lawrencejones.dev
I've met teams who switched to Python just to build AI features, abandoning their normal stack for the ecosystem. But it's really not worth it! At incident.io we stuck with Go and it's been great - turns out static typing and proper concurrency are exactly what you want when building AI systems, provided you build some nice abstractions to go with it.| blog.lawrencejones.dev
The gap between demo-ready AI products and production-grade systems is much larger than most realise. This post explains the four stages of AI product maturity, what tooling you actually need to build reliable AI systems, and how to recognise if you're stuck in the MVP trap.| blog.lawrencejones.dev
From reliability engineering to wrestling with LLMs, my fourth year at incident.io pushed me harder than I'd expected. We launched On-call, weathered some tough times as a team, and I ended the year diving fully into AI.| blog.lawrencejones.dev
A story about how incident response training went wrong, with valuable lessons about pod priorities, isolation, and the importance of a healthy incident response culture.| blog.lawrencejones.dev
Of the mental models and rules I use in my life, by far the most useful is to learn only one thing at any given time.| blog.lawrencejones.dev
My reflections on 2023, now my second full year at incident.io. Doubled the team this year (34 to 77), launched Status Pages and Catalog, and spent the last six months building a really exciting new product.| blog.lawrencejones.dev
Whenever a system has access to a consistent store, you can extend that consistency through compare-and-swap to the system's users. This post shows how you can add CAS to an HTTP API using example code and real-world examples.| blog.lawrencejones.dev
If you build a state machine on top of a relational database you can abstract concurrency problems away from your business logic and allow developers to write safe-by-default code without dealing with concurrency concerns. This post explains how to build a library that offers those protections, and how they work under-the-hood.| blog.lawrencejones.dev
From the moment you learn programming people tell you "don't repeat yourself!" So what I'm about to suggest might sound odd. But I'm here to say that if you want to ship high-quality software at pace, you should be investing in abstractions that are designed to enable copy-and-paste.| blog.lawrencejones.dev
For the last three months we've been building out the incident.io catalog. This project always made me nervious – it would've been easy to build something pretty but useless – but it's ended up game-changingly good. This post talks about some of the decisions that got us there.| blog.lawrencejones.dev
From the evergreen AWS status page to hardcoded 100% uptime, no one fully trusts a status page anymore. But why is this? Companies often start with good intentions, aiming for full transparency. So why do so many change along the way: what pressures people into an evergreen status page with poorly-reflective uptime numbers?| blog.lawrencejones.dev
ULIDs are an alternative to UUIDs that solve several problems, but it's not all plain sailing. This post shares experience using ULIDs in production, exploring some of the drawbacks in an aim to help others pick an ID format.| blog.lawrencejones.dev
This was my first full year at incident.io. So much has happened - 4x'ing the team, our Series A, building loads of product – that it feels much longer. I'll break this down into reflections on team, product and writing. Only a few aspects of my last year, but themes I like to keep track of.| blog.lawrencejones.dev
Two part series about how we built incident.io workflows. Part one explains core concepts used across the feature, and look at how code structure makes development easy. Followed by a deep-dive into the Workflow Builder (the configuration UI) showing how the concepts are exposed in APIs, and used to power the frontend. Part two describes the workflow executor, showing how it listens for workflow triggers and if the conditions match, executes them. Finally, we reflect on whether we succeeded i...| blog.lawrencejones.dev