# 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-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [e1a3d8d] | --- ## Executive Summary Day 48 of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp" teaches Selenium WebDriver: clicking links, typing into inputs, sending special keys and filling out a sign-up form. This project turns that assignment into a small, readable, runnable Python repository with tests, documentation, a screenshot for every lecture step and a three-language wiki. It is a learning and portfolio project with one person doing the work. ## Methodological and Standards Foundation - The SQA and QC framework mounted at `framework/` governs documents, reviews and the plan-first gate. - Quality characteristics follow ISO/IEC 25010:2023. - Code follows the `coding-conventions` skill (Python) and the layering of the `clean-architecture` skill. - Docs-as-code: every change reaches `main` by a pull request, one pull request per milestone. ## Problem Statement - The course assignment is normally solved as one throw-away script. The author's earlier solution (the day-48 folder of a monolithic course repository) is a scratch file that does not follow the lecture, has no tests and no documentation. - Other course participants cannot easily compare solutions or see what each lecture step produces. - A repository without a description, topics and a README is neither found nor understood by GitHub viewers. ## Business Opportunity A clean reference solution for the lecture lets the author keep a tidy portfolio, lets course participants compare solutions, and shows a repeatable project structure (src, tests, docs, wiki) for the remaining days of the course. ## Objectives 1. Deliver Python code that automates the lecture steps with Selenium: click a link by its text, search for "Python" and press Enter, and fill out a form (first name, last name, email) and click the sign-up button. 2. Deliver pytest tests for all logic that needs no browser. 3. Deliver a screenshot for each lecture step, shown in the README and the wiki. 4. Deliver a wiki in English, Danish and Bahasa Malaysia that explains what was gained in each lecture step. 5. Configure the repository: description, topics, Python `.gitignore`, `pyproject.toml`, Doxyfile, and instructions for a local `.venv`. ## Scope ### In Scope - Python 3.13 or newer package under `src/`, tests under `tests/`, documents under `docs/`. - Constants in `constants.py`; Doxygen comments in the source and a `Doxyfile`. - `pyproject.toml`, venv instructions (`python -m pip install --upgrade pip`), Python `.gitignore`. - README from the framework template, with run and test instructions and screenshots. - Wiki pages in English, Danish and Bahasa Malaysia (`docs/wiki/`), with the same screenshots. - Repository description and topics on the git host. ### Out of Scope - Running the browser automation on the host desktop (it runs in Docker, see `framework/process/gui-testing.md`). - Later days of the course and the final project. - Packaging for PyPI, a graphical front end, and a web service. - Reading, testing or importing the personal tokens in `.env`. ## Expected Benefits ### Tangible Benefits - A runnable reference solution with passing tests. - One screenshot per lecture step (at least three). - Three language versions of the wiki. ### Intangible Benefits - A reusable project layout for the other course days. - Practice with Selenium, pytest and docs-as-code. - A repository others can read and learn from. ## Strategic Alignment The project supports the author's goal of completing the course with a documented, reviewable portfolio, and the framework's goal of showing the plan-first workflow on a small project. ## Success Criteria | # | Criterion | Target | Measure | | --- | --- | --- | --- | | 1 | Tests pass | 100 % of pytest tests pass on Python 3.13 | `pytest` exit code 0 | | 2 | Lecture steps covered | 3 of 3 steps (link click, search, form) implemented and shown by a screenshot | Files in `docs/images/` | | 3 | Wiki languages | 3 of 3 languages with the same page set | Files in `docs/wiki/` | | 4 | Runtime dependencies | Exactly 1 (selenium) | `dependencies` in `pyproject.toml` | | 5 | Repository metadata | Description set and at least 5 topics | Git host API response | | 6 | Quality gate | Every document and the code have an `RC-*` with verdict Go | `docs/sqa/reviews/` | ## Risks | Risk | Impact | Mitigation | | --- | --- | --- | | The assignment's form page (a Heroku demo) is offline | The form step cannot be shown against the original site | A local HTML fixture with the same field names serves tests and screenshots; the original URL is a constant | | Docker or the browser image is unavailable | No screenshots | Stop and report (gui-testing rule 5); never fall back to the host desktop | | Wikipedia changes its page layout | Selectors break | Selectors live in `constants.py`; screenshots record the state on the capture date | | Danish or Bahasa Malaysia text contains errors | Misleading text | English is authoritative; translations follow page by page; the author can correct them | | Tokens in `.env` leak | Account compromise | `.env` is in `.gitignore` and is never read by project code or tests | ## Assumptions - S01 is Product Owner, developer and reviewer; in autonomous mode the AI stands in for the reviewer, recorded as not independent. - Docker is installed on the author's machine. - The git host accepts the token in `.env` for repository and issue operations. - "Python greater than 3.13" is read as 3.13 or newer (`requires-python = ">=3.13"`). ## Constraints - Duration: one week, 2026-10-28 to 2026-11-04. - Python 3.13 or newer, `venv`, `pytest`, `pyproject.toml`. - Folder structure `src/`, `tests/`, `docs/`. - Only runtime dependency: selenium. - Product Owner domain: IT; language: English. ## Cost–Benefit Assessment Qualitative, because the project is unpaid learning work with no revenue. | Costs | Benefits | | --- | --- | | About one week of the author's time and AI usage | A reference solution, documentation in three languages and a reusable project layout | | A Docker image download | Safe, reproducible browser runs | ## Stakeholders | Stakeholder ID (SA) | Interest in this project | | --- | --- | | S01 | Wants a tidy portfolio piece (CN-001, CN-002, CN-007) | | S02 | Wants readable, runnable code with the assignment's function names and run instructions (CN-003, CN-004) | | S03 | Wants a clear repository description, topics and README, and no unnecessary runtime dependencies (CN-005, CN-006) | ## Recommendation Proceed — the scope is small, the risks are mitigated and the outcome is a reusable reference. --- [SA-001]: ./stakeholder-analysis.md [e1a3d8d]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-fill-out-form/commit/e1a3d8d304d4b6ece1a3f95ee02b597e30a97520