The Coding Lab

Software engineering notes & case studies

Software engineering, from first principles to production.

Notes on backend systems, search, delivery, and the engineering decisions behind reliable software.

Featured · DevOps

From Docker Compose to K3s: Evolving a Home-Server Deployment

Why a single-host IMDb Clone deployment moved from Docker Compose to K3s, Ansible, Argo CD, encrypted GitOps, managed TLS, and observable release flows.

Read post ->

2023

2021

Python

Managing Environments with Conda and pip

Managing Python environments with conda and pip, including channels, package exports, and reproducible setup files.

Python

Turning a Website into an API

Designing a typed FastAPI adapter around GitHub Trending, from resilient HTML parsing and fixture tests to caching, containers, and releases.

Python

Publishing a Pure-Python CLI with Conda - 9/9

Deciding when a conda package adds value, writing a noarch recipe, testing it, and publishing it without unnecessary platform conversion.

Python

Building a Reliable PyPI Release Pipeline - 8/9

Versioning, building, checking, testing, and publishing one immutable Python release through GitHub Actions and PyPI.

Python

Documentation as Part of the Product - 7/9

Designing documentation for users and maintainers, then building tested API and project documentation with Sphinx.

Python

Testing a Python CLI and Automating CI - 6/9

Testing CLI output and failures without live HTTP, exercising built packages with tox, and choosing a focused GitHub Actions matrix.

Python

Packaging a Python CLI with Console Scripts - 5/9

Packaging a Python CLI with setup.py, a src layout, dependencies, and an installable console entry point.

Scripting

Why a Bash Installer Becomes a Liability - 4/9

Building a careful user-level installer for a Python CLI and discovering which packaging responsibilities it still cannot solve well.

Python

Designing a CLI with argparse - 3/9

Replacing manual argument parsing with argparse while keeping parsing, network behavior, output, and process termination separate.

Python

When sys.argv Stops Scaling - 2/9

Reading command-line arguments with sys.argv, defining useful exit codes, and seeing why manual CLI parsing becomes difficult to maintain.

Python

From a Python Script to a Command-Line Tool - 1/9

Starting with a tiny Python HTTP client and identifying the contracts that turn a useful script into a reliable command-line tool.