Skip to main content

Command Palette

Search for a command to run...

Discovering Go and Real Systems: My 2025 Christmas Holiday Experience

Updated
3 min read
A

System-level engineer building reliable backend systems with a focus on performance, correctness, and real-world constraints. I work across APIs, databases, networking, and infrastructure, enjoy understanding how systems behave under load and failure, and write to break down complex backend and distributed-systems concepts through practical, real-world learnings.

Holidays usually mean rest. For me, this one became a quiet reset—four days of learning, breaking things, debugging late-night bugs, and slowly moving forward.

From 25th to 28th December 2025, I decided to use my free time intentionally. No pressure to “ship fast.” Just learn deeply and build things that actually matter to me.

This is a log of what I worked on, what went wrong, and what I learned.


Starting My Go Journey (25–28 December)

On 25th December, I started a Golang learning series on YouTube. My goal wasn’t to rush through it, but to finally understand Go the right way.

Over these four days, I covered:

  • Go basics and syntax

  • Goroutines and concurrency

  • Mutex and race conditions

  • Channels and communication patterns

  • Go I/O

  • Generics (yes, finally)

Go feels simple on the surface, but once you touch concurrency, it forces you to think clearly. You can’t “hack your way through” like in some other ecosystems. That constraint is actually refreshing.


AxioDB: Optimizing File Read with Worker Threads

Parallel to learning Go, I worked on AxioDB, my side project.

The focus was file reading using worker threads and improving performance. I refactored the logic to run file reads concurrently using Promise.all, but that’s where things started breaking.

Problems I faced:

  • Worker thread spawn errors

  • Random syntax errors inside workers

  • Buffer-related crashes under load

  • Inconsistent execution order

Nothing failed consistently, which made debugging harder.

After multiple iterations, I optimized how workers were spawned and how buffers were handled. The key lesson here: concurrency bugs don’t shout—they whisper. If you don’t slow down and reason properly, you’ll miss them.


NexoralDNS: Access Control Policies (The Hard Part)

The most challenging work during these holidays was on NexoralDNS.

I implemented Access Control Policies, which allow:

  • Blocking specific IPs or IP groups

  • Restricting access to certain domains or domain groups

  • Admin-defined rules that apply across a LAN

This is one of the most critical features of the product—and it showed.


The Idempotency Bug That Drove Me Crazy

While building the admin panel (Next.js frontend + Fastify backend), I hit a weird issue:

Clicking “Create Policy” once sometimes created two records.

No frontend double-submit.
No backend error.
DB-level checks already existed.
Still… duplicate entries.

After deep debugging, I realized the issue wasn’t validation—it was request duplication under concurrency.

The fix

I implemented an in-flight request tracker:

  • Store request keys temporarily in memory

  • If the same request arrives again, hold it

  • After the first request completes, return an “already exists” response

This solved the issue cleanly and taught me something important:

Idempotency is not optional in real systems. It’s mandatory.


Rethinking Database Schema Design

I also spent time reading and revisiting database schema design, especially for MongoDB.

The focus was on:

  • Proper relationships between collections

  • Designing for faster lookups

  • Avoiding unnecessary joins

  • Making future scaling easier

Using MongoDB as the primary database means schema decisions matter—even in a “schema-less” world.


Final Thoughts

I didn’t ship a flashy feature.
I didn’t write a viral post.
But I learned deeply.

These four days reminded me why I enjoy building systems:

  • Debugging unclear problems

  • Understanding how things actually work

  • Slowly getting better, not louder

Progress doesn’t always look impressive from the outside—but it compounds quietly.


What’s Next

  • Continue Go with real-world use cases

  • Push AxioDB performance improvements further

  • Harden NexoralDNS policies and edge cases

One weekend at a time.

More from this blog

A

AnkanHub

16 posts