Illya Mowerman & Kirk Mettler
“Scrum’s agility fits consulting—delivering insights fast amid change.”
Why Scrum in Analytics? - Early client value (e.g., quick insights). - Handles data surprises or scope shifts. - Focuses on outcomes, not just code.
R Example: Simulate a dataset to inspect and adapt.
sales_data <- data.frame(
Date = seq(as.Date("2025-01-01"), by = "day", length.out = 30),
Sales = rnorm(30, mean = 1000, sd = 200),
Region = sample(c("North", "South"), 30, replace = TRUE)
)
head(sales_data, 3)## Date Sales Region
## 1 2025-01-01 887.9049 North
## 2 2025-01-02 953.9645 South
## 3 2025-01-03 1311.7417 South
“Start with this, inspect trends, adapt if client adds regions.”
R Example: Prioritize a simple sales summary.
sales_summary <- sales_data %>%
group_by(Region) %>%
summarise(Avg_Sales = mean(Sales)) %>%
arrange(desc(Avg_Sales))
sales_summary## # A tibble: 2 × 2
## Region Avg_Sales
## <chr> <dbl>
## 1 South 1019.
## 2 North 966.
“PO says: ‘Client needs this stat now.’”
R Example: Automate a data check to remove a blocker.
## Missing_Sales
## 1 0
“SM: ‘I automated this—focus on analysis.’”
R Example: Team builds a quick viz.
ggplot(sales_data, aes(x = Date, y = Sales, color = Region)) +
geom_line() +
labs(title = "Sales Trends by Region") +
theme_minimal()“Team: ‘I’ll plot, you clean data.’”
Flow: Plan → Work → Review → Repeat.
R Example: Plan a Sprint backlog.
## [1] "Clean sales data" "Plot trends" "Summarize stats"
“Output: Sprint Goal—‘Basic sales insights.’”
R Example: Track daily progress.
daily_log <- data.frame(
Day = c("Day 1", "Day 2"),
Task = c("Data cleaning", "Plotting"),
Status = c("Done", "In Progress")
)
daily_log## Day Task Status
## 1 Day 1 Data cleaning Done
## 2 Day 2 Plotting In Progress
R Example: Demo with client feedback.
ggplot(sales_data, aes(x = Date, y = Sales)) +
geom_line() +
labs(title = "Sprint 1: Sales Trend") +
theme_minimal()“Client: ‘Nice! Can we filter by region?’”
R Example: Analyze Sprint effort.
effort <- data.frame(
Task = c("Cleaning", "Plotting"),
Hours = c(10, 4)
)
ggplot(effort, aes(x = Task, y = Hours)) +
geom_bar(stat = "identity") +
labs(title = "Effort Distribution")“Retro: ‘Let’s cut cleaning time.’”
R Example: Build a backlog.
product_backlog <- data.frame(
Item = c("Sales trends", "Forecast Q2", "Customer segments"),
Priority = c(1, 2, 3)
)
product_backlog## Item Priority
## 1 Sales trends 1
## 2 Forecast Q2 2
## 3 Customer segments 3
R Example: Subset backlog.
## Item Priority
## 1 Sales trends 1
R Example: Final increment.
ggplot(sales_data, aes(x = Date, y = Sales, color = Region)) +
geom_line() +
labs(title = "Increment: Regional Sales") +
theme_minimal()R Example: Simulate burndown.
burndown <- data.frame(
Day = 1:10,
Hours_Remaining = c(40, 35, 30, 28, 20, 15, 12, 8, 4, 0),
Task = "Analytics Sprint"
)
ggplot(burndown, aes(x = Day, y = Hours_Remaining)) +
geom_line() +
geom_point() +
labs(title = "Burndown: Analytics Sprint", y = "Hours Left")Scenario: Retail client needs sales insights. - Product Backlog: Trends, forecasts, segments. - Sprint 1: - Goal: “Sales trend dashboard.” - Daily Scrum: “API’s slow.” - Review: “Add filters.” - Retro: “Automate ETL.”
R Output: Final deliverable.
sales_data %>%
ggplot(aes(x = Date, y = Sales, color = Region)) +
geom_line() +
labs(title = "Sprint 1 Deliverable") +
theme_minimal()Benefits: Fast value, adaptability.
Challenges: Data delays, scope creep.
“Iterate, deliver, improve—Scrum powers analytics consulting.”