7.6 KiB
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 | S01 (AI as stand-in, autonomous mode) | Initial version | dcef5e6 |
Executive Summary
Day 45 of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp" teaches web scraping with Requests and BeautifulSoup. This project turns the day's assignment into a small, readable and tested Python repository: parsing a local HTML file, scraping the Hacker News front page, and scraping Empire's "100 Greatest Movies" list into a numbered movies.txt. The repository is documented with a README and a three-language wiki (English, Danish, Bahasa Malaysia) that shows a screenshot per lecture step and explains what each step taught.
Methodological and Standards Foundation
The project follows the SQA and QC framework mounted at framework/ (plan-first gate, one reviewed artifact per step) and Larman's Applying UML and Patterns where a model is needed. Product quality is described with ISO/IEC 25010:2023 characteristics. Source code follows the coding-conventions (Python) and clean-architecture skills, with Doxygen comments in the source.
Problem Statement
- The course assignment ships only a stub (
main.py) and a sample HTML file, so every participant ends with a throw-away script that is hard to run, test or compare. - A solution that only works against a live site breaks when the site changes; the assignment therefore pins an Internet Archive snapshot.
- Course lessons give no written record of what each step taught, which makes later review difficult.
Business Opportunity
A clean reference repository lets the course participant revisit the lessons, lets other coursists compare solutions, and lets GitHub visitors find a small, dependency-light scraping example with tests and multi-language documentation.
Objectives
- O1: Deliver the three lecture exercises (parse HTML, Hacker News, 100 movies) as importable Python functions that keep the assignment's names.
- O2: Generate
movies.txtwith the movies numbered1) Titlein ascending order from the Wayback Machine snapshot (alternative: the live Empire URL). - O3: Provide tests with pytest that run offline against saved fixtures.
- O4: Provide a README with set-up of a local
.venv, how to run the project and the tests. - O5: Provide a wiki in English, Danish and Bahasa Malaysia with one screenshot and one "what we gained" explanation per lecture step.
- O6: Set the repository description and topics, and install the shared CI workflows of
TirSystem/github-action.
Scope
In Scope
- Python package under
src/, tests undertests/, documents underdocs/. pyproject.toml,constants.py, Python.gitignore,Doxyfile, Doxygen comments.- Lecture steps: parsing HTML and making soup, finding and selecting elements, scraping Hacker News, scraping ethics note, 100 movies.
- README from the framework template; wiki pages in en, da and ms; screenshots per step.
- Repository description and topics on the git host; workflows for quality checks, English comments, code metrics, wiki publishing and milestone publishing.
Out of Scope
- Scraping behind authentication or of copyrighted content beyond the course list titles.
- A graphical or web interface.
- Any use of the credentials in
.envinside the project (personal use only, never imported, tested or committed). - Runtime dependencies other than those the assignment needs (
requests,beautifulsoup4).
Expected Benefits
Tangible Benefits
- A runnable, tested repository with a generated
movies.txt. - A wiki in three languages that documents every lecture step with screenshots.
- CI evidence (lint, type check, tests) on every pull request.
Intangible Benefits
- Faster revision of the Day 45 material.
- A reusable pattern for later "100 Days" projects.
Strategic Alignment
The project supports the participant's goal of completing the bootcamp with documented, reviewable work, and the framework's goal of exercising the SQA and QC process on a real, small project.
Success Criteria
| # | Criterion | Target | Measure |
|---|---|---|---|
| 1 | Tests pass offline | 100 % of pytest tests green | python -m pytest in CI and locally |
| 2 | movies.txt complete |
100 numbered lines, ascending | test on the generated file |
| 3 | Wiki completeness | every page exists in en, da and ms | check-languages style page-set comparison |
| 4 | Screenshot coverage | one screenshot per lecture step in README and each wiki language | review count |
| 5 | Runtime dependencies | only requests and beautifulsoup4 |
pyproject.toml review |
| 6 | Repository metadata | description and at least 5 topics set | host API read-back |
Risks
| Risk | Impact | Mitigation |
|---|---|---|
| Live sites change markup (Hacker News, Empire) | Scrapers return nothing | Parse functions take HTML text; tests use saved fixtures; Wayback URL pinned |
| Wayback Machine unavailable | Cannot fetch the list | Fall back to the live Empire URL named in the request |
| Scraping too often loads a server | Unethical use | One request per run, a User-Agent, respect robots.txt, no loops |
Token in .env leaks |
Account compromise | .env is git-ignored, never imported; tokens are only read by shell commands for the git host API |
| Translations drift from English | Inconsistent wiki | English is authoritative; same page set checked per pull request |
Git host repository name differs from the remote (Tirsvad-Udemy-100_days_of_code vs Tirsvad-Udemy-100-days-of-code/045-scrape-movies) |
Metadata set on the wrong repository | Confirm the target before the API call (see Open Issues in the Project Plan) |
Assumptions
- Python 3.13 or newer is installed;
venvis available. - The git host
git.tirsystem.comis reachable and the token in.envis valid. - S01 is Product Owner, developer and reviewer; in autonomous mode the AI acts as the stand-in reviewer and records it.
- The runners of
git.tirsystem.comare available for the workflows.
Constraints
- Python greater than 3.13 (3.13 or newer),
venv,pytest,pyproject.toml, constants inconstants.py. - Folder structure
src/,tests/,docs/. - One branch and one pull request per milestone.
- No attribution lines in commit messages or pull request descriptions.
- Do not edit
framework/.
Cost–Benefit Assessment
| Costs | Benefits |
|---|---|
| Author time of S01 for plan acceptance and review of the summary | Reusable, tested reference repository |
| Runner minutes for CI | Automatic quality evidence |
| Translation effort for da and ms | Documentation readable by more coursists |
The assessment is qualitative: the project is a learning exercise with no revenue.
Stakeholders
| Stakeholder ID (SA) | Interest in this project |
|---|---|
| S01 | Completes and reviews the assignment; owns the product |
| S02 | Reads, runs and compares the code |
| S03 | Finds the repository by description and topics and judges it by README |
Recommendation
Proceed — the scope is small, the inputs are known, and the process is exercised end to end.