Platform Engineering

Post Image

How to Choose your Coding Assistants

Coding assistants like Cursor, Windsurf, Claude Code, Gemini CLI, Codex, Aider, OpenCode, Jetbrains AI, etc. have been making the news for the last few months. Yet, the choice of tools is a lot harder and limited for some of us than it seems.TL;DR: OpenCode > Claude Code > Aider > Copilot > *Disclaimer: Not all tools are created equal. The examples listed here might be invalid fairly soon as tools evolve fairly rapidly.You can plot the different types of coding...

Read
Post Image

Level Up Code Quality with an AI Assistant

I've previously discussed how a world class developer experience is essential for a high-performing team. When teams lack such a setup, the most common response is a lack of time or buy-in from stakeholders to build these things. With AI coding assistants being readily available to most developers today, the engineering effort and the cost investment for the business are lessened, reducing the barrier to entry.This blog showcases an actual codebase that has not been actively maintained for over five...

Read
Post Image

What makes a Developer's Experience World-Class?

Developer Experience (DevEx) isn’t just about fancy tools or slick UIs — it is about removing friction so teams can move with confidence, speed, and clarity. In high-performing teams, great DevEx means fewer context switches, faster feedback loops, and more time spent actually building. In this blog, we’ll explore the five non-negotiables every codebase should have to support world-class collaboration, and we’ll map out a practical DevEx stack to help your team deliver better products, faster.Short, sweet and simpleWrite a short note...

Read
Post Image

Patterns for AI-assisted Software Development

In the last blog (), we explored how AI is transforming software engineering beyond just writing code. Now, let’s look at what that means for teams and individuals in practice.For individuals leading and participating in teams that will build software with the assistance of AI tools, there are a few key patterns to keep in mind.With the AI ecosystem shifting weekly, C-level and VP-level stakeholders, who prioritise modular documentation, model pairing, scoped context, and tooling agility, will drive the highest...

Read
Post Image

AI for Software Engineering, Not (only) Code Generation

Everyone has been talking about using coding assistants to aid with software delivery. There is more to delivering good software than writing code.Every software development project requires a couple of different activities from analysis (figure out what needs to be built) to planning to design and development (build) to test (ensure the right thing was built) to deploy (release software and ensure it runs correctly on production). Each of these roles require different skills and these skills have an opportunity...

Read

eBPF for Developers: Observability Without Overhead

eBPF (Extended Berkeley Packet Filter) is a revolutionary technology that allows executing sandboxed programs within the Linux kernel, providing unprecedented access to low-level system events with minimal performance impact.This talk explores the inner workings of eBPF and demonstrates how it can significantly improve observability, performance tuning, and security in real-world scenarios.Practical demonstrations using a Minikube environment compare eBPF-powered load balancers with traditional ones, highlighting the differences in throughput, latency, and packet visibility.The session covers tools like bpftrace, bcc, and libbpf,...

Read
Post Image

One Git to Rule Them All: GitOps for Infra and Service Rollouts

Deploying cloud infrastructure and services should be as easy as committing to Git but for most teams, it’s a messy mix of YAMLs, Terraform, and tribal knowledge. Here’s how we unified it. This blog post is based on my recent talk at DevOpsCon London, where I discussed how to manage and ship infrastructure and services more efficiently within a single Git flow. The goal is to tackle common pain points in modern DevOps practices by unifying infrastructure and service definitions...

Read
Post Image

Building Scalable Multi-Tenant Kafka Solutions with Spring Boot

In modern SaaS applications, is a powerful tool for processing massive volumes of real-time data. But as you scale, especially in a multi-tenant architecture, challenges begin to surface—particularly around Kafka cluster management and consumer design.This blog walks you through how to build a multi-tenant Kafka consumer in Spring Boot, allowing a single application instance to consume messages from multiple Kafka clusters—each dedicated to a tenant group. It also covers writing multi-tenant aware Kafka producer.Source Code on GitHubYou’re building a SaaS...

Read
Post Image

Internals of MVCC in Postgres: Hidden Costs of Updates vs Inserts

Why do sometimes updates feel slower than inserts in Postgres? The answer lies deep in how Postgres manages data versions behind the scenes.At the core of Postgres’ ability to handle concurrent transactions efficiently is Multiversion Concurrency Control (MVCC).In this article, I’ll explore how MVCC works in Postgres and how it impacts both writes and reads, and the performance differences between inserts and updates.-- pageinspect extension to view underlying data storage, we will use it soon! CREATE EXTENSION IF NOT EXISTS...

Read
Post Image

Atomic Operations Explained: From Hardware to High-Level Code (using Go)

Modern applications frequently rely on atomic operations, with atomic counters being one of the most common use cases. For example, when multiple threads execute in parallel, increment and decrement operations must be atomic to prevent race conditions. For this discussion, I’ll be using Go as the reference language, but the core concepts apply to other programming languages as well.This section provides a refresher on managing race conditions in Go. If you’re already familiar with this topic, feel free to skip...

Read