Consultant for data engineering and distributed systems issues. I've worked for over 15 years as a software developer, including stints at Uber, Yahoo and ThoughtWorks. I also enjoy helping startups on general software engineering issues.

Contact me
I host a podcast called Through The Corporate Glass. Some recent episodes:

Using the lens of Disruptive Innovation to find 10x product experiences

After attending a conference called The Makers Summit a couple of weeks back where I saw two founders talk about “10x” products, I figured there must be experts who have looked for patterns in how they emerge and written about them? And sure enough, as I started reading, I discovered there is a market phenomenon […]

Notes on the AWS Firecracker paper

The AWS Firecracker paper is fascinating because Amazon has implemented a new Virtual Machine Monitor (VMM) which closely matches the requirements of their AWS Lambda service. While doing so, they carefully navigated the space of existing virtualization options, reused the best parts where they could, and implemented the rest. They also describe how they successfully […]

Notes on Database Transactions

Given that database transactions have been around for decades, I was surprised to find that some concepts and implementations still don’t have generally agreed-upon terminology, especially across vendors. And even the ANSI SQL standard’s description of Isolation Levels has been found to be lacking in places. I made some notes recently about selected topics in […]

TiDB: A Raft based HTAP database (Paper notes)

TiDB is an interesting new database, and PingCAP is the company driving most of its development. Recently I read the paper written about it, titled TiDB: A Raft based HTAP database, partly due to my interest in its Rust-based TiKV component. I found the paper to be comprehensive and well written. Below is my bullet […]

Learn Rust: Assignment and Memory Semantics

If you are familiar with Java or C/C++, understanding the assignment operator (=) in Rust will demystify a lot of its memory semantics. Assignment in Rust can have a range of outcomes depending on what you are assigning from and to, and on whether you are using the reference operator (&) and the mut keyword […]

Kubernetes Autoscaling – an overview

This post describes the features k8s provides for Automated Scaling of applications. This is Part 3 of a series. Part 1 is an Introduction to K8S and Part 2 talks about Kubernetes Internals. k8s can automate horizontal scaling of pods and has experimental support for vertical scaling. Scaling can even extend to requesting new hardware […]

Kubernetes – the internal architecture

This post summarizes the internal architecture of Kubernetes (k8s). For my previous post on user-facing aspects, see Part 1 of the series. An architectural style that is followed throughout the control plane of k8s is of components communicating with each other using a data store (etcd) as the intermediary. Updates made to etcd are picked […]

Kubernetes – an introduction

I decided to start learning about Kubernetes (k8s) although I have not used it in production yet. These are my notes from the first part of the comprehensive book “Kubernetes in Action”. The second part gets into k8s’s internals. I will write about that as I read more of the book. k8s abstracts away the […]

Book review: The Effective Executive

This is a crisp booklet by the famous management consultant Peter Drucker. It focuses on a few time tested general practices and hammers them home nicely rather than getting lost in the weeds. It draws upon decades of the author’s practice and probably due to that, I was delighted to find subtle gems of practical […]