CMPUT-401 · Lesson 12 of 12 · 34 min
Capstone: delivering a responsible product increment
This final lesson brings the course together in a capstone: Team Lumen delivers one product increment for Driftwood Ferries, from discovery to operation, and checks it against the responsibilities that a product team carries to users and society as well as to the client. The increment is capacity alerts with an optional paid commuter pass. Each stage reuses tools from earlier lessons, so the first half of the lesson is a guided walkthrough of the whole life cycle. The second half covers responsible product practice: dark patterns and consumer protection, accessibility, privacy by design, AI governance, and finally careers in product management. Laws are summarized as of October 2026; they change often, so verify before relying on them.
The capstone brief
Your capstone team acts as Team Lumen. The client is Driftwood Ferries, an invented family-owned operator of three small car ferries. The outcome the client has agreed to is to reduce missed sailings due to full decks by 30 percent over the summer while keeping phone calls about delays falling. You have six two-week sprints, a capped per-sprint contract, and a client owner available for a weekly check-in. Your deliverable is a working, released increment plus a short portfolio that shows the decisions behind it.
The portfolio matters as much as the code. Product managers are judged on decisions under uncertainty, so the portfolio should show the evidence you had, the options you considered, what you chose and why, and what happened. Honest reporting of a hypothesis that failed, and how the team pivoted, is a strength, not a weakness.
Dark patterns and consumer protection
Dark patterns, also called deceptive design patterns, are interface designs that trick or pressure people into choices they would not otherwise make. Harry Brignull coined the term in 2010. Common types include obstruction (making cancellation much harder than sign-up), sneaking (adding items or consent the user did not choose, such as pre-checked boxes), drip pricing (revealing mandatory fees late in a purchase), confirmshaming (guilt-laden decline buttons), false urgency (fake countdown timers or low-stock claims) and nagging. They often raise short-term metrics, which is exactly why Goodhart's law (lesson 10) makes them tempting to teams chasing targets.
In the United States, the Federal Trade Commission (FTC) acts against dark patterns under Section 5 of the FTC Act, which prohibits unfair or deceptive practices, and under the Restore Online Shoppers' Confidence Act (ROSCA), which requires clear disclosure, express consent and a simple cancellation mechanism for online subscriptions. In September 2025 the FTC announced a $2.5 billion settlement with Amazon over Prime sign-up and cancellation practices, about $1 billion in civil penalties and $1.5 billion in customer refunds. The FTC's broader click-to-cancel rule was vacated by a federal appeals court in July 2025, but ROSCA and Section 5 enforcement continue, for example against Chegg's cancellation practices. The FTC's junk fees rule, in force since May 2025, requires total price disclosure for live-event tickets and short-term lodging, and many states have their own automatic-renewal and pricing laws.
The safest approach is simple: make canceling as easy as signing up, show the total price up front, never pre-check consent, avoid guilt-laden wording, and remind users before a free trial converts to paid. The code audits an early draft of Driftwood's commuter-pass flow, written by a teammate in a hurry, against these rules.
# Audit a subscription flow for common dark patterns (invented flow description).
flow = {
"signup_steps": 2,
"cancel_steps": 6,
"cancel_online": False, # must phone the office to cancel
"prechecked_marketing": True,
"total_price_shown_first": False, # booking fee added at the last step
"confirmshaming_text": "No thanks, I like missing my ferry",
"trial_reminder_before_charge": False,
}
findings = []
if flow["cancel_steps"] > flow["signup_steps"] or not flow["cancel_online"]:
findings.append("obstruction: cancellation is harder than sign-up")
if flow["prechecked_marketing"]:
findings.append("sneaking consent: marketing box is pre-checked")
if not flow["total_price_shown_first"]:
findings.append("drip pricing: mandatory fee revealed late")
if flow["confirmshaming_text"]:
findings.append("confirmshaming: guilt-laden decline wording")
if not flow["trial_reminder_before_charge"]:
findings.append("no reminder before a free trial converts to paid")
for f in findings:
print("-", f)
print(f"{len(findings)} issues to fix before launch")- obstruction: cancellation is harder than sign-up - sneaking consent: marketing box is pre-checked - drip pricing: mandatory fee revealed late - confirmshaming: guilt-laden decline wording - no reminder before a free trial converts to paid 5 issues to fix before launch
Accessibility
Accessible products can be used by people with disabilities, including people who are blind or have low vision, are Deaf or hard of hearing, have motor impairments, or have cognitive disabilities. The Web Content Accessibility Guidelines (WCAG), published by the W3C, are the international reference; version 2.2 (October 2023) is current, organized under four principles: perceivable, operable, understandable and robust. Level AA is the common legal and contractual target. Accessibility is also good product practice: captions help people in noisy terminals, high contrast helps everyone on a sunny car deck, and clear language helps tourists reading in a second language.
In the United States, the Americans with Disabilities Act (ADA) prohibits disability discrimination by state and local governments (Title II) and by public accommodations (Title III). In April 2024 the Department of Justice adopted a Title II rule requiring state and local government websites and apps to meet WCAG 2.1 AA, with compliance dates starting in 2026 for larger entities; check current DOJ guidance, as timelines have been revisited. Title III has no specific web rule, but courts and the DOJ treat inaccessible websites of businesses open to the public as potential violations, and thousands of web accessibility lawsuits are filed each year. Transportation providers may also face Department of Transportation accessibility rules. Meeting WCAG 2.2 AA is a sensible target for Driftwood either way.
Automated tools catch only a share of accessibility problems; manual testing with keyboards and screen readers, and testing with disabled users, catches the rest. One check is easy to automate: color contrast. WCAG 2.2 AA requires a contrast ratio of at least 4.5 to 1 for normal text and 3 to 1 for large text. The code computes ratios for Driftwood's draft palette.
# WCAG contrast ratio check for text and background pairs.
def channel(c):
c = c / 255
return c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4
def luminance(hex_rgb):
r, g, b = (int(hex_rgb[i:i + 2], 16) for i in (1, 3, 5))
return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b)
def ratio(fg, bg):
hi, lo = sorted((luminance(fg), luminance(bg)), reverse=True)
return (hi + 0.05) / (lo + 0.05)
pairs = {
"body text on white": ("#1f2933", "#ffffff"),
"delay banner text": ("#ffffff", "#d64545"),
"muted timestamp": ("#9aa5b1", "#ffffff"),
"link on pale blue": ("#1d5fa8", "#e8f1fb"),
}
for name, (fg, bg) in pairs.items():
r = ratio(fg, bg)
verdict = "AA pass" if r >= 4.5 else "AA large-text only" if r >= 3 else "FAIL"
print(f"{name:22s} {r:5.2f}:1 {verdict}")body text on white 14.76:1 AA pass delay banner text 4.38:1 AA large-text only muted timestamp 2.50:1 FAIL link on pale blue 5.66:1 AA pass
The muted timestamp fails and the delay banner only passes for large text. The banner carries safety information, so the team darkens the red and makes the text larger and bold. Accessibility belongs in the definition of done (lesson 6), in exploratory charters (lesson 8) and in triage priorities, not in a final audit.
Privacy by design
Privacy by design, a framework developed by Ann Cavoukian when she was Ontario's Information and Privacy Commissioner, asks teams to build privacy into products from the start: proactive not reactive, privacy as the default setting, privacy embedded into design, full functionality without false trade-offs, end-to-end security, visibility and transparency, and respect for user privacy. In product terms this means collecting only the data needed for a stated purpose (data minimization), setting retention limits, defaulting to the most private option, explaining clearly what is collected and why, and securing what is kept.
The United States has no comprehensive federal privacy law for the private sector. Instead, sector-specific laws cover areas such as health (HIPAA), children's data (COPPA) and financial data (GLBA), and the FTC uses Section 5 against deceptive or unfair data practices, such as breaking a privacy promise. About twenty states have passed comprehensive consumer privacy laws, led by California's Consumer Privacy Act as amended by the California Privacy Rights Act, which gives consumers rights to know, delete, correct and opt out of the sale or sharing of personal information, and requires honoring browser opt-out signals such as Global Privacy Control. Many state laws also restrict dark patterns in consent. The commuter pass's phone numbers and trip history are personal information under these laws where they apply.
# Privacy by design: check a tracking plan for unnecessary personal data and retention.
plan = [
# event, fields, retention days, needed for stated purpose?
("sailing_viewed", ["route", "sailing_time", "device_type"], 395, True),
("alert_subscribed", ["phone_number", "route"], None, True),
("location_ping", ["lat", "lon", "user_id"], 730, False),
("search", ["query_text", "user_id"], 365, True),
]
PERSONAL = {"phone_number", "lat", "lon", "user_id", "query_text"}
for event, fields, days, needed in plan:
issues = []
personal = PERSONAL.intersection(fields)
if personal and not needed:
issues.append("collects " + ", ".join(sorted(personal)) + " without a stated need: drop it")
if personal and days is None:
issues.append("no retention limit for personal data")
elif personal and days > 365:
issues.append(f"keeps personal data {days} days: justify or shorten")
print(f"{event:17s} " + ("ok" if not issues else "; ".join(issues)))sailing_viewed ok alert_subscribed no retention limit for personal data location_ping collects lat, lon, user_id without a stated need: drop it; keeps personal data 730 days: justify or shorten search ok
The location ping is the clearest problem: precise location collected continuously without a stated need is both a privacy risk and a liability if breached. Removing it costs nothing, since the capacity alert uses the chosen route, not GPS. The alert subscription needs a phone number, but must have a retention rule, for example deletion 30 days after unsubscribing. For sensitive features, a privacy impact assessment documents the data flows, risks and mitigations before building.
AI features and governance
Driftwood's owner asked whether the app could predict which sailings will fill, using past counts and weather, and whether a chatbot could answer traveler questions. Both are reasonable, and both raise new responsibilities. Predictions can be wrong in ways that strand people, so they need visible uncertainty and a fallback. Chatbots built on large language models can produce confident but false answers, so they need limits on what they answer, clear disclosure that the user is talking to an automated system, and an easy route to a person. Frameworks such as the NIST AI Risk Management Framework help teams govern, map, measure and manage AI risks.
The European Union's AI Act, which entered into force in August 2024, is the most comprehensive AI law. It bans certain practices, such as manipulative techniques that cause significant harm, since February 2025; imposes obligations on general-purpose AI model providers since August 2025; and sets strict requirements for high-risk systems listed in its Annex III, such as some uses in employment, education and access to essential services. Under the 2026 Digital Omnibus amendments, Annex III high-risk obligations are now scheduled to apply from 2 December 2027. Transparency duties, such as telling people they are interacting with a chatbot, also apply. The Act matters to Canadian and US teams whose products are offered to people in the EU.
The United States has no comprehensive federal AI law. Existing laws still apply: the FTC has warned that deceptive AI claims and unfair uses of AI violate Section 5, and anti-discrimination laws apply to automated decisions. Several states have passed AI-specific laws, such as Colorado's law on high-risk AI systems, whose effective date has been postponed, and state laws on AI disclosure and chatbots; check the current status in the states where a product operates.
Responsible product decisions
Laws set minimums. Responsible product management goes further by asking, at each stage, who could be harmed, who is excluded, what happens when the product is wrong, and whether the business would be comfortable if its design decisions were published. Practical habits include adding an ethical assumptions row to the opportunity solution tree (lesson 3), including counter-metrics for harm (lesson 10), inviting affected communities into discovery, and keeping a decision log. The capstone review below pulls the course's checks into one scorecard.
# Capstone increment review: pull the course's checks into one scorecard (invented values).
checks = {
"Outcome metric moved (missed sailings, -30% target)": (-0.24 / -0.30, 0.7),
"Release readiness hard gates": (1.0, 1.0),
"SLO compliance this month (99.9% target)": (0.9993 >= 0.999, 1.0),
"Accessibility: open WCAG AA issues == 0": (2 == 0, 1.0),
"Dark-pattern audit issues == 0": (0 == 0, 1.0),
"Change requests decided in writing": (11 / 12, 1.0),
}
for name, (value, threshold) in checks.items():
v = float(value)
print(f"{'PASS' if v >= threshold else 'FAIL'} {v:4.2f} {name}")PASS 0.80 Outcome metric moved (missed sailings, -30% target) PASS 1.00 Release readiness hard gates PASS 1.00 SLO compliance this month (99.9% target) FAIL 0.00 Accessibility: open WCAG AA issues == 0 PASS 1.00 Dark-pattern audit issues == 0 FAIL 0.92 Change requests decided in writing
Two items fail. The outcome reached 80 percent of the target, which passes the agreed threshold, but two WCAG AA issues remain open, and one change request was agreed verbally and never written up. The team fixes the accessibility issues before widening the rollout and writes up the change with the client. A scorecard like this is not a grade; it is a prompt for the final client review.
Careers in product management
Product management is a common destination for computing graduates who enjoy working across technology, design and business. Typical titles run from associate product manager (APM), through product manager and senior product manager, to group product manager, director and vice-president of product, with a parallel individual-contributor track at some companies (principal or staff PM). Adjacent roles include product owner, technical program manager, product designer, product analyst, and engagement or delivery manager in consulting firms that build software for clients.
Hiring for PM roles emphasizes product sense (judging what to build and why), execution (planning, prioritization and delivery), analytical skill (metrics and experiments), communication and stakeholder management, and technical fluency, which computing graduates bring naturally. Certifications such as Scrum.org's Professional Scrum Product Owner (PSPO) or Scrum Alliance's Certified Scrum Product Owner (CSPO) show familiarity with agile product roles but matter less than evidence of real product decisions, which is why the capstone portfolio is valuable. For project management credentials and leadership skills, see PMP-120 and PMP-121; for building a robotics or hardware product, see ROB-499; and for web delivery, see CMPUT-404.
Worked examples
Worked problem
Fixing a dark pattern
The draft cancellation flow needs six steps and a phone call. Redesign it.
Show solution
- Add a Cancel pass link in account settings, reachable in two taps.
- Show one confirmation screen with neutral wording: Cancel pass or Keep pass.
- Send a confirmation email or SMS with the end date of access.
Answer: Cancellation becomes as easy as sign-up, online, with neutral wording and confirmation.
Worked problem
Checking contrast
The muted timestamp (#9aa5b1 on white) scored about 2.5 to 1. What should the team do?
Show solution
- Normal text needs at least 4.5 to 1 for AA.
- Darken the gray (for example to about #616e7c) and re-run the check.
- Add contrast checks to the definition of done.
Answer: Darken the text until it reaches at least 4.5 to 1, and prevent regressions with automated checks.
Worked problem
Minimizing data
A teammate wants to store every search query with user IDs forever to improve the app. Respond.
Show solution
- State the purpose: improving search results.
- Pseudonymize or aggregate queries; drop user IDs if not needed.
- Set a retention limit such as 90 days and document it in the privacy notice.
Answer: Collect only what the purpose needs, keep it for a limited time, and be transparent.
Common mistakes
MistakeDark patterns are fine if they raise conversion.
InsteadThey deceive users, invite enforcement and destroy trust; design honest flows.
MistakeAccessibility can be audited at the end.
InsteadBuild it into the definition of done, testing and triage from the start.
MistakeCollect all available data in case it is useful later.
InsteadPrivacy by design requires minimization, retention limits and stated purposes.
MistakeAI laws only matter in Europe.
InsteadThe EU AI Act reaches products offered in the EU, and existing privacy, consumer and human rights laws apply to AI everywhere.
MistakeA PM portfolio should show only successes.
InsteadShow decisions, evidence and pivots, including failed hypotheses.
Summary and key terms
- The capstone runs one increment through discovery, definition, prioritization, validation, delivery, operation and measurement.
- Dark patterns such as obstruction, sneaking and drip pricing face active enforcement.
- WCAG 2.2 AA is the practical accessibility target; build it in from the start.
- Privacy by design means minimization, retention limits, private defaults and transparency.
- AI features need uncertainty, disclosure, human fallback and governance; the EU AI Act sets the strictest rules.
- Responsible product practice goes beyond legal minimums.
- PM careers value product sense, execution, analytics, communication and technical fluency.
- Dark pattern
- An interface design that tricks or pressures users into unintended choices.
- Drip pricing
- Advertising a price and adding mandatory fees later in the purchase.
- Obstruction
- Making an action such as cancellation deliberately difficult.
- Confirmshaming
- Using guilt-laden wording to discourage declining an offer.
- WCAG
- The Web Content Accessibility Guidelines published by the W3C.
- Contrast ratio
- The relative luminance ratio between text and background.
- Privacy by design
- Building privacy into products proactively and by default.
- Data minimization
- Collecting only the personal data needed for a stated purpose.
- Privacy impact assessment
- A documented analysis of data flows, privacy risks and mitigations.
- EU AI Act
- The European Union's risk-based regulation of artificial intelligence.
Practice problems
Work each problem on paper first, then reveal the answer to check.
What outcome did Driftwood agree for the capstone increment?
Show answer
Reduce missed sailings due to full decks by 30 percent over the summer.
Name four types of dark pattern.
Show answer
Any four of obstruction, sneaking, drip pricing, confirmshaming, false urgency, nagging.
What did the FTC announce about Amazon Prime in September 2025?
Show answer
A $2.5 billion settlement over Prime sign-up and cancellation practices.
How many issues did the dark-pattern audit find?
Show answer
Five.
What contrast ratio does WCAG 2.2 AA require for normal text?
Show answer
At least 4.5 to 1.
Which color pair failed in the contrast code?
Show answer
The muted timestamp on white.
Which state law gives consumers the right to opt out of the sale or sharing of personal information?
Show answer
The California Consumer Privacy Act, as amended by the CPRA.
Why should the location ping be dropped?
Show answer
It collects precise location without a stated need, creating risk for no benefit.
When do EU AI Act Annex III high-risk obligations apply under the 2026 amendments?
Show answer
From 2 December 2027.
Name three skills emphasized in PM hiring.
Show answer
Any three of product sense, execution, analytics, communication and stakeholder management, technical fluency.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.