Most engineering concepts are easier than they look once someone explains them clearly. This page collects short explainer notes on the fundamentals I find myself re-explaining most often, each paired with the best external visual or video I have found on the topic.

APIs

An API is a contract: this is what I will accept, this is what I promise to return, this is how I will behave when something goes wrong. Everything else - REST, GraphQL, gRPC, WebSockets - is just a different way of expressing that contract over the wire.

Types of API testing

There are nine commonly-cited categories of API test: functional, load, security, reliability, runtime error, validation, UI, penetration, and fuzz. In practice most teams do contract tests and load tests well, security tests occasionally, and the rest intermittently.

API vs SDK

An API is the contract; an SDK is a wrapper library that makes calling the API in a specific language less painful. You can always call the API directly - you almost never should, because the SDK handles retries, pagination, auth, and rate limits for you.

Databases

Six database types worth knowing

Relational, document, key-value, column-family, graph, and time-series. Most production systems use more than one, picked per workload rather than chosen as a single organisational standard. “Polyglot persistence” is the term, and the hard part is not picking the database - it is keeping them in sync.

Why is Redis fast

The short answer: everything lives in memory, the data structures are purpose-built, and the single-threaded event loop avoids lock contention. The longer answer involves the specifics of epoll, the Redis protocol, and pipelining.

DNS

DNS is the phone book of the internet, and like a phone book it is eventually consistent, aggressively cached, and occasionally wrong. Most production outages I have seen that looked like “the internet is broken” were actually DNS - either a stale record, a propagation delay, or a resolver misconfigured somewhere.

Git

Git’s popularity comes down to three things: it is distributed (every clone is a full copy), branching is cheap enough to be a casual operation, and the content-addressable object model is surprisingly simple once you understand it. The confusion most people hit comes from the command-line interface, which is famously inconsistent, rather than from the model underneath.

Linux

How the Linux boot process works

BIOS or UEFI hands control to the bootloader (usually GRUB), which loads the kernel and an initial RAM disk. The kernel mounts the root filesystem and launches PID 1 (systemd on most modern distributions), which then starts every other service according to its dependency graph.

Programming Languages

How C++, Java, and Python differ under the hood

C++ compiles directly to machine code and has no runtime garbage collector - you manage memory yourself. Java compiles to bytecode which runs on the JVM, with a garbage collector and a JIT compiler that optimises hot paths. Python is interpreted (CPython reads bytecode at runtime), dynamically typed, and significantly slower than either for CPU-bound work - which is why the scientific ecosystem pushes heavy computation into C extensions via NumPy and friends.

Further reading