Add baseline: Business Case, Stakeholder Analysis, Project Plan, milestones and reviews
Accepts BC-001, SA-001, PP-001 and MIL-001 to MIL-003 with review records RC-001 to RC-005 (autonomous mode, AI as stand-in for S01).
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
# Business Case
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | BC-001 |
|
||||
| CrossReference | [SA-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version, reviewed in RC-001 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Day 26 of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp" teaches list and dictionary comprehensions through a small console tool: the user types a word and the program spells it out with the NATO phonetic alphabet. This project delivers that assignment as a clean, tested, documented Python repository that other course participants and GitHub visitors can read, run and compare against their own solutions. It uses only the Python standard library at runtime.
|
||||
|
||||
## Methodological and Standards Foundation
|
||||
|
||||
- Methodology: the project follows the SQA and QC framework mounted at `framework/` (plan first, review every artifact against its QC checklist, one pull request per milestone).
|
||||
- Quality model: ISO/IEC 25010:2023 characteristics tag every QC criterion; code is reviewed against `qc-programming-python.md`.
|
||||
- Engineering practice: Clean Architecture layering at a size proportionate to the program, tests written with pytest, source documented with Doxygen comments.
|
||||
|
||||
## Problem Statement
|
||||
|
||||
- The course assignment ships as a loose `main.py` and a CSV file with no tests, no run instructions and no project structure, so a participant cannot easily share or compare a solution.
|
||||
- Public solutions to course assignments are often undocumented, depend on heavy libraries (the course uses Pandas for a 26-row table) and are not runnable without guesswork.
|
||||
|
||||
## Business Opportunity
|
||||
|
||||
A small, exemplary solution lets the Product Owner practise professional project hygiene (packaging, tests, CI, documentation, multilingual wiki) on a trivially small domain, and gives other learners and GitHub visitors a reference they can run in a minute.
|
||||
|
||||
## Objectives
|
||||
|
||||
1. O1: Deliver a console program that converts a word typed by the user into the list of NATO phonetic code words, built with list and dictionary comprehensions, keeping the assignment's function names.
|
||||
2. O2: Make the repository runnable by following the README on Windows PowerShell, Debian Linux and macOS with a local `.venv`.
|
||||
3. O3: Cover the behaviour with automated pytest tests that run in continuous integration.
|
||||
4. O4: Document the source with Doxygen comments and a `Doxyfile`, and document the project in a README and a wiki in English, Danish and Bahasa Malaysia, with screenshots.
|
||||
5. O5: Present the repository to GitHub viewers with a description and topics, and with no runtime dependencies.
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
|
||||
- Console program: reads a word, prints the NATO code words for its letters; asks again when the input contains a character that is not a letter.
|
||||
- NATO alphabet data file (comma-separated values, CSV, as supplied with the assignment) and a loader that uses the standard library.
|
||||
- Project structure `src/`, `tests/`, `docs/`; `pyproject.toml`; `constants.py`; Python `.gitignore`; `Doxyfile`.
|
||||
- pytest test suite; continuous integration (CI) workflow that runs the tests.
|
||||
- README from the framework template; wiki pages in en, da and ms; screenshots for README and wiki.
|
||||
- Repository description and topics on the git host.
|
||||
|
||||
### Out of Scope
|
||||
|
||||
- A graphical or web interface.
|
||||
- Publishing a package to the Python Package Index (PyPI).
|
||||
- Runtime dependencies such as Pandas.
|
||||
- Non-Latin alphabets and digits (rejected with a message).
|
||||
- Other course days.
|
||||
|
||||
## Expected Benefits
|
||||
|
||||
### Tangible Benefits
|
||||
|
||||
- A runnable, tested reference solution with a one-command test run.
|
||||
- A reusable repository skeleton (pyproject, continuous integration, Doxygen, wiki) for later course days.
|
||||
|
||||
### Intangible Benefits
|
||||
|
||||
- Practice in professional project hygiene.
|
||||
- A readable example for other learners, in three languages.
|
||||
|
||||
## Strategic Alignment
|
||||
|
||||
The project supports the Product Owner's personal goal of completing the 100 Days of Code bootcamp with portfolio-quality repositories, and the framework's goal of demonstrating the plan-first workflow on a small project.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
| # | Criterion | Target | Measure |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Program spells a word correctly | Every letter A-Z maps to its NATO code word; input is case-insensitive | pytest: all 26 letters and a mixed-case word pass |
|
||||
| 2 | Tests pass | 100 % of tests pass on Python 3.13 locally and in CI | `python -m pytest` exit code 0; CI run green |
|
||||
| 3 | No runtime dependencies | 0 runtime dependencies | `pyproject.toml` has an empty `dependencies` list |
|
||||
| 4 | Setup works from the README | A fresh clone runs the program using only the README steps | Manual run of the README steps on Windows PowerShell |
|
||||
| 5 | Documentation complete | README sections of the template, wiki in 3 languages, Doxygen builds without warnings | `check-readme.sh` exit 0; every wiki page exists in en, da and ms; `doxygen Doxyfile` reports 0 warnings |
|
||||
| 6 | Repository presented | Description and at least 5 topics set | Repository page and API show both |
|
||||
|
||||
## Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| The git host token lacks scope for editing the repository or wiki | Description, topics or wiki cannot be published | Stop and report; keep the wiki content as files in the working tree and ask S01 for a token with the needed scope |
|
||||
| The wiki is not enabled on the host | Wiki pages cannot be pushed | Enable it through the repository settings API; otherwise stop and report |
|
||||
| Danish and Bahasa Malaysia translations contain errors | S02 or S03 read wrong text | Keep wiki sentences short and simple; S01 reviews the translations in the pull request |
|
||||
| Starter code is copied verbatim | Originality concerns | The program is written fresh; only the supplied CSV data is reused, as the assignment intends |
|
||||
| Secrets in `.env` leak into the repository | Credential exposure | `.env` is git-ignored, never imported by the program or tests, and never echoed |
|
||||
|
||||
## Assumptions
|
||||
|
||||
- The Product Owner is S01, who also develops and reviews; in autonomous mode the AI acts as S01's stand-in reviewer and the review records say so.
|
||||
- Python 3.13 or newer is available on the machines of the readers.
|
||||
- The git host (Gitea) offers repository, topic and wiki features through its application programming interface (API) and git remote.
|
||||
- The CSV with 26 letter/code word rows supplied with the assignment is the data source.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Python 3.13 or newer, a local `venv`, `pytest`, constants in `constants.py`, configuration in `pyproject.toml`.
|
||||
- Folder structure `src/`, `tests/`, `docs/`.
|
||||
- No runtime dependencies unless needed.
|
||||
- Tokens are read from `.env` for personal use only; the project and its tests never import or test it.
|
||||
- One pull request per milestone; no commit on `main`.
|
||||
|
||||
## Cost–Benefit Assessment
|
||||
|
||||
Qualitative, because the project is a personal learning exercise with no revenue; the effort is a few hours of S01's time and AI assistance.
|
||||
|
||||
| Costs | Benefits |
|
||||
| --- | --- |
|
||||
| A few hours of effort; hosting on an existing git host | A reusable reference repository, practice with the framework, a shareable example for S02 and S03 |
|
||||
|
||||
## Stakeholders
|
||||
|
||||
| Stakeholder ID (SA) | Interest in this project |
|
||||
| --- | --- |
|
||||
| S01 | Owns and builds the project; wants a clean, complete solution |
|
||||
| S02 | Wants readable, runnable code with the assignment's function names and run instructions |
|
||||
| S03 | Wants a clear description, topics and README, and no runtime dependencies |
|
||||
|
||||
## Recommendation
|
||||
|
||||
Proceed: the scope is small, the risks are low and every objective is verifiable.
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
Reference in New Issue
Block a user