Systems | Development | Analytics | API | Testing

What a room of engineers asked me about realtime resilience

I spoke about Ably's approach to resilience at the AWS Cloud Resilience Roadshow in Dublin on 22 September 2026, and the questions afterwards covered CDNs, regional failover, outages, message ordering, and capacity. They got me reflecting on which parts of our approach are common across the industry, which are less so, and how choices made early, well before my time at Ably, have put us in a strong position today.

What IT Buyers Need to Know Before a Mainframe Refresh

Most mainframe storage refreshes begin with a notice. A support statement gets revised, a lifecycle date is published, a lease comes due, or a capacity report shows the estate crossing a threshold two years earlier than anyone planned for. A purchase that had been sitting comfortably in a future budget cycle now has to close in this one. Under deadline pressure, the instinct is to buy the current generation of the platform you already run.

AI at Scale: Why Trust, Not the Model, Decides Who Wins

Every AI conversation eventually turns into a model conversation: which one is fastest, which one hallucinates least, which one your competitors are already using. Three recent episodes of The Data and AI Chief, hosted by ThoughtSpot's Chief Data and AI Strategy Officer Cindi Howson, make a different case entirely about what it takes to scale AI in the enterprise.

Performance Considerations with Offset and Cursor Pagination in Plain PHP and Doctrine ORM

Displaying a list of items from the database is probably the most common functionality built for web applications. This is where pagination with LIMIT clause comes into play, which is most likely what you learned to use. This pattern is called offset pagination. In this post I am going to contrast it with cursor pagination and the performance considerations that come with the choice of pagination algorithm. Examples are with Plain PHP and Doctrine ORM 3.7, which ships a new CursorPaginator class.

AI-Native CI/CD Testing: Building Reliable Release Pipelines for AI Applications

Traditional CI/CD pipelines relied on determinism, assuming code produced an exact, repeatable output. Generative models and agentic workflows break this model. A single prompt edit or model checkpoint update can pass standard unit tests while causing silent regressions like truncated API payloads or missing parameters five steps downstream. To ship probabilistic AI reliably, engineering teams must redefine what counts as a passing test.

Structured Logging: A Complete Guide with Examples

Plain-text logs are great if you want a simple explanation of how a function is performing or why a crash happened. But as your application grows, they become difficult to search and analyze. Structured logging makes production data easier to filter, correlate, and use across modern logging tools. This guide will give you the springboard to build structured logs effectively, showing you how to.

Resumable token streaming: why AI streams break on reconnect

Refresh the page, lose signal, switch tabs. Users expect the AI conversation to still be there when they return, with the answer picking up where it left off. Resumable token streaming makes that possible: a returning client catches up with the in-progress response instead of starting over. Making a stream resumable is an architecture decision. Starting generation, storing the response, and delivering it need to happen in separate parts of your stack.

RSpec Tests in Ruby on Rails: Every Spec Type Explained (2026)

RSpec is the most widely used testing framework for Ruby on Rails. With the rspec-rails gem (v8.x, supporting Rails 7.2–8.x), you write model specs for business logic, request specs for controllers and APIs, and system specs for browser flows — plus mailer and job specs. Run the suite with bundle exec rspec. In the first part of this series, we looked at the basics of RSpec and how well it works with Behavior Driven Development in Ruby.

Load Test One Endpoint, Watch the Rest

What happens to transaction posting when statement traffic gets expensive? That’s the question a bank’s platform team actually needs answered before a busy month-end. It’s also a question most load tests can’t ask, because they turn one dial for the whole recording. Statements get heavier, posting gets heavier, and the average latency across both looks fine right up until customers can’t move money.