Blog
Programming, software engineering and computer science, explained from the ground up. Each article starts free to read; the rest needs a free account.
- System design7 min read
Design a rate limiter
A system design walkthrough of a rate limiter: requirements, where it runs, the fixed window, sliding log, sliding window counter, token bucket and leaky bucket algorithms with code, a distributed limiter on Redis with atomic Lua scripts, response headers, and failure handling.
- System design6 min read
Design a URL shortener
The classic system design interview question worked through end to end: requirements, traffic and storage estimates, the API, generating short codes with base62 and counters, the database, caching redirects, 301 versus 302, analytics, abuse prevention and scaling.
- DevOps5 min read
Docker Compose
Describe an application and its database, cache and services in one file and start them with one command: services, ports, volumes, networks, environment variables, health checks, and the commands you use every day.
- Setup guides6 min read
Dual boot Windows and Ubuntu
Install Ubuntu alongside Windows safely: backups and BitLocker, making space by shrinking the Windows partition, disabling Fast Startup, creating the USB, installing with "alongside Windows", choosing the system at boot with GRUB, fixing the clock, and removing Ubuntu later.
- Databases6 min read
Elasticsearch explained
How Elasticsearch powers fast full-text search: documents and indices, the inverted index, analyzers and tokenisation, mappings, match and bool queries, relevance scoring with BM25, aggregations, shards and replicas, keeping it in sync with your database, and when to use it.
- Networking6 min read
Email: SMTP, IMAP and POP3
How email travels from sender to inbox: SMTP for sending and relaying, MX records, IMAP and POP3 for reading, the ports and TLS, SPF, DKIM and DMARC for authentication and deliverability, sending email from applications through providers, testing locally with Mailpit, and why your messages land in spam.
- DevOps5 min read
Environment variables and the twelve-factor app
How environment variables work and why the twelve-factor methodology stores configuration in them: setting and reading variables on Linux, macOS and Windows, .env files, reading config in Java, Python and Node.js, validation at start-up, the twelve factors summarised, and where environment variables fall short.
- System design5 min read
Event-driven architecture
Event-driven architecture explained: events versus commands, publishers and subscribers through a broker, choreography and orchestration, the outbox pattern, idempotent consumers, eventual consistency, event sourcing, and the trade-offs to weigh before adopting it.
- Programming6 min read
Exceptions and error handling
How to handle errors well: exceptions versus error values, try, catch and finally, checked and unchecked exceptions in Java, Python's exception style, when to catch and when to let errors propagate, custom exceptions, cleaning up resources, retrying, error handling at API boundaries, and anti-patterns to avoid.
- Careers6 min read
Finding internships in India
A practical guide for students looking for software internships in India: when to start, on-campus and off-campus routes, where to search, building a résumé and projects that get shortlisted, referrals and cold emails, the typical selection process, avoiding scams, and making the most of the internship.
- Python and JavaScript5 min read
Flask vs Django vs FastAPI
Python's three most popular web frameworks compared with the same small API in each: Django's batteries-included approach, Flask's minimalism, FastAPI's type-driven validation and async support, performance, learning curve, and how to choose for your project.
- Programming6 min read
Functional programming basics
The core ideas of functional programming explained with JavaScript, Python and Java examples: pure functions and side effects, immutability, functions as values, map, filter and reduce, composition, closures, currying and partial application, declarative style, and how to use these ideas in everyday code.
- Programming5 min read
Garbage collection
How garbage collection frees memory automatically: reachability and roots, reference counting and its cycle problem, mark and sweep, compaction, generational collection, how Java, Python, JavaScript, Go and C# do it, pauses and tuning, and how memory leaks still happen in collected languages.
- Programming6 min read
Generics
Generics explained with Java, TypeScript and Python examples: why type parameters beat Object and any, generic classes and methods, bounded types, wildcards and the PECS rule, type erasure in Java, generic constraints in TypeScript, type hints with TypeVar in Python, and common mistakes.
- Programming6 min read
Git branching strategies
How teams organise work in Git: feature branches and pull requests, trunk-based development with short-lived branches and feature flags, GitHub flow, Git Flow with develop and release branches, release branches for supported versions, merge commits versus squash versus rebase, branch protection, naming conventions, and choosing a strategy for your team.
- DevOps5 min read
GitHub Actions
A practical guide to GitHub Actions: workflows, triggers, jobs, steps and runners, using marketplace actions, matrix builds, caching, artifacts, secrets and environments, reusable workflows, and the security settings every repository should have.
- Networking5 min read
GraphQL explained
What GraphQL is and how it differs from REST: one endpoint, a typed schema, queries that ask for exactly the fields you need, mutations, resolvers and the N+1 problem, caching trade-offs, and when GraphQL is worth adopting.
- Networking4 min read
gRPC explained
What gRPC is and when to use it: Protocol Buffers and .proto contracts, generated client and server code, the four call types including streaming, HTTP/2 underneath, deadlines and status codes, a working Python example, and how gRPC compares with REST.
- DevOps4 min read
Helm charts
Helm, the package manager for Kubernetes: what a chart is, templates and values, installing, upgrading and rolling back releases, overriding values per environment, writing your own chart, and the habits that keep charts maintainable.
- Networking5 min read
How DNS works
What happens between typing a website's name and your browser connecting: resolvers, root, TLD and authoritative servers, record types like A, CNAME, MX and TXT, caching and TTLs, and the commands for checking it yourself.