10.1 From notebook to package
Your project has a structure someone else can run.
This is the jump from notebook to software: a repository layout with source, tests and configs, and training, inference and evaluation code kept apart, with configuration files replacing magic numbers scattered through cells. It opens the production module because everything after assumes structure. The procrastination it forbids is structure-later — later never comes, and a notebook with hidden execution-order state is not reproducible by anyone, including its author.
Work through these
Repo layout: src, tests, configs, data boundaries
A conventional directory structure separating source, tests, configuration and data, with data kept out of the repository. The layout is what lets someone else find their way around without asking.
Configuration with Hydra, YAML or env
Settings held in files or the environment rather than edited into the code, so a run can be described rather than remembered. This is what makes experiments comparable.
Makefiles and task runners
A single entry point for the common commands, so nobody has to reconstruct a long invocation from memory. It is a small file that removes a lot of friction.
Separating training, inference and evaluation code
Keeping training, prediction and evaluation code separate stops the three drifting into one script that does all of them badly. It also makes each independently testable.
Sign in to keep your progress.
Free resources
We haven't checked most of these for screen reader use yet.
Links last checked 29 Aug 2026.
Stuck here?
Ask a mentor. A real person answers, and they can see exactly which topic you're on. Usually within a couple of working days.
Checking your session…
Topics shown in module order.