scrum /overviewsprintsmeetingsagreements

planning

Sprint Overview

Sprint tracking and deliverables. Updated after each sprint review.

Sprint 1SetupFeb 19 – Feb 26, 2026

goal

Set up the project infrastructure — repo, tooling, documentation, architecture decisions, and data structure analysis.

deliverables

—

GitHub repo structured and scaffolded

—

36 issues created with labels and milestones

—

GitHub Project board live

—

Notion ↔ GitHub sync (auto + manual)

—

Architecture diagram finalized

—

Data structure fully documented from real JSON files

—

Project website live on Vercel

—

Stack decided: Python + custom watcher loop, PostgreSQL, KNIME, Power BI

—

Architecture decisions recorded (ADR-001 to 004)

done

✓

Create the repo

✓

Add teammates as collaborators

✓

Create labels and milestones

✓

Create 36 issues

✓

Link repo to Project board

✓

Link GitHub to Notion

✓

Verify everyone can connect to the VM

✓

Verify MySQL DB (pidb) connection works

✓

Verify access to sFTP / Meteo2 folder

✓

Verify access to Raspberry Pi / sensor JSON endpoint

✓

Look at actual JSON sensor files to understand the structure

pending / carry over

○

Install chosen tools (Python, KNIME, Power BI Desktop, etc.)

○

Set up Bronze folder structure on the VM

○

Gold layer storage engine decision

○

ETL orchestration tool decision

○

SAC export mechanism decision

○

Presence derivation logic threshold

○

Who owns which part

○

DoD & DoR

Sprint 2Bronze + Silver PipelineFeb 27 – Mar 5, 2026

goal

Build the full ingestion pipeline — Bronze raw files to Silver cleaned tables in PostgreSQL — for the two apartment sources and the MySQL master registry.

deliverables

—

Bronze raw storage (#3) — timestamped folder layout on the VM

—

MySQL → Silver static metadata import (#4)

—

Sensor JSON ingestion: Jimmy (#5) and Jérémie (#6)

—

Weather forecast → raw store (#7)

—

Silver clean storage (#13) + load flow with quality checks (#14)

—

Fast-flow scheduler retrieving the latest data each minute (#11a)

—

Watcher optimization — pipeline cycles from 5 min to 6 s

—

create_silver.py — auto DB creation + admin privileges

—

Documentation: SETUP.md, ETL.md, ARCHITECTURE.md

—

Architecture diagram updated

—

Star schema v2 submitted for teacher feedback

—

Dashboard mockups — tenant view + admin view

done

✓

Bronze folder structure on VM

✓

Watcher downloading JSON sensor files (Jimmy + Jérémie)

✓

MySQL → Silver static-metadata flow

✓

Silver tables created in PostgreSQL

✓

Flattening + cleaning pipeline working

✓

Deduplication logic implemented

✓

Watcher perf fix — cycles from 5 min to 6 s

✓

create_silver.py with DB_ADMIN_URL support

✓

Documentation written (SETUP, ETL, ARCHITECTURE)

✓

Star schema v2 designed and sent for review

✓

Bronze predictive ingestion — ~5 ms .exists() check vs full SMB scan

✓

COPY-into-TEMP-TABLE upsert pattern adopted (50–150× faster than per-row INSERT)

✓

silver.etl_watermark table — idempotent re-runs from day one

pending / carry over

○

Gold layer (blocked on star schema v2 validation)

○

Weather Bronze→Silver flow (Sacha)

○

Slow-flow scheduler (#11b)

○

ML model exploration (Johann)

○

Dashboard mockup finalisation

Sprint 3KNIME data import + watcher hardeningMar 7 – Mar 13, 2026

goal

Wire the first half of the KNIME data flow (Silver → KNIME import), fix watcher edge-cases, refresh tooling — while Gold remained blocked on star-schema-v2 validation.

deliverables

—

KNIME data flow — import side (#25a)

—

create_silver.py — auto DB creation + admin privileges (DB_ADMIN_URL)

—

Watcher fix — date-based filename comparison (DD.MM sorting bug)

—

--scan flag added to watcher for full-rescan triggers

—

Dashboard mockups — tenant + admin views

—

Code review — Sacha's weather_download.py PR

—

Per-flow workflow docs on the website

done

✓

#25a — Build a data flow to import (closed Mar 13)

✓

create_silver.py with DB_ADMIN_URL support

✓

Watcher DD.MM sort bug resolved

✓

--scan flag added to watcher

✓

Dashboard mockups delivered (tenant + admin)

✓

Code review of Sacha's weather_download.py PR

✓

Silver → Gold ETL workflow documented on the site

pending / carry over

○

BLOCKER: Gold layer — star schema v2 sent for review, awaiting 2nd round of feedback

○

weather_download.py — final fixes after PR review (Sacha)

○

Presence prediction model — KNIME workflow in progress (Johann)

Sprint 4Gold layer build-out + ML kickoffMar 14 – Mar 27, 2026 (2 weeks)

goal

Unblock Gold (proceed without final external feedback), iterate on clean_weather, kick off the first ML model-selection workflow on KNIME. Energy pricing decision required for the cost dimension.

deliverables

—

Gold layer implementation — first cut (Dehlya)

—

Energy pricing decision: Oiken tariffs (both apartments on Oiken's network)

—

clean_weather.py implementation (Sacha)

—

Code review for Sacha's Bronze→Silver weather work (Dehlya)

—

Presence model selection workflow on KNIME (#26a)

—

Scrum management updates (Johann)

done

✓

#26a — Build a workflow to select the best presence model (closed Mar 26)

✓

Gold layer scaffolding in place

✓

Energy pricing — Oiken tariffs adopted

✓

clean_weather.py — first implementation

✓

Bronze→Silver weather code review

✓

ML — model selection workflow for presence prediction

✓

Star schema v2 finalised after teacher feedback

✓

dim_tariff design with provider × year grain (Oiken 2023–2025 @ 0.34 CHF/kWh)

pending / carry over

○

Gold fact tables — implementation continuing

○

weather_download.py — date-handling issues

○

Energy consumption prediction model — to start

Sprint 5Gold facts + clean_weather refinementMar 28 – Apr 2, 2026

goal

Push Gold facts forward, fix the weather pipeline's date/path handling, advance both ML models, decide on prediction storage strategy.

deliverables

—

Gold fact tables — implementation in progress (Dehlya)

—

clean_weather.py — updated after code review (Sacha)

—

Decision on prediction storage strategy (history vs overwrite)

—

Presence + energy prediction models — continued work (Johann)

done

✓

Code reviews exchanged across the team

✓

Gold fact tables progressing

✓

clean_weather.py — second pass after review feedback

✓

Decision: predictions kept as history (no overwrite on re-run)

✓

sFTP folder-selection bug identified — fix scheduled for next sprint

✓

Weather pipeline date-format issue scoped

pending / carry over

○

sFTP folder selection — date/path bug to resolve

○

Date formatting in the weather pipeline

○

ML presence + energy models — finalise

○

Gold layer completion — fact tables, materialised view

Sprint 6Gold + Weather + KNIME ML — landingApr 3 – Apr 17, 2026 (2 weeks)

goal

Land Gold end-to-end, complete both weather pipelines, scaffold both KNIME ML workflows. The biggest single sprint — twelve issues closed.

deliverables

—

Gold OLAP modelisation (#15)

—

Gold database created (#16)

—

Silver → Gold ETL flow (#17)

—

Weather Sources → Bronze (#7a)

—

Weather Bronze → Silver (#7b)

—

Weather raw-store flow (#7) — full chain wired

—

Slow-flow scheduler — daily weather + nightly catch-up (#11b)

—

Presence model — workflow with selected model (#26a follow-up)

—

Energy model — best-model-selection workflow (#27a)

—

Energy model — workflow with selected model (#27b)

—

KNIME data flow — export side (#25b)

—

Mockups delivered (#12)

done

✓

#7 — Weather raw-store flow

✓

#7a — Weather Sources → Bronze

✓

#7b — Weather Bronze → Silver

✓

#11b — Slow-flow scheduler

✓

#12 — Mockups

✓

#15 — OLAP modelisation

✓

#16 — Gold database

✓

#17 — Silver → Gold ETL flow

✓

#25b — Data flow to export (KNIME)

✓

#26a — Workflow with selected presence model

✓

#27a — Best-model-selection workflow (energy)

✓

#27b — Workflow with selected energy model

✓

Gold tables: 7 dims + 5 facts + mv_energy_with_cost

✓

9-step populate process (populate_dimensions, populate_sensors, populate_weather)

✓

KNIME Variable → Credentials pattern adopted for runtime credential injection

✓

silver.weather_forecasts with weather_watermark for idempotent re-runs

✓

scripts/run_knime_predictions.py — batch-mode invocation with stdout/stderr capture

✓

sFTP folder-selection bug fixed alongside the weather pipeline

pending / carry over

○

Predictions back to Gold (next sprint — #28)

○

Power BI dashboards (next sprint — #19, #20, #29)

○

Row-level security (next sprint — #24)

Sprint 7Predictions → DB + Power BI dashboards + RLSApr 18 – Apr 24, 2026

goal

Persist KNIME predictions back to Gold, build the three Power BI dashboards, implement row-level security per apartment.

deliverables

—

Predictions written back to gold.fact_prediction_motion / fact_prediction_consumption (#28)

—

Power BI energy consumption dashboard (#19)

—

Power BI environment dashboard — temperature, humidity, CO₂, door/window status (#20)

—

Power BI prediction visualisation dashboard (#29)

—

Power BI row-level security — apartment-scoped views (#24)

—

KNIME data export/import flow — both directions complete (#25)

—

Presence model running headless via run_knime_predictions.py (#26)

—

Energy/consumption model running headless (#27)

done

✓

#19 — Power BI energy dashboard

✓

#20 — Power BI environment dashboard

✓

#24 — Row-level security per apartment

✓

#25 — KNIME data flow export/import

✓

#26 — Presence prediction model in production

✓

#27 — Energy consumption prediction model in production

✓

#28 — Predictions loaded back to data warehouse

✓

#29 — Power BI prediction dashboard

pending / carry over

○

Anonymisation / masking (next sprint — #18)

○

GDPR writeup (next sprint — #32)

○

Scalability forecast (next sprint — #31)

○

Customer deployment package (next sprint — #33)

Sprint 8Anonymisation + GDPR + Scalability + PackagingApr 25 – May 1, 2026

goal

Wrap up customer-facing deliverables: anonymisation, GDPR/ethics writeup, scalability forecast, and the self-contained installer for the customer environment.

deliverables

—

Data masking / anonymisation at the silver → gold boundary (#18)

—

GDPR & ethics written assessment (#32)

—

Scalability forecast — storage + compute projections (#31)

—

Full data-flow scheduling — all flows in one watcher process (#11)

—

Self-contained customer deployment package — Python installer (#33)

—

Compress-after-silver — 10-15× bronze shrink while preserving audit trail

—

Postgres tuning (shared_buffers = 4 GB) + COPY-into-TEMP-TABLE upsert

—

Drop-constraint backfill script — first install from ~4 h to ~6 min on re-run

—

Power BI filters across the dashboards (Sacha)

—

User guide written (Sacha)

—

Scrum management, project coordination, documentation review, slide support (Johann)

done

✓

#11 — Full scheduling end-to-end

✓

#18 — Anonymisation: building_name → 'Building <id>', owner_user_id stripped, first names kept as RLS pseudonyms (ADR-005)

✓

#31 — Scalability forecast delivered

✓

#32 — GDPR / ethics assessment delivered

✓

#33 — Customer installer tested end-to-end on the VM

✓

Compress-after-silver shipped (with .json.gz read-back support)

✓

Postgres tuning + COPY upsert path

✓

fast_silver_backfill.py drop-constraint script + pre-flight duplicate check

✓

Sacha — Power BI filters across all dashboards

✓

Sacha — user guide written

✓

Johann — scrum management, project coordination

✓

Johann — documentation contributions and review

✓

Johann — presentation slides structure + content support

pending / carry over

○

Defense prep (next sprint — #36)

○

User guide polish (next sprint — #34)

○

Technical documentation polish (next sprint — #35)

○

Decision: SAP SAC track (#21, #22) abandoned — Power BI focus for the defense

○

Decision: storage encryption (#9), monitoring/alerts (#10), full IAM (#23), i18n (#30) deferred to future work

Sprint 9Defense PrepMay 2 – May 8, 2026

goal

Polish the customer-facing deliverables (technical doc, installation guide, user guide), finalise the slide deck, rehearse the defense.

deliverables

—

Technical documentation polish (#35) — Word + Markdown, 19 chapters

—

Installation guide polish (#34) — embedded screenshots

—

User guide polish — review pass against the actual UI

—

Defense slide deck (#36) — Bronze→Gold deep-dive owned by Dehlya (slides 7–13), with speaker notes

—

Personal cheatfile / study packet for Q&A (19 sections, ~600 lines)

—

Final installer end-to-end test on the VM

—

Last-minute fixes from the test run (e.g. .json.gz read-back, KNIME version pin)

done

✓

Documentation regenerated to .docx with screenshots

✓

Slide deck polished (slides 7–13) with technical speaker notes

✓

AI declaration paragraph added to all customer-facing docs

✓

KNIME workflows pinned to VM's KNIME 5.8 version

✓

Bronze .json.gz read-back path fixed (audit-trail story now real)

✓

/scrum/devops page removed (production deployment was abandoned)

pending / carry over

○

Final rehearsal of the defense

○

Last polish pass on installer prompt copy ("5-course tasting menu ☕")

○

Light test coverage (#37) — idempotency tested by re-run rather than pytest

Sprints are bounded by the weekly Friday review meetings — see the meeting log for the agenda and decisions from each. Sprints 4 and 6 ran two weeks each; the other sprints were one-week cycles.