Jobs are execution units
A workflow contains one or more jobs. Each job runs on a runner and contains ordered steps. Jobs can run independently or depend on other jobs.
Runner environment
A GitHub-hosted runner is a temporary environment prepared for the job. Your workflow should explicitly install or configure what it needs rather than assuming that a particular local development environment exists.
Separate concerns
Keep build, test, packaging and deployment responsibilities understandable. Independent jobs can make failures easier to diagnose and can allow appropriate parallel execution.