Group project
Your product, your line, your chain
The task
Your group picks one real product, builds a small dataset for its factory line and its key supplier, and simulates in Google Colab what a supply-chain disruption does to the line and how one countermeasure helps. You show the result as an animation and a poster at the poster session on Thursday 12 November.
Every project answers one question: When our key supplier fails, what happens to units per week, cost per unit and CO₂ per unit, and what should we do about it?
| Item | Rule |
|---|---|
| Team | Your Team-Based Learning team of 4–5 students: the same team as for the team tests, chosen by you and signed up on ILIAS before 8 October |
| Tool | Python in Google Colab only (plain Python with NumPy; SimPy allowed, no extra credit) |
| Data | Your own, in the same file format as the UrbanRide bike data |
| Weight | 25 % of the module mark, a group mark adjusted for each member by the peer evaluation factor (Assessment) |
| Work mode | Homework in your team. The poster session checks that every member understands the work. |
Choosing your product
Choose a product you care about, as long as its factory works like the bike factory. Your product must meet four rules:
- It is a physical product assembled from parts, made in 4–6 steps (stations) on one line.
- It has one key purchased component with at least two real sourcing options, for example a cheap supplier far away and a dearer one close by.
- It is sold in Europe, so you can find at least its price in public.
- Each product appears once in the class. First registration wins.
Not allowed: food, drinks and chemicals (they flow through tanks, not stations), services and software.
The table shows the kind of product that fits. The sourcing options are illustrations; you research your own.
| Product | Key component | Two sourcing options (illustration) |
|---|---|---|
| E-scooter | Battery pack | Asia by sea, or Eastern Europe by truck |
| Espresso machine | Pump and boiler unit | Southern Europe by truck, or Asia by sea |
| Office chair | Gas lift and base | Asia by sea, or Central Europe by truck |
| Electric kettle | Heating element | Asia by sea, or a German supplier by van |
| Skateboard | Maple deck | North America by sea, or Central Europe by truck |
What you build
You hand in four things: a dataset, a model notebook, an animation and a poster. Each one feeds the next.
1. Dataset pack
Your data uses the same files and column names as the UrbanRide bike data, so the course tools and the check cell run on it unchanged. Open the UrbanRide bike data (online with Week 2) first: its twelve tables, README and data dictionary are your worked example.
| File | One row per | Columns |
|---|---|---|
| products.csv | product | product_id, product_name, frame_material (use it for the main material), mass_kg, list_price_eur |
| bom.csv | part | product_id, component_id, component_name, qty_per_unit, mass_kg, unit_cost_eur, supplier_id, added_at_workcenter |
| workcenters.csv | station | workcenter_id, workcenter_name, seq, num_servers, shift_hours, days_per_week, availability, process_time_cv, fixed_cost_eur_week |
| routing.csv | step | product_id, seq, workcenter_id, process_time_min, setup_time_min |
| process_environment.csv | station | workcenter_id, kw_running, kw_idle, waste_kg_per_unit, water_l_per_unit |
| suppliers.csv | sourcing option | supplier_id, supplier_name, country, component_id, unit_price_eur, promised_lead_days, lead_time_mean_days, lead_time_sd_days, capacity_per_month, min_per_month, kg_co2e_per_unit, location_id |
| locations.csv | site | location_id, name, type, country, lat, lon |
| network_lanes.csv | transport leg | lane_id, origin_id, destination_id, mode_id, distance_km, transit_days_mean, transit_days_sd |
| freight_rates.csv | transport leg | lane_id, mode_id, rate_eur_per_shipment, rate_eur_per_tkm, min_charge_eur |
| sources.csv | number you entered | file, row_id, column, value, source_type, source_or_calculation, sanity_check |
You may reuse three bike files unchanged: transport_modes.csv, transport_emission_factors.csv and the electricity row of emission_factors.csv. Every other number you type in needs a row in sources.csv. Its source_type is one of three: public (a figure with a link), analogy (a bike value adapted, with the reason) or guesstimate (your own estimate with the calculation shown, for example a station time you stopped on a factory video).
2. Model notebook
One Colab notebook simulates one year (52 weeks) of your line fed by your key supplier. It runs three scenarios, each with the 10 random seeds 1–10, and reports the mean and the lowest and highest value:
- Baseline: normal operation.
- Disruption: one supply-chain event, such as the supplier stopping for three weeks, the lead time doubling or a port closing. You back it with a real event of the same kind (a news report or a published case).
- Disruption plus countermeasure: one response of your choice, such as safety stock, a second supplier, a nearer supplier, faster transport or a change on the line.
Each run fills the same scoreboard of four numbers: units per week; one-year total cost per unit; kg CO₂e per unit (key component, factory electricity and transport of the key component); and hours the line stood still for lack of parts.
The one-year total cost adds everything the year costs, including the CO₂ emitted:
\[ \text{Total cost} = \text{materials} + 52 \times \text{station fixed costs} + \text{transport} + 0.20 \times \text{average inventory value} + 100 \,\tfrac{\text{EUR}}{\text{t}} \times \text{t CO}_2\text{e} \]
The 20 % inventory holding rate and the price of 100 EUR per tonne CO₂e are course values, the same for every group. Cost per unit is the total cost divided by the units made in the year.
3. Animation
The animation shows your line (stations, queues, parts waiting) and your supply chain (supplier, transport, stock of the key component) moving through time. You receive a template in Week 4. Your notebook writes its results into a file called results.json; the template reads that file and plays inside a Colab cell, and you save it as animation.html.
You may restyle the template or rebuild it in D3, but its numbers must come from results.json. The viewer must be able to switch between baseline, disruption and countermeasure.
4. Poster and appendix
One A1 portrait poster tells your answer in this order: the question, your product and line in one figure, the disruption and the real event behind it, the scoreboard for all three scenarios, and the course idea that explains each result (bottleneck, variability and waiting, Little’s Law, lead time and safety stock, total cost against unit price, CO₂ per unit).
The poster rests on two peer-reviewed journal articles as sources for the course ideas it uses, cited in APA with DOI. Textbooks, websites and AI answers do not count. Suitable journals include the Journal of Operations Management, Journal of Supply Chain Management, Journal of Business Logistics, Production and Operations Management, Journal of Purchasing and Supply Management, and Supply Chain Management: An International Journal; other journals need approval at the checkpoint. Every member must be able to explain each paper’s key argument: the question it asks, what it finds, and why that explains one of your results.
A two-page appendix holds your sources.csv as a table, the printed output of the check cell, the key argument of each paper in three sentences in your own words, and your AI note.
The check cell
Your notebook must pass five tests that a fixed, read-only check cell runs on your files and your baseline results. You receive the cell in Week 4. Copy it into your notebook unchanged: the grader runs the original on your files, so an edited copy gains you nothing.
| Test | Passes when | Why it matters |
|---|---|---|
| T1 Format | Every required file exists with the exact column names; no value is missing or negative | The course tools read your data like the bike data |
| T2 Capacity | Every station is busy less than 100 % of its available time in the baseline | A line loaded over 100 % never reaches a steady state |
| T3 Little’s Law | Average parts on the line equal units per hour × average hours on the line, within 10 % | A model that breaks Little’s Law is counting wrong |
| T4 Flow balance | Units finished never exceed units started; key components used equal units finished × quantity per unit | Nothing appears from nowhere |
| T5 Margin | Baseline cost per unit is below the list price | A company that loses money on every unit in normal times is not plausible |
The cell prints PASS or FAIL for each test. All five must pass at the checkpoint and at the final submission. A test passes on real data or it fails; there is no partial pass.
Timeline and the checkpoint
The project runs from Week 2 to Week 7, with one checkpoint in Week 5 that decides whether you continue with your own data.
| Date | What happens |
|---|---|
| Thu 8 Oct | Teams of 4–5 signed up on ILIAS (the same teams as for the team tests) |
| Thu 15 Oct | Product registered on ILIAS: product, key component, two sourcing options |
| Thu 22 Oct | Check cell and animation template released |
| Wed 28 Oct, 23:59 | Checkpoint: dataset pack, check-cell output and your two papers (APA with DOI) uploaded; PASS/FAIL feedback on Thu 29 Oct |
| Wed 4 Nov, 23:59 | Last chance to pass the checkpoint for groups that failed |
| Wed 11 Nov, 23:59 | Final submission: notebook, dataset pack, animation.html, poster PDF, appendix |
| Thu 12 Nov | Poster session in the afternoon |
A group whose dataset still fails on 4 November moves to the UrbanRide bike data for the rest of the project. It keeps its question and its disruption idea, and scores zero in rubric part A.
The poster session: where you show it is your work
You build the project at home, with any help you like, including AI. The poster session on Thursday 12 November is where you show that every member understands what the group built. Each group has 25 minutes at its poster:
- Pitch, 5 minutes. The group presents the question, the answer and the scoreboard.
- Individual questions, 15 minutes. Every member answers two questions alone, drawn by the examiner from three kinds; members may not hand a question to someone else.
- A number: “Where does this station time in your sources.csv come from? What happens to the scoreboard if it is 20 % higher?”
- The model: “Why does the queue build at this station? Why did your countermeasure cost what it cost?”
- A paper: “What is the key argument of this paper, and which of your results does it explain?”
- Live change, 5 minutes. The examiner changes one number in your data. Before the rerun, the group predicts which way each scoreboard number moves and why. Then you run the notebook and compare.
The whole group is responsible for every member’s understanding. Each question a member cannot answer soundly lowers the group’s score in part D, so the group mark rewards groups that explain their work to each other before the session. A wrong prediction in the live change costs little if the reasoning is sound; a right one with no reason earns little.
Using AI
You may use AI for every part of the project: finding data, writing code, styling the animation, drafting the poster. Three rules keep the work yours:
- An AI answer is not a source. A number an AI suggests enters sources.csv only after you trace it to a public figure or turn it into a guesstimate with your own calculation. The source type “AI” does not exist.
- You can explain every line. Code you cannot explain in the poster session counts against you, however well it runs.
- You write an AI note for the appendix, at most half a page: what you handed to AI, how you checked its output, and one AI mistake you found and how you found it.
How the project is marked
Four parts of 25 points each make 100 points, and all four are group marks. Each criterion scores full, half or zero.
| Part | Points | Full marks when |
|---|---|---|
| A Dataset and choices | 25 | Every file follows the format; every entered number has a sources.csv row with an honest source type and a real sanity check; the disruption rests on a real event of the same kind |
| B Model and results | 25 | All five tests pass; three scenarios with 10 seeds each, mean and range reported; each result is explained with the course idea behind it |
| C Animation | 25 | Driven by results.json; the queue builds where the model says the bottleneck is; animated units per week match the notebook; all three scenarios can be viewed |
| D Poster and session | 25 | Poster (8): tells question → answer, reads from 2 m, cites two peer-reviewed papers with DOI and ties each to a result. Questions (12): 12 points × the share of all members’ questions answered soundly. Live change (5): the group reasons through its prediction |
A group that moves to the bike data at the checkpoint scores zero in part A and keeps parts B to D. The points convert to a grade on the same scale as the tests.
Transparency note
This brief was drafted with Claude Opus 5.5, used to develop the task design (product rules, check tests, rubric), as a reviewer for language and consistency, and for the layout. All content was checked, revised and approved by Roman Bartnik.