Day 1 · 14:00
A language model will draft dplyr you do not yet know how to type. That is a superpower and a hazard. This session is the operating protocol for the rest of the week — and for Monday at the office.
You will leave able to
- Write a prompt that returns runnable R rather than a hallucinated statistic.
- Review AI-generated code with a five-point checklist before it touches a slide.
- Keep confidential commercial data out of consumer models.
On the desk
- bongo.ai panel — gold button, every page
- Your firm’s approved AI endpoint (if any)
The original version of this workshop asked PhD students to type every verb from memory. That was 2019. You are not a graduate student. You are a commercial leader with a full diary. AI is in the room so that syntax is no longer the bottleneck — judgement is.
What the model is good at
- Translating *‘top 10 SKU descriptors, lower case, drop fragments’* into a dplyr pipeline.
- Remembering ggplot2 argument names you will forget by Thursday.
- Explaining an error message in English.
- Drafting the YAML header of a Quarto brief.
- Proposing three chart types for a given table shape — with the reasons to reject two of them.
What it will do to you if you let it
- Invent a package that does not exist (
ggboardroom). - Use
gather()in 2026 without telling you it is superseded. - Assume US dollars, US weeks, and US fiscal years.
- Average an NPS the way it averages a temperature.
- Apologise confidently while being wrong about a join key.
The prompt that works
Do not paste the workbook. Paste the schema and the decision.
You are writing R (tidyverse, ggplot2) for a Lagos Business Schoolexecutive brief. Currency is NGN. Do not invent numbers. Schema of nps_by_channel.csv:customer_id, channel (branch/mobile/ussd/agent),tenure_months (int), nps (-100 to 100), complaints_90d, region Task: draft a ggplot that compares the DISTRIBUTION of NPSby channel — not the mean. Prefer violin + box. Title andsubtitle fit a board pack. Return only the code.The five-point review
- Does it run? Paste into a chunk. If it errors, send the *error* back, not a new essay.
- Does it use the join key you meant?
regionis notbranch_id.skuis notbarcode. - Does it leak? Any filter that drops a segment EXCO cares about (a region, a brand, a channel) must be named in the subtitle.
- Would you sign the chart title? Titles are claims. ‘Digital is winning’ is a claim. ‘Mobile NPS, last 90 days’ is a description.
- Can you explain the geom? If you cannot say why it is a violin and not a bar, you are presenting someone else’s thinking.
A worked failure
A delegate asked, *‘Does mobile NPS cause lower complaints?’* The model returned a regression and a slide title: *Mobile app reduces complaints by 18%*. The data were observational. High-tenure customers use mobile and complain less. Tenure is the lurking variable. The correct title is *Complaints and channel, not yet causal*. We will labour this on Day 4.
Exercise 1.3
Interrogate the copilot
Open bongo.ai and paste the SKU schema (sku_id, category, region, description). Ask it to tidy packed descriptions. Then ask a second question: *What could this pipeline silently drop?* Bring both answers to the clinic.
- Good second prompts: empty strings, bilingual tags, ‘n/a’, SKUs with no description.
- The point is not the code. The point is the failure mode.