Blog

Pangalink today (2026): iPizza architecture and cloud alternatives

Pangalink today (2026): iPizza architecture and cloud alternatives

Eighteen years ago I wrote about pangalink in an article full of Estonian kroons, Hanza and Sampo banks, and a 750-kroon setup fee. That text now reads like archaeology: half the banks are gone, the currency is gone, the public test service shut down, and a whole industry grew up next to it that does the same job diffe...

How Rails builds a page with content_for and yield

How Rails builds a page with content_for and yield

This article is about one small pair of tools: `yield` and `content_for`. They look trivial until you have to answer "in what order does this actually run" - and especially "what happens if I declare a section that nobody outputs".

Stimulus from Scratch: JavaScript That Lives in Your Markup

Stimulus from Scratch: JavaScript That Lives in Your Markup

This article is for people who write server-rendered HTML and want to add interactivity to it without standing up a separate client-side application. No prior knowledge of Hotwire is required: we will go from the very first controller all the way to controllers talking to each other.

Eager, lazy, and batch: when should an application load data

Eager, lazy, and batch: when should an application load data

Eager loading in Rails, `await import()` in Node.js, DataLoader in GraphQL, and `loading="lazy"` on an image look like four unrelated techniques from different layers of the stack. In reality, they are four answers to the same question: **when does the system pay for a resource that may or may not be needed**?

HDR Photos: What's Inside a JPEG with a Gain Map

HDR Photos: What's Inside a JPEG with a Gain Map

On an HDR display, the sun or a highlight in a photograph can sometimes look brighter than the white background of a page. Let's break down, without magic, where the screen gets the instruction to make individual pixels brighter.

Go, Together: A Visual Guide to Go Concurrency

Go, Together: A Visual Guide to Go Concurrency

Concurrency becomes easier when you can see it. Run these small models to watch goroutines compete for shared state, wait for permits, pass values through channels, and react to whichever operation becomes ready first.

The Escape Theory: What Will Actually Break the Corporate Power-Law?

The Escape Theory: What Will Actually Break the Corporate Power-Law?

Recently, I attended a fireside chat with the CTO of Wise and the Chief Research Scientist of Pactum. I asked them a provocative question: Do you see any technology on the horizon that could fundamentally disrupt the market’s power-law distribution by decentralizing and empowering individuals in such a way that they no...

Product team models - project based, feature factory and product operating model

Listened to the podcast https://www.tpg.ee/p/product-team-models-project-based Was interesting to listen and reflect how organizations tend to have indeed different structures. I suppose the project-based is a tendency in small and outsourcing companies, while more mature product-orinented companies go with feature-fac...

Sandboxes for homework assignments

I did some throw-away home coding assignments back in the days: https://github.com/tot-ra/sandbox-open-time-json https://github.com/tot-ra/sandbox-express-axios-api-composition https://github.com/tot-ra/sandbox-airport https://github.com/tot-ra/sandbox-chocolate-factory https://github.com/tot-ra/sandbox-nestjs-auth-rat...

Dream of scalable & enriched graphql-subscriptions

Dream of scalable & enriched graphql-subscriptions

Originally posted in Medium Stylized photo of Jagala juga (Estonia), original photo by Aleksandr Abrosimov, Wikimedia Commons Last time, I wrote about 5-year long journey of having GraphQL in Pipedrive. Now, let me tell you about a 10-year long journey of delivering websocket events to frontend..

Journey to a Federated GraphQL

Journey to a Federated GraphQL

Original post at medium Image taken from dgraph.io Engineers tend to love good stories, so hopefully our 5-year journey of moving towards API composition with GraphQL now in production (serving at peak 110 requests per second at 100ms latency) provides a good story. If you’re in a hurry, scroll down to _Lessons learned...