Posts

Showing posts from September, 2026

Test Data Management Explained: Fixtures, Factories, Seeding and Synthetic Data

Image
Ask five experienced testers what slows their automation down and you get four different answers: the CI queue, flaky selectors, waiting for staging to be reset — and, eventually, test data . Test data is the invisible half of test automation. Nobody demos a selector strategy; everybody feels the cost of a fixture that leaks a row into the next test, or a staging database wiped mid-run by a teammate. Your tests are only as trustworthy as the data underneath them. This guide covers the four properties a healthy dataset must have, the patterns that keep it maintainable, reproducible seeding, when synthetic generation beats hand-written literals, and how to work with production-derived data without breaking the law. Table of Contents Why Test Data Is the Hardest Part of Testing The Four Properties of a Healthy Test Dataset Patterns: Literals, Builders, Factories and Fixtures Seeding a Database Reproducibly Synthetic Data: Fakers and Boundary Values Using Production Data Safely...

Python Packaging Explained: pyproject.toml, PEP 517 Build Hooks, Wheels and Reproducible Installs

Image
Almost every Python developer ships code to somebody else: an internal library, a CLI tool, an API service deployed by a platform team. And almost every one of us has been confused by Python packaging at least once. The confusion has a historical cause. Python went roughly fifteen years with no single canonical way to describe a project. setup.py was a script. setup.cfg was a config file. requirements.txt was a pin list that was not a spec. Modern Python fixed most of this, and the fix is genuinely elegant — but it is split across three documents (or two, if you are lucky) and a handful of PEPs that are written for implementers rather than humans. This article walks the whole path end to end: how a project is declared, how a build frontend talks to a build backend, what is actually inside a wheel, and how you get installs that are byte-for-byte reproducible in CI. Table of Contents Why Python Packaging Feels Hard Two Artifacts: sdist and Wheel pyproject.toml: The Modern Pr...

Zero Trust Architecture Explained: Replacing Network Perimeters with Identity-Based Security

Image
For twenty years, enterprise security was built around a wall. Inside the wall was trusted; outside it was hostile. Firewalls, VPNs, bastion hosts and segmented data centres all enforced one assumption: if a request came from inside, we can relax . That assumption stopped being true roughly when work stopped happening inside. Now an engineer opens a laptop at home, authenticates to a Kubernetes cluster, triggers a pipeline from a phone, and checks a finance dashboard that has never touched company hardware. There is no meaningful "inside" left to defend. Zero trust architecture is the industry's answer. It is not a product and not a technology you can switch on. It is an architectural posture — a set of decisions about where trust comes from , how access is granted , and what happens when assumptions break . A note on terminology. "Zero trust" does not mean "trust nothing." It means no implicit trust . Every request is evaluated explicitly, from...

Service Mesh Explained: How Istio, Linkerd and eBPF Proxies Secure and Route Microservice Traffic

Image
Decomposing a monolith into microservices does one thing reliably: it multiplies the number of network calls. A request that used to be a local method invocation now crosses a process boundary, a container boundary and usually a node boundary — many times per user action. Every hop needs answers to the same questions. Is the caller who it claims to be? Should the request be encrypted? What happens if the downstream service returns a 503 or hangs? Which version of reviews should receive 5% of the traffic? Answering these inside every service — in Java, Go, Python or Node.js — means writing the same subtle, security-critical networking code repeatedly. A service mesh is the alternative: a layer of infrastructure proxies that answers those questions for your services. Table of Contents Why a Service Mesh Exists How a Mesh Is Built Zero-Trust Networking with mTLS Traffic Management Observability The Mainstream Implementations Real-World Walkthrough: Onboarding an App with Is...