docs: baseline plan (business case, stakeholders, plan, milestones, reviews)

Business Case, Stakeholder Analysis, Domain Dictionary, Project Plan,
three milestones, review records RC-001 to RC-006 and the traceability
matrix. PO language en, domain it.
This commit is contained in:
2026-10-14 21:17:30 +08:00
parent 301e2164b0
commit 53f56eeb14
17 changed files with 1152 additions and 0 deletions
+171
View File
@@ -0,0 +1,171 @@
# Password Manager 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-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Password Manager Business Case
## Executive Summary
A desktop password manager written in Python 3.13 and Tkinter, built as the
assignment of days 29 and 30 of Udemy's "100 Days of Code: The Complete Python
Pro Bootcamp". The application generates passwords, saves them with a website
and an e-mail address in a JSON file, handles a missing or empty data file
without crashing, and searches the saved data for a website. The repository is
meant to be read, run and compared by other course participants, so it keeps
the assignment's function names, has no runtime dependencies and ships a README
and a wiki in English, Danish and Bahasa Malaysia.
## Methodological and Standards Foundation
- Larman, *Applying UML and Patterns*: planning-first, small iterations, the
artifact chain of the framework mounted at `framework/`.
- ISO/IEC 25010:2023 characteristics tag every quality criterion.
- Clean Architecture layering and MVVM for the user interface
(`clean-architecture` skill).
- Python conventions of the `coding-conventions` skill; Doxygen comments in
the source.
## Problem Statement
The course's earlier version of the program stores passwords in a plain text
file. A text file cannot be searched by website, is hard to update without
rewriting the whole file and breaks the program when it is missing. A course
participant who wants to compare solutions also has no reference repository
that shows the finished assignment together with tests and set-up
instructions.
## Business Opportunity
A small, tested, documented reference solution lets other participants verify
their own work, and shows the author's engineering practice to anyone who
browses the repository.
## Objectives
1. O1: Store each saved entry as a nested key-value record (website, e-mail,
password) in a JSON file.
2. O2: Keep the program running when the data file is missing, empty or invalid
by creating or repairing it.
3. O3: Let the user search the saved data by website and see the e-mail and
password, or a clear message when nothing is found.
4. O4: Publish the work as a runnable, tested and documented repository with a
description, topics, a README and a three-language wiki with screenshots.
## Scope
### In Scope
- Password generation, saving to JSON, searching by website.
- Exception handling for a missing, empty or invalid data file.
- A Tkinter window with the assignment's fields and buttons.
- `pyproject.toml`, pytest tests, `constants.py`, a Python `.gitignore`, a
Doxyfile and Doxygen comments.
- README, a wiki in English, Danish and Bahasa Malaysia, and screenshots.
- Repository description and topics on the git host.
- Instructions for a local `.venv` and `python -m pip install --upgrade pip`.
### Out of Scope
- Encryption of the stored passwords; the file is plain JSON as in the course.
- Editing or deleting saved entries.
- Packaging for PyPI or an installer.
- Any runtime dependency beyond the Python standard library.
## Expected Benefits
### Tangible Benefits
- A runnable program with an automated test suite.
- A README and a three-language wiki a newcomer can follow without help.
- A repository with a description and topics that can be found and understood.
### Intangible Benefits
- Practice of exception handling and JSON in a worked example.
- A worked example of the planning-first framework for a small project.
## Strategic Alignment
The project supports the author's course goal of finishing the 100 Days of Code
bootcamp with reviewable, documented solutions, and the goal of keeping each
day's project as a self-contained repository.
## Success Criteria
| # | Criterion | Target | Measure |
| --- | --- | --- | --- |
| 1 | Entries are stored as nested JSON | 100 % of saves produce valid JSON that `json.load` reads back | pytest test of the storage module |
| 2 | A missing, empty or invalid data file does not crash the program | 3 of 3 cases handled, each covered by a test | pytest tests |
| 3 | A search for a saved website returns its e-mail and password; an unknown website gives a message | 2 of 2 cases covered by tests | pytest tests |
| 4 | The test suite passes on Python 3.13 | 0 failures | `python -m pytest` |
| 5 | The project has no runtime dependencies | 0 entries in `dependencies` of `pyproject.toml` | file inspection |
| 6 | The wiki exists in three languages with the same page set | 3 languages, same pages, every page has a screenshot or a reason it has none | `check-languages.sh` and file listing |
| 7 | The repository has a description and at least 5 topics | description set, topics >= 5 | git host API read |
## Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| Plain-text storage of passwords is mistaken for a secure design | Readers copy an insecure pattern | README and wiki state in a Security note that the file is unencrypted and for learning only |
| The author's token in `.env` is committed or printed | Credential leak | `.env` is in `.gitignore`, is never imported by the program and is never echoed |
| Tkinter is missing on a reader's Python | The window does not start | README lists Tkinter as a requirement and the logic is testable without the window |
| Danish or Bahasa Malaysia translation errors | Misleading instructions | Code blocks and commands stay English; English is the authoritative text |
| Screenshots become outdated | Docs disagree with the program | Screenshots are produced by a documented step in the last milestone |
## Assumptions
- Python 3.13 or newer is installed on the reader's machine.
- Tkinter ships with the reader's Python.
- The git host `git.tirsystem.com` is reachable and the token in `.env` can edit
repository metadata and open pull requests.
- S01 can act as reviewer of every artifact, as stand-in in autonomous mode.
## Constraints
- Python 3.13 or newer; `venv` for the environment; pytest for tests.
- Folder structure `src/`, `tests/`, `docs/`.
- Constants live in `constants.py`.
- No runtime dependencies unless needed.
- Work is done on branches and pull requests, one per milestone.
- Tokens are read from `.env`, which is neither tested nor imported.
## Cost–Benefit Assessment
The assessment is qualitative: the project is an unpaid learning exercise with
no revenue, and the cost is the author's time.
| Costs | Benefits |
| --- | --- |
| About three working sessions of the author's time | A complete, reviewed reference solution |
| Effort to keep three wiki languages in step | Readable by English, Danish and Malay speaking participants |
| Effort to maintain tests and documentation | A reliable program and a repeatable set-up |
## Stakeholders
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Finish the assignment, own the result and review it |
| S02 | Readable, runnable code with the assignment's function names and run instructions |
| S03 | A clear description, topics and README, and no runtime dependencies |
## Recommendation
Proceed — the scope is small, every objective is verifiable by a test or a file
check, and the risks have mitigations.
---
[SA-001]: ./stakeholder-analysis.md