6.4 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-17 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version; reviewed in RC-001 (Go) | pending |
Executive Summary
Day 32 of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp" asks for an automated birthday wisher. The program reads a CSV of friends and family, checks whether today is somebody's birthday, picks one of three letter templates at random, inserts the person's name and sends the letter by e-mail through SMTP. This project builds the "normal" difficulty level as a small, readable, runnable Python 3.13+ project with tests, documentation and a tri-lingual wiki, so that course participants and repository viewers can learn from it.
Methodological and Standards Foundation
The work follows the SQA and QC framework mounted at framework/: Business Case, Stakeholder Analysis, Project Plan, milestones, tasks as issues, then code, each step reviewed before the next. Quality characteristics follow ISO/IEC 25010:2023. Source code follows the coding-conventions skill (Python) and the clean-architecture skill; the code is documented with Doxygen comments.
Problem Statement
The course assignment ships only a stub (main.py with hints, three letter templates and a one-row birthdays.csv). A learner who finishes it has working but ad-hoc code. Without a reference solution that is structured, tested and documented, other course participants cannot compare solutions, and a viewer of the repository learns little.
Business Opportunity
A clean reference solution lets participants compare approaches, and gives GitHub viewers a small example of a tested, documented Python project with no runtime dependencies beyond the standard library.
Objectives
- Deliver a Python program that sends a random birthday letter, with the person's name inserted, to every person in
birthdays.csvwhose month and day match today. - Keep the assignment's function and file names recognisable (
birthdays.csv,letter_templates/letter_1.txttoletter_3.txt,[NAME]placeholder). - Deliver automated tests (pytest) that run without network access or real credentials.
- Deliver a README, a Doxygen configuration and a wiki in English, Danish and Bahasa Malaysia, with screenshots.
- Publish the repository with a description and topics.
Scope
In Scope
- Reading
birthdays.csv, matching today's month and day, choosing a random template, replacing[NAME], sending by SMTP with STARTTLS (Gmail by default). - Standard-library implementation (
csv,datetime,random,smtplib); pandas is not used, to keep runtime dependencies at zero. src/andtests/layout,constants.py,pyproject.toml, Python.gitignore,.env.example, Doxyfile, local.venvinstructions.- README from the framework template and a wiki in en, da and ms, with screenshots.
Out of Scope
- A scheduler or hosting (the program is run by hand or by the learner's own scheduler).
- A graphical user interface.
- The "hard" and "extra hard" course levels.
- Storing or testing real credentials:
.envholds a personal token and is only for personal use; it is git-ignored, never imported by tests and never committed.
Expected Benefits
Tangible Benefits
- A runnable, tested reference solution with instructions.
- Tests that give a repeatable result without sending mail.
Intangible Benefits
- Learning value for the author and for other course participants.
- A tidy example for repository viewers.
Strategic Alignment
The project is a learning portfolio piece within the repository group Tirsvad-Udemy-100_days_of_code, and a practice run of the SQA and QC framework on a small project.
Success Criteria
| # | Criterion | Target | Measure |
|---|---|---|---|
| 1 | Tests pass | 100 % of pytest tests pass offline | python -m pytest exit code 0 |
| 2 | Runtime dependencies | 0 third-party packages | pyproject.toml dependencies is empty |
| 3 | Documentation | README plus wiki in 3 languages, each with at least one screenshot | files exist in the repository and wiki |
| 4 | Repository metadata | description and topics set | visible on the git host |
| 5 | Secrets | no secret in git history | search for the token value finds nothing |
Risks
| Risk | Impact | Mitigation |
|---|---|---|
| The Gmail token leaks into git or logs | High: account abuse | .env is git-ignored, only .env.example is tracked, tests never read .env, the token is never printed |
| Tests accidentally send mail | Medium | SMTP is injected and replaced by a fake in tests |
| Screenshots show an address or token | Medium | Screenshots use the dummy data and the dry-run output only |
| Git host token missing for topics or the wiki | Medium | Stop and report; the user supplies the token |
| Birthday on 29 February | Low | Documented behaviour: sent on 28 February in non-leap years, or a documented limitation |
Assumptions
- The Product Owner is S01, who is also developer and reviewer; the AI authors the documents and acts as S01's stand-in in autonomous mode, recorded in each review.
- The people the project is for (S02, S03) are reached only by the user.
- The PO language is English and the domain is IT.
- Python 3.13 or newer is installed; the learner has a Gmail app password.
Constraints
- Python 3.13 or newer, a local
.venv, pytest for tests, constants inconstants.py. - Folder structure
src/,tests/,docs/. - One pull request per milestone, from a branch.
framework/is not edited from this project.
Cost–Benefit Assessment
| Costs | Benefits |
|---|---|
| A few hours of the author's time; no licence or hosting cost | A reference solution, learning value and a portfolio entry; qualitative, as the project has no revenue |
Stakeholders
| Stakeholder ID (SA) | Interest in this project |
|---|---|
| S01 | Product Owner, developer and reviewer; wants a working, tested solution |
| S02 | Udemy coursists; want readable, runnable code with the assignment's names |
| S03 | GitHub viewers; want a clear description, topics and README, and no runtime dependencies |
Recommendation
Proceed. The scope is small, the risk is manageable and the result has learning value.