Files
025-squirrel/docs/business-case.md
Tirsvad 2916b0efb0
Tests / Run the tests (pull_request) Successful in 43s
Resolve pending commit links
2026-10-13 15:38:09 +08:00

139 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Business Case
## Metadata
| Key | Value |
| --- | --- |
| ID | BC-001 |
| CrossReference | |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [f1b3c03] |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [UCD-001] | [259d017] |
---
## Executive Summary
Day 25 of the Udemy "100 Days of Code" bootcamp asks the participant to analyse the 2018 Central Park Squirrel Census with Pandas: count the gray, cinnamon and black squirrels by primary fur colour and export the counts to `squirrel_count.csv`. This project delivers that assignment as a small, readable, runnable Python repository with tests, source documentation, a README and a three-language wiki, so that the participant keeps a reviewed solution and other course participants and GitHub visitors can reuse it.
## Methodological and Standards Foundation
The artifacts follow the software quality assurance (SQA) and quality control (QC) framework mounted at `framework/` (Business Case, Stakeholder Analysis, Project Plan, milestones, tasks, code). Quality is judged against ISO/IEC 25010:2023 characteristics through the QC checklists of the framework; source code is reviewed against `qc-programming-python`.
## Problem Statement
The lecture shows the analysis as a sequence of notebook-style steps. A participant who wants to keep, share and compare the solution has no structured repository: no repeatable set-up, no tests, no documentation and no instructions that another participant can run.
## Business Opportunity
A single, well-structured example repository lets the participant practise professional project hygiene (virtual environment, tests, continuous integration, documentation) on a small assignment, and gives other participants a solution to compare against.
## Objectives
1. Deliver a Python program that reads the squirrel census file (comma-separated values, CSV), counts squirrels by primary fur colour (gray, cinnamon, black) and writes `squirrel_count.csv`.
2. Cover the program with automated pytest tests that run without the full census file.
3. Document how to create a local `.venv`, upgrade pip, run the program and run the tests, for Windows PowerShell, Linux Debian and macOS.
4. Document the source with Doxygen comments and a `Doxyfile`.
5. Publish the repository with a description, topics, a README and a wiki in English, Danish and Bahasa Malaysia, with screenshots.
## Scope
### In Scope
- Reading the census file and counting squirrels by primary fur colour.
- Creating a summary table and exporting it as `squirrel_count.csv`.
- A command-line entry point, `constants.py`, `pyproject.toml`, a Python `.gitignore`, pytest tests and a continuous integration (CI) workflow.
- Doxygen comments, a `Doxyfile` and build instructions.
- README from the framework template, a three-language wiki and screenshots.
- Repository description and topics on the git host.
### Out of Scope
- Analysis beyond the three fur colours of the assignment.
- Charts, notebooks or a graphical interface.
- Publishing a package to PyPI.
- Using or importing the `.env` file in the project; it holds personal tokens for publishing only.
## Expected Benefits
### Tangible Benefits
- A runnable solution with passing tests and a CI pipeline.
- A repository other participants can clone and run from the README alone.
- A published description, topics and wiki in three languages.
### Intangible Benefits
- Practice in a plan-first, reviewed workflow on a small project.
- A reusable repository layout for later days of the bootcamp.
## Strategic Alignment
The project supports the participant's goal of finishing the 100 Days of Code bootcamp with portfolio-quality results, and the framework's goal of showing the SQA workflow on a real, small project.
## Success Criteria
| # | Criterion | Target | Measure |
| --- | --- | --- | --- |
| 1 | Fur colour counts are correct | Gray 2473, Cinnamon 392, Black 103 on the 2018 census file | Run the program on the census file and compare with `squirrel_count.csv` |
| 2 | Tests pass | 100 % of pytest tests pass on Python 3.13 or later | `python -m pytest` exit code 0 and CI green |
| 3 | Runtime dependencies | 0 third-party runtime packages | `pyproject.toml` lists no runtime dependencies |
| 4 | Documentation present | README sections, Doxyfile and wiki pages in 3 languages | Files exist; `doxygen Doxyfile` completes without warnings |
| 5 | Repository metadata | Description and at least 5 topics set | Read back from the git host application programming interface (API) |
## Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| The lecture uses Pandas but the repository must have no runtime dependencies | The solution differs from the lecture code | Use the standard library `csv` module; record the decision in an architecture decision record (ADR) and keep the lecture's step names as function names |
| The census file is large and not part of the repository | Others cannot run the program | Keep the census file under `data/` and let the program accept a path argument |
| Tokens in `.env` leak into the repository | Credential exposure | `.env` is git-ignored, never read by the project and never printed |
| Wiki push is not available on the host | Wiki pages are not published | Keep the pages in the repository under `docs/wiki/` and report the failure |
| Fur colour spelling differs in the data | Wrong counts | Count exact values `Gray`, `Cinnamon`, `Black` and test with fixture rows |
## Assumptions
- The participant (S01) is Product Owner, developer and reviewer of every artifact.
- The census file is the 2018 Central Park Squirrel Census file the participant downloaded.
- The git host `git.tirsystem.com` accepts the personal tokens held in `.env`.
- Python 3.13 or later is installed on the machines that run the project.
- The Product Owner's language is English; the wiki is the only multilingual deliverable.
## Constraints
- Python 3.13 or later, virtual environment with `venv`, tests with pytest.
- Constants live in `constants.py`; configuration lives in `pyproject.toml`.
- Folder structure `src/`, `tests/`, `docs/`.
- Work is tracked by one branch and pull request per milestone.
- Tokens come from `.env` and are never tested, imported or committed.
## Cost–Benefit Assessment
| Costs | Benefits |
| --- | --- |
| About one working day of effort by S01 and the AI assistant | A reviewed, documented solution reusable by S02 and S03 |
| Maintenance of three wiki languages | Broader reach for S02 and S03 |
The assessment is qualitative: the project is a personal learning exercise with no revenue, so a monetary return would not be meaningful.
## Stakeholders
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Product Owner, developer and reviewer; wants a correct, reviewed solution |
| S02 | Course participants; want readable, runnable code and run instructions |
| S03 | GitHub viewers; want a clear description, topics and README with no runtime dependencies |
## Recommendation
Proceed — the scope is small, the risks are mitigated and the result is directly reusable by the other stakeholders.
---
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[UCD-001]: ./use-case-diagram.md
[259d017]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/259d017ad257059330eb9a8bdbf940c9d082664e