core Estimated learning time: 5 h

10.1 From notebook to package

Your project has a structure someone else can run.

Before:05. Classical Machine Learning

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

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.