Blog
Programming, software engineering and computer science, explained from the ground up. Each article starts free to read; the rest needs a free account.
- Security6 min read
Certificates and certificate authorities
A practical guide to X.509 certificates: what is inside one, how certificate authorities validate and sign them, DV, OV and EV, creating keys and signing requests with OpenSSL, self-signed and private CAs, keystores and truststores in Java, mutual TLS, revocation and renewal.
- Careers5 min read
Choosing your first language
How to choose your first programming language based on your goal: web, apps, data and AI, games, systems or placements, with an honest comparison of Python, JavaScript, Java, C and C++, what really transfers between languages, and a plan for the first three months.
- DevOps4 min read
CI/CD explained
Continuous integration, continuous delivery and continuous deployment explained: what a pipeline does, a complete GitHub Actions workflow that tests, builds and deploys, environments and approvals, secrets, and the practices that keep pipelines fast and trustworthy.
- System design5 min read
Circuit breakers
How the circuit breaker pattern stops one failing dependency from taking down a whole system: cascading failures, the closed, open and half-open states, thresholds and sliding windows, fallbacks, a working implementation, Resilience4j and service meshes, and how breakers combine with timeouts, retries and bulkheads.
- Programming6 min read
Clean code
Practical habits for writing code other people can read and change: meaningful names, small focused functions, clear control flow and early returns, comments that explain why, avoiding duplication sensibly, error handling, formatting and tooling, code smells and refactoring with before and after examples, and how to apply clean code without dogma.
- Programming5 min read
Concurrency vs parallelism
The difference between concurrency and parallelism, explained with a kitchen, a timeline animation and code: threads, processes and async, I/O-bound versus CPU-bound work, Python's GIL, race conditions and locks, and how to choose the right tool.
- Databases6 min read
Connection pooling
Why applications reuse database connections instead of opening one per request: the cost of a connection, how a pool works, HikariCP and other pools, sizing a pool correctly, timeouts and leak detection, PgBouncer for many application instances, serverless pitfalls, and monitoring.
- System design5 min read
Consistent hashing
Consistent hashing explained: why hash-mod-N breaks when servers change, the hash ring, how adding or removing a node moves only a small share of keys, virtual nodes for balance, replication, a working Python implementation, and where it is used in practice.
- DevOps5 min read
Container registries
Where container images live and how to use registries well: repositories, tags and digests, Docker Hub, GitHub Container Registry, Amazon ECR, Google Artifact Registry and Azure Container Registry, pushing and pulling, authentication from CI and Kubernetes, tagging strategies, immutability, scanning and signing images, and retention policies.
- Careers5 min read
Contributing to open source
How to make your first open source contributions: why they help your career, finding a project and a good first issue, reading contribution guidelines, the fork, branch and pull request workflow, writing a pull request maintainers want to merge, handling review, and contributions beyond code.
- Networking6 min read
Cookies explained
How HTTP cookies work: Set-Cookie and Cookie headers, session and persistent cookies, every attribute (Domain, Path, Expires, Max-Age, Secure, HttpOnly, SameSite, Partitioned), cookie prefixes, first and third-party cookies, size limits, sessions built on cookies, and privacy rules.
- Security5 min read
CORS explained
Why browsers block cross-origin requests and how CORS lets servers allow them: the same-origin policy, simple and preflighted requests, the Access-Control headers, credentials and cookies, configuring CORS in Express, Spring and Nginx, and debugging the famous console error.
- System design5 min read
CQRS explained
Command Query Responsibility Segregation explained: separating the write model from read models, commands and queries, keeping read models up to date with events, eventual consistency in the user interface, how CQRS relates to event sourcing, a worked example, and when it is worth the complexity.
- Setup guides5 min read
Create a bootable USB drive
Make a bootable USB stick for installing Windows or Linux, using the Media Creation Tool, Rufus or balenaEtcher, then boot a computer from it and get past Secure Boot and the boot menu.
- Security6 min read
CSRF explained
How cross-site request forgery works and how to stop it: why browsers attach cookies to cross-site requests, a concrete attack, SameSite cookies, CSRF tokens and the synchronizer and double-submit patterns, Origin checks, framework defaults in Spring, Django and Express, and when token-based APIs are not affected.
- Databases5 min read
Database indexes
Why a missing index turns a millisecond query into seconds: how B-tree indexes find rows, what they cost on writes, composite indexes and column order, covering indexes, when the database ignores an index, and how to check with EXPLAIN.
- Databases6 min read
Database migrations with Flyway
Manage database schema changes like code with Flyway: why migrations exist, versioned and repeatable migration files, naming rules, the schema history table, using Flyway with Spring Boot, the CLI and Maven or Gradle, checksums and validation, baselining an existing database, and writing safe migrations for zero-downtime deploys.
- Programming5 min read
Deadlocks
What a deadlock is and how to prevent one: the four Coffman conditions, a reproducible Java deadlock, finding it with a thread dump, prevention through lock ordering, timeouts and fewer locks, database deadlocks and retries, and the related problems of livelock and starvation.
- Programming6 min read
Dependency injection
Dependency injection explained from first principles: the problem with creating dependencies inside classes, constructor, setter and method injection, programming to interfaces, wiring by hand with a composition root, DI containers in Spring, scopes, testing with fakes and mocks, DI in Python and TypeScript, and common pitfalls.
- System design6 min read
Design a chat app
A system design walkthrough of a chat application like WhatsApp or Slack: requirements and estimates, WebSocket connections and gateways, message flow and delivery receipts, message storage and IDs, group chats and fan-out, presence, offline users and push notifications, ordering, and scaling.