Project Roadmap
This roadmap describes how the repository is built and how it may grow.
The goal is to keep every change small, understandable, and easy to review.
Guiding principles
This project should be developed using a clean and realistic workflow:
- small branches,
- focused commits,
- pull requests for meaningful changes,
- readable documentation,
- automated checks,
- gradual project growth.
The repository should be useful both as a tutorial and as an example of a modern Python project.
Current foundation
The first foundation is now in place.
The repository already includes:
- a clear README landing page,
- quickstart guides,
- a step-by-step guide,
- a small example package,
- the
src/layout, - pytest tests,
- Ruff linting and formatting,
- GitHub Actions CI,
- a pull request template,
- contributing guidelines,
- a glossary,
- a command cheatsheet,
- common questions,
- an example pull request guide,
- a from-script-to-project guide,
- a Markdown review guide,
- a GitHub Actions logs guide,
- a troubleshooting guide,
- a guide to building distributions,
- EditorConfig.
Done
These parts are already included in the repository.
Repository foundation
- [x] Bootstrap the repository
- [x] Add a project roadmap
- [x] Add contribution guidelines
- [x] Add a pull request template
- [x] Add a README landing page
- [x] Add GitHub metadata guidance
- [x] Protect
mainwith pull request and CI requirements - [x] Enable automatic deletion of merged branches
- [x] Choose and document the merge commit strategy
Python project setup
- [x] Initialize the project with
uv - [x] Add
pyproject.toml - [x] Add
.python-version - [x] Add
uv.lock - [x] Use the
src/layout - [x] Create a small example package
- [x] Clarify the difference between project structure and packaging
- [x] Add the
uv_buildbuild backend - [x] Install the project in editable mode with
uv sync - [x] Remove the pytest
pythonpathshortcut
Tests and quality tools
- [x] Add
pytest - [x] Add a minimal test suite
- [x] Configure pytest in
pyproject.toml - [x] Add Ruff
- [x] Configure Ruff in
pyproject.toml - [x] Explain linting and formatting
- [x] Explain when ignoring linting rules may be reasonable
- [x] Check internal Markdown links with pytest
- [x] Add whitespace edge cases to the example test suite
- [x] Demonstrate pytest parametrization with related inputs
- [x] Add mypy as a development dependency
- [x] Configure strict local type checking
- [x] Run type checks against source code and tests
- [x] Add pytest-cov and local branch coverage reporting
Continuous integration
- [x] Add a GitHub Actions workflow
- [x] Run linting in CI
- [x] Run formatting checks in CI
- [x] Run tests in CI
- [x] Run coverage reporting in CI
- [x] Run type checking in CI
- [x] Build distributions in CI
- [x] Add a CI badge to the README
- [x] Explain how CI supports pull requests
Learning materials
- [x] Explain why the guide exists
- [x] Explain project structure
- [x] Explain
uv - [x] Explain
pyproject.toml - [x] Explain pytest
- [x] Explain Ruff
- [x] Explain GitHub Actions and CI
- [x] Explain Git, commits, branches, and pull requests
- [x] Add common beginner mistakes
- [x] Add a project checklist
- [x] Add quickstarts
- [x] Add expected results to quickstarts
- [x] Add common questions
- [x] Add a glossary
- [x] Add a command cheatsheet
- [x] Add an example pull request guide
- [x] Add a from-script-to-project guide
- [x] Add a short guide for reviewing Markdown changes
- [x] Add a guide for reading GitHub Actions logs
- [x] Add a troubleshooting guide for common setup problems
- [x] Review internal documentation links
- [x] Explain how to build wheels and source distributions
- [x] Keep the README focused as a landing page
- [x] Separate the main learning path from reference material
- [x] Add previous and next navigation to the core chapters
- [x] Review commit history and self-review coverage in the existing guides
- [x] Standardize terminology and dependency examples across the documentation
- [x] Explain type hints and static type checking with mypy
- [x] Explain what coverage does and does not measure
- [x] Avoid treating coverage percentage as a quality guarantee
- [x] Add fast
pre-commithooks - [x] Explain how local hooks complement complete checks and CI
- [x] Add focused Markdown linting locally and in CI
- [x] Keep Markdown linting separate from link checks and human review
- [x] Add an MkDocs site with explicit navigation and strict CI builds
- [x] Keep documentation sources readable without the generated site
- [x] Publish the documentation site with GitHub Pages
- [x] Keep validation and deployment in separate workflows
- [x] Add structured forms for learner feedback and problem reports
Next
These are good candidates for upcoming small pull requests.
Optional convenience
- [ ] Consider a task runner chapter
- [ ] Consider
Makefileas an optional convenience layer - [ ] Consider
justas an alternative task runner
Task runners should not replace the basic commands in the main learning path.
They should be introduced only as convenience wrappers after the underlying commands are clear.
Later
These topics are intentionally not part of the first foundation.
They may be added later as separate chapters.
Packaging
- [ ] Explain publishing to PyPI
Release automation
- [ ] Explain versioning
- [ ] Add release notes
- [ ] Add GitHub releases
- [ ] Consider automated release workflows
Docker
- [ ] Explain when Docker is useful
- [ ] Add Docker only if it solves a real problem for the guide
Not part of the original foundation
These topics were deliberately excluded from the original foundation:
- Docker,
- publishing to PyPI,
- release automation,
- documentation site generation and deployment,
- pre-commit hooks,
- coverage gates,
- complex multi-job CI,
- template generation.
These tools can be useful, but adding them too early would make the foundation harder to understand.
Rule of thumb
The project should grow only when a new addition teaches something useful.
A smaller setup that readers understand is better than a large template copied without context.