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 design6 min read
Leader election
How distributed systems pick one node to be in charge and replace it safely when it fails: why leaders are useful, leases and heartbeats, consensus with Raft, using etcd, ZooKeeper, Consul or Kubernetes leases instead of building your own, database-based locks, fencing tokens against split brain, and when to avoid needing a leader.
- DevOps6 min read
Linux processes and signals
How Linux runs and controls programs: processes and PIDs, parents, children and zombies, viewing processes with ps, top and htop, foreground and background jobs, signals such as SIGTERM, SIGKILL and SIGHUP, graceful shutdown in your own code, nohup, and signals inside Docker containers.
- Python and JavaScript5 min read
Lists vs tuples vs sets
Python's three everyday collections compared: ordered and mutable lists, fixed tuples that can be dictionary keys, and sets for fast membership and deduplication, with their performance, common operations, gotchas and a quick guide to choosing.
- DevOps5 min read
Load balancers
What load balancers do and how they work: spreading traffic across servers, layer 4 versus layer 7, balancing algorithms, health checks, session stickiness, TLS termination, connection draining for zero-downtime deploys, global load balancing, and the common products.
- Networking6 min read
Load balancing algorithms
The algorithms load balancers use to choose a server, with code and trade-offs: round robin, weighted round robin, random, least connections, least response time, power of two choices, IP and consistent hashing, Maglev, and how slow start, health and connection reuse affect them in practice.
- DevOps6 min read
Logs and log rotation
Logging that helps instead of hurting: what to log and at which level, structured JSON logs and correlation IDs, keeping secrets out, where logs go on Linux, rotating files with logrotate and the journal, logs in containers, central log platforms, and retention.
- Java and Spring5 min read
Maven vs Gradle
Java's two build tools compared: what a build tool does, Maven's pom.xml and lifecycle, Gradle's Kotlin and Groovy build scripts and task graph, dependency management and scopes, wrappers, multi-module projects, speed and caching, and how to choose.
- System design5 min read
Message queues
Why systems pass work through queues: decoupling, absorbing bursts and doing slow work later. Producers, consumers and brokers, point-to-point vs publish-subscribe, delivery guarantees, acknowledgements and retries, dead-letter queues, ordering, and choosing a broker.
- System design4 min read
Microservices vs monolith
What a monolith and microservices really are, the costs and benefits of each, the modular monolith in between, how to decide for your team, and the warning signs that you split too early or too late.
- Careers5 min read
Mock interviews
How to use mock interviews to prepare for software engineering roles: why they work, where to find partners, how to run a realistic coding, system design or behavioural mock, how to give and take useful feedback, and a four-week practice plan.
- Databases5 min read
MongoDB for beginners
Get started with MongoDB, the most popular document database: documents and collections, running it with Docker, the mongosh shell, inserting and querying with filters and projections, updates and operators, indexes, the aggregation pipeline, schema design by embedding or referencing, and when to choose it.
- DevOps5 min read
Monitoring with Prometheus and Grafana
Set up metrics monitoring with Prometheus and Grafana: how Prometheus scrapes metrics, counters, gauges and histograms, instrumenting a Spring Boot or Python application, PromQL queries for rates, errors and latency percentiles, Grafana dashboards, alerting rules, and a Docker Compose setup to try it.
- Java and Spring5 min read
Multithreading in Java
A practical tour of Java's concurrency toolkit: executors and thread pools, Callable and Future, CompletableFuture pipelines, concurrent collections, locks and atomics, CountDownLatch and Semaphore, parallel streams, virtual threads and structured concurrency, and how Spring's @Async fits in.
- Careers6 min read
Negotiating an offer
How to negotiate a software job offer, especially in India: understanding CTC versus in-hand pay, researching your market value, answering the expected-salary question, using competing offers honestly, what else besides base pay can be negotiated, email templates, and what to avoid as a fresher or experienced engineer.
- DevOps4 min read
Nginx as a reverse proxy
Put Nginx in front of your application: what a reverse proxy does, installing Nginx, a proxy_pass configuration with the right headers, HTTPS with Let's Encrypt, serving static files, load balancing, WebSockets, timeouts and upload limits, rate limiting, and debugging 502 errors.
- Python and JavaScript5 min read
Node.js for beginners
Get started with Node.js: what it is and how it differs from browser JavaScript, running scripts, modules with import and export, the built-in fs, path and http modules, npm packages, building a small JSON API with Express, environment variables, error handling, and running it in production.
- Databases6 min read
Normalisation
Database normalisation explained with one messy table refactored step by step: the update, insert and delete anomalies it causes, first, second and third normal form, BCNF in brief, and when deliberate denormalisation is the right choice.
- Python and JavaScript5 min read
npm explained
How npm, the Node.js package manager, works: package.json and scripts, installing dependencies and devDependencies, semantic versioning and version ranges, package-lock.json and npm ci, node_modules, npx, updating and auditing, workspaces, publishing, and alternatives like pnpm and Yarn.
- System design6 min read
Observability: logs, metrics and traces
What observability means and how its three signals work together: logs for detail, metrics for trends and alerts, distributed traces for following a request across services, OpenTelemetry for collecting all three, correlation between them, SLIs and SLOs, and designing systems you can debug in production.
- Programming4 min read
Observer and strategy patterns
Two behavioural design patterns you use daily without naming them: the observer, for notifying many listeners when something happens, and the strategy, for swapping algorithms at run time, with Java examples, lambdas, and the pitfalls of each.