Why HTTP Polling Beats WebSockets and SSE for Massive Waiting Queues

You’re waiting in line for concert tickets. You see “Your current position in line: 50,000” and start wondering what technology powers this. As a developer, you might assume these high-traffic systems use modern real-time tech like WebSockets or Server-Sent Events (SSE). After all, they’re designed for real-time communication, right? Well, not quite. When you’re dealing with hundreds of thousands of simultaneous users, the secret to stability often lies in a much simpler method: HTTP Polling. ...

January 15, 2026

Solving the Large-Scale Waiting Queue Problem: Why Redis is the Secret Ingredient

You’re trying to buy tickets for a massive concert. You click “buy” and suddenly find yourself stuck in a digital line. As a developer, your first thought might be to use a Message Queue like Kafka. It’s literally called a queue, and it’s designed to handle requests in order-perfect, right? Well, not quite. When you’re dealing with large-scale, first-come-first-served events, a Message Queue alone often falls short. The missing piece? User Experience. ...

January 2, 2026

Agentic Coding Is More Than Just Automation

Why Docs Come First and Code Becomes a Byproduct AI tools evolve rapidly. This post may become outdated as new developments emerge. “Agentic coding” is becoming a hot topic in dev circles lately. But what is it really about? It’s not just AI writing code for you. It’s a different way of building software — one where documents lead, agents do the work, and your codebase becomes more than just code. It turns into an evolving, reusable asset. ...

July 29, 2025

Transaction Isolation in Databases

Transaction Isolation in Databases — Explained with Real Examples If you’ve built anything that talks to a database, you’ve probably used transactions. But once concurrency comes into play — say, two users updating their carts or modifying the same inventory item — things get tricky. To deal with this, databases use isolation levels. In Go or distributed systems, these are often represented like this: const ( LevelDefault IsolationLevel = iota LevelReadUncommitted LevelReadCommitted LevelWriteCommitted LevelRepeatableRead LevelSnapshot LevelSerializable LevelLinearizable ) Each of these isolation levels is meant to prevent certain types of concurrency bugs. To understand when and why to use them, we need to talk about the anomalies they guard against. ...

July 15, 2025

General Software Engineer

General Software Engineer A General Software Engineer is someone who uses technology to solve real business problems. They are not just implementers who follow specs. They take initiative, think critically about why something is being built, and work closely with others to create meaningful impact. If the problem calls for frontend work, they pick it up. If backend systems are needed, they dive in. If an existing tool does not work, they might even build a new one. They are flexible, resourceful, and not tied to any single tech stack. While they bring strong technical fundamentals such as algorithms and clean code, they are also comfortable using AI tools to work more efficiently. ...

May 9, 2025

Leader Election with PostgreSQL

What is leader election? A common scenario where leader election is needed is running scheduled (cron) jobs in a backend service that has multiple instances. If you have just one instance, life is simple — that instance runs all the jobs. But when you scale horizontally and run multiple instances, you want to make sure that a scheduled job runs only once, on one leader instance — not duplicated across all instances. This is where leader election comes in. ...

May 8, 2025

Solana Login Flow

https://stillearly.io/article/how-to-login-to-supabase-with-solana/

April 13, 2025

Solana dApp Architecture

Backend Architecture Data Flow The backend provides data to the frontend via an API, with its primary responsibility being indexing blockchain data, such as transactions. To achieve this, the indexer continuously queries the Solana blockchain and stores the relevant data for efficient retrieval. Why Indexing? The Need for Indexing Raw blockchain data is not optimized for fast queries. Without indexing, fetching relevant information directly from the blockchain is inefficient because: ...

March 28, 2025

Pluralization Example in Go

func main() { text, err := getPluralItemText(1) if err != nil { log.Println(err) } fmt.Println(text) text, err = getPluralItemText(10) if err != nil { log.Println(err) } fmt.Println(text) } func getPluralItemText(count int) (string, error) { msg := plural.Selectf(1, "%d", plural.One, "%[1]d item", plural.Other, "%[1]d items") key := "%d item" tag := "en" lTag := language.MustParse(tag) err := message.Set(lTag, key, msg) if err != nil { return "", err } p := message.NewPrinter(language.English) s := p.Sprintf("%d item", count) return s, nil } Result 1 item 10 items

April 30, 2024

Common Anti-Patterns in Go Web Applications

Loose Coupling Anti-pattern: The Distributed Monolith Avoid splitting your application into microservices before you understand the boundaries. Tactic: Deploy loosely coupled modules. DRY introduces coupling Anti-pattern: Over-Coupling Through “Don’t Repeat Yourself” Adhering strictly to DRY can lead to strong coupling. Tactic: Being DRY in Go A Single Model Couples Your Application Anti-pattern: The Single Model In web applications, the views your API returns (read models) are not the same thing you store in the database (write models). ...

October 30, 2023