Skip to content

Commit c5350e3

Browse files
authored
01.04 exercise solution (#4)
1 parent 96a12cb commit c5350e3

File tree

7 files changed

+197
-60
lines changed

7 files changed

+197
-60
lines changed

exercises/01.building-an-mvp/02.solution.stakeholder-meeting/discovery-brief.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ This document now captures clarified answers and decisions before implementation
3636
- Home route (`/`): host selects start/end dates with standard date inputs and initial available schedule slots, then clicks "Create schedule"
3737
- Host dashboard route (`/s/{scheduleKey}/{hostKey}`): host can copy/share both links (public schedule link and private host dashboard link), edit schedule details/date/slot availability, and review attendee responses
3838
- Attendee schedule route (`/s/{scheduleKey}`): attendees enter name and select available slots; this route must be especially mobile friendly
39+
- What should the schedule grid interaction feel like?
40+
- Spreadsheet-like and high-velocity on desktop (Excel-like selection model), while preserving touch-friendly behavior on mobile
41+
- What temporal granularity and coverage are required in MVP?
42+
- Full-day host availability selection (not business-hours-only), with configurable slot increments of 15, 30, or 60 minutes
43+
- What timezone behavior is required for trust?
44+
- Explicit timezone-safe rendering and conversion across host and attendee views, with unambiguous final plan output
3945
- Why build instead of just adopting existing tools?
4046
- Existing tools like when2meet.com, whenavailable.com, and Doodle validate demand, but we still need a tighter completion-first UX and agent-native workflows (AI agents using MCP to create, update, and finalize plans with users)
4147

@@ -50,7 +56,8 @@ This document now captures clarified answers and decisions before implementation
5056
- Many polls created, but few result in a confirmed plan
5157
- What UX quality bar should support the success metric?
5258
- Availability selection should feel spreadsheet-fast: like selecting time-slot cells in Excel on desktop, with clear visual state and low interaction friction
53-
- Proposed implementation direction from product/developer facilitation: on mobile, tap-to-select plus draggable corner handle expansion with edge auto-scroll
59+
- Selected state must be visually obvious at a glance (high-contrast fill/border and clear active-range affordance)
60+
- Brett's mobile direction: match Google Docs/Google Sheets touch behavior where selecting a cell reveals a drag handle that can expand or shrink the current selection (with edge auto-scroll when dragging near viewport boundaries)
5461
- Overall product aesthetics should feel friendly and colorful (primarily blues/greens) without losing a minimalistic, clean interface
5562
- Route transitions should be direct and explicit: create on `/`, manage on `/s/{scheduleKey}/{hostKey}`, collect attendee availability on `/s/{scheduleKey}`
5663

@@ -66,6 +73,7 @@ This document now captures clarified answers and decisions before implementation
6673
- Use the existing web stack with lightweight sharing links and a mobile-first web experience
6774
- Preserve an interaction model that supports drag selection and future MCP-triggered scheduling actions without complex rewrites
6875
- Route model should keep host and attendee capabilities clearly separated while preserving easy sharing
76+
- Preserve in-world realism in this step: avoid workshop/training/meta language in product-facing behavior and copy
6977

7078
### Risk clarity
7179

@@ -84,7 +92,7 @@ This document now captures clarified answers and decisions before implementation
8492
- Frictionless response flow with clearer status tracking
8593
- Avoid mandatory account creation in MVP; use private host link access for management
8694
- Limit v1 to a narrow set of social planning flows
87-
- Adopt proven interaction patterns: desktop cell selection inspired by spreadsheet tools, and mobile selection behavior similar to Google Sheets (tap cell, drag corner dot to expand, edge-drag auto-scroll)
95+
- Adopt proven interaction patterns: desktop cell selection inspired by spreadsheet tools, and mobile selection behavior modeled after Google Docs/Google Sheets (select cell, drag handle to expand or shrink selection, edge-drag auto-scroll)
8896
- Make route purpose explicit in UI copy and provide clear copy/share controls for both schedule and host links
8997

9098
## Questions asked in the meeting
@@ -131,7 +139,7 @@ This document now captures clarified answers and decisions before implementation
131139
- How do those competitor experiences feel in real use?
132140
- Familiar enough to start quickly, but clunky on phones and still weak on clear finalization confidence
133141
- What should mobile time-slot selection feel like?
134-
- Kody's proposed direction validated by user feedback: similar to Google Sheets mobile selection (tap a start cell, drag a corner handle to expand selected slots, auto-scroll near view edges)
142+
- Brett's preferred direction, reinforced by user feedback: similar to Google Docs/Google Sheets mobile selection (tap a start cell, drag a corner handle to expand or shrink selected slots, auto-scroll near view edges)
135143
- Which route is most sensitive to mobile usability quality?
136144
- `/s/{scheduleKey}` attendee submission flow, because most invitees respond on phones
137145

@@ -157,7 +165,7 @@ This document now captures clarified answers and decisions before implementation
157165

158166
- Assumption:
159167
- Why we believe this:
160-
- Familiar spreadsheet-like slot selection (desktop) and Google Sheets-like touch selection (mobile) will reduce cognitive load and improve completion rates
168+
- Familiar spreadsheet-like slot selection (desktop) and Google Docs/Google Sheets-style touch selection with drag-handle expand/shrink behavior (mobile) will reduce cognitive load and improve completion rates
161169
- How we will validate it:
162170
- Track response-completion and error-correction rates across desktop and mobile cohorts, and compare against baseline interaction prototypes
163171

exercises/01.building-an-mvp/02.solution.stakeholder-meeting/meeting-transcript.md

Lines changed: 60 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -168,24 +168,38 @@ people will go back to chat.
168168
👤 Una: Also, most people in my groups will respond on their phones, not desktop.
169169
If the mobile experience is clunky, they simply will not finish availability.
170170

171-
🐨 Kody: Mobile usage is core for this audience. I want to design that interaction
172-
intentionally.
171+
🐨 Kody: Mobile usage is core for this audience. Before we lock implementation
172+
details, I want to hear the product bar from your side. Brett, what should this
173+
feel like in real use on desktop and mobile?
173174

174-
👤 Una: Agreed. If mobile feels awkward, people will not finish.
175+
💼 Brett: Desktop should feel fast and deliberate, like people are working in a
176+
spreadsheet instead of poking at a form. I want slot selection to feel
177+
Excel-like.
175178

176-
🐨 Kody: Great call. So mobile-first UX is not optional; it is part of core
177-
viability.
179+
💼 Brett: On mobile, I do not expect literal desktop behavior, but I do expect the
180+
same confidence. I want it to feel like Google Docs and Google Sheets on mobile:
181+
tap a cell, get the drag handle, then drag to expand or shrink the current
182+
selection.
178183

179-
🐨 Kody: One direction I would propose is a spreadsheet-like model: select time
180-
slots like Excel cells on desktop, then on mobile tap a cell and drag a corner
181-
handle like Google Sheets to expand the range.
184+
👤 Una: That maps to how people in my groups behave. If I can tap a start slot and
185+
use a handle to expand or shrink naturally, I will finish. If selection feels
186+
fiddly, I will stop.
182187

183-
🐨 Kody: If the drag reaches near the edge, we should auto-scroll so people can
184-
continue selecting without lifting their finger. Does that match what would feel
185-
natural?
188+
🐨 Kody: That helps. On temporal scope, where do you want the MVP boundary: only
189+
business hours, or full-day support?
186190

187-
👤 Una: Yes, that would feel natural. The key is that it stays obvious and easy to
188-
control.
191+
💼 Brett: Full-day support. Social plans are not 9-to-5. Also, hosts need control
192+
over precision: 15-minute, 30-minute, or 60-minute increments depending on the
193+
event.
194+
195+
🐨 Kody: Great. What should we treat as non-negotiable for timezone behavior?
196+
197+
💼 Brett: Timezone clarity is a trust issue, not a polish issue. I want canonical
198+
UTC storage under the hood, host timezone metadata persisted with the schedule,
199+
and explicit timezone context in host and attendee views.
200+
201+
👤 Una: Yes. If timezone display is ambiguous, people will blame the product even
202+
if selection was easy.
189203

190204
🐨 Kody: Is a native mobile app on the table for this MVP?
191205

@@ -200,35 +214,33 @@ required account is friction that will kill response rates.
200214

201215
💼 Brett: Agreed. We can add accounts later, but for MVP we need low friction.
202216

203-
🐨 Kody: Then we can have anyone create a schedule and issue a private host link
204-
to manage event details and view results.
205-
206-
👤 Una: That works. As long as the host link is clear and easy to find again.
207-
208-
🐨 Kody: Let’s make routes explicit so implementation and UX stay aligned. On the
209-
home page (`/`), the host should pick start/end dates using standard date
210-
inputs, select the time slots they want in the schedule, then tap a "Create
211-
schedule" button. Does that match the expected first step?
217+
🐨 Kody: For ownership and access, what is your preferred MVP behavior?
212218

213-
💼 Brett: Yes, that is exactly the creation flow we need.
219+
💼 Brett: Keep it no-account for participation, and issue a private host link on
220+
create. That keeps response friction low while still giving the host control.
214221

215-
🐨 Kody: After create, we should route to the host dashboard at
216-
`/s/{scheduleKey}/{hostKey}`.
222+
👤 Una: That works. As long as the host link is clear and easy to find again.
217223

218-
💼 Brett: Correct. That page must make it easy to copy/share both links: the
219-
public attendee schedule link and the private host dashboard link.
224+
🐨 Kody: I want to confirm route responsibilities so implementation stays clean.
225+
How do you want each route to behave?
220226

221-
🐨 Kody: And on that same host dashboard, hosts need clear controls to edit the
222-
date range and available slot times, plus a live view of attendee responses.
227+
💼 Brett: Home (`/`) is creation: date range, slot selection, create action.
228+
After create, route to `/s/{scheduleKey}/{hostKey}` for host management.
223229

224-
💼 Brett: Yes. If host edits are awkward, coordination falls apart.
230+
💼 Brett: Host dashboard must support easy copy/share for both links, schedule
231+
editing (including increment and full-day availability controls), and clear
232+
response review.
225233

226-
🐨 Kody: The attendee route should be `/s/{scheduleKey}`, which is the link hosts
227-
send out.
234+
💼 Brett: Public attendee participation should stay at `/s/{scheduleKey}`.
228235

229236
👤 Una: Perfect. On that page, attendees should enter their name and mark the
230237
time slots they can do. That flow has to be very mobile friendly.
231238

239+
🐨 Kody: Any language/style guardrails we should enforce in the product copy?
240+
241+
💼 Brett: Keep everything in-world and product-real. No internal process language
242+
in the user-facing flow.
243+
232244
🐨 Kody: What constraints should shape scope immediately?
233245

234246
💼 Brett: I want this to feel premium right away. I know that is not a hard
@@ -239,26 +251,27 @@ constraint, but it is where my head goes first.
239251
💼 Brett: Hard constraints are two-week window and no extra headcount. If we
240252
overreach with this release, we will miss the timeline.
241253

242-
🐨 Kody: Given those constraints, I recommend no heavy integrations in v1 and a
243-
focus on the core planning loop first.
244-
245-
💼 Brett: That makes sense. I do not love deferring integrations, but with this
246-
timeline I agree.
254+
🐨 Kody: Given those constraints, how do you want to handle integrations for v1?
247255

248-
🐨 Kody: What can we defer without invalidating learning?
256+
💼 Brett: Keep the core loop first and defer heavy integrations. We can still
257+
design for future integration points, but we should not build them now.
249258

250-
🐨 Kody: If we keep adding "nice-to-have" scope now, we reduce our chance of
251-
actually validating the core loop in this release.
259+
🐨 Kody: Which items are the right first deferrals without hurting the learning
260+
goal?
252261

253-
💼 Brett: Calendar sync and advanced recurring events are what I would defer
254-
first, even though I keep wanting them in the product.
262+
💼 Brett: Calendar sync and advanced recurring events are first to defer. They are
263+
valuable, but they are not required to validate whether people can actually
264+
finalize plans through this flow.
255265

256-
🐨 Kody: Highest-likelihood technical failure mode?
266+
🐨 Kody: From your perspectives, what is the highest-likelihood technical failure
267+
mode in this release?
257268

258-
🐨 Kody: Given Una's point, poor mobile UX is the biggest technical risk.
269+
👤 Una: Poor mobile UX, easily. If participation is clunky on phones, completion
270+
drops immediately. Timezone clarity still matters, but mobile friction is the
271+
first thing that will break adoption.
259272

260-
👤 Una: I agree. If the mobile flow is clunky, people will not complete
261-
availability. Timezone clarity still matters, but it is not the top risk.
273+
💼 Brett: From the business side I agree. If mobile completion is weak, the funnel
274+
falls apart before we can learn anything meaningful about finalization rates.
262275

263276
🐨 Kody: Biggest product risks?
264277

@@ -273,7 +286,7 @@ If we can stay disciplined there, we should learn fast.
273286

274287
👤 Una: Please make sure key actions are thumb-friendly and obvious on mobile.
275288

276-
🐨 Kody: I want to record assumptions so we can test them:
289+
🐨 Kody: Can I record these as assumptions for validation?
277290
1) people will use this if it beats chat coordination,
278291
2) no-calendar-sync is acceptable in v1,
279292
3) a narrow set of social planning flows is enough to validate viability.

exercises/01.building-an-mvp/03.solution.select-starter-architecture/discovery-brief.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ This document now captures clarified answers and decisions before implementation
3636
- Home route (`/`): host selects start/end dates with standard date inputs and initial available schedule slots, then clicks "Create schedule"
3737
- Host dashboard route (`/s/{scheduleKey}/{hostKey}`): host can copy/share both links (public schedule link and private host dashboard link), edit schedule details/date/slot availability, and review attendee responses
3838
- Attendee schedule route (`/s/{scheduleKey}`): attendees enter name and select available slots; this route must be especially mobile friendly
39+
- What should the schedule grid interaction feel like?
40+
- Spreadsheet-like and high-velocity on desktop (Excel-like selection model), while preserving touch-friendly behavior on mobile
41+
- What temporal granularity and coverage are required in MVP?
42+
- Full-day host availability selection (not business-hours-only), with configurable slot increments of 15, 30, or 60 minutes
43+
- What timezone behavior is required for trust?
44+
- Explicit timezone-safe rendering and conversion across host and attendee views, with unambiguous final plan output
3945
- Why build instead of just adopting existing tools?
4046
- Existing tools like when2meet.com, whenavailable.com, and Doodle validate demand, but we still need a tighter completion-first UX and agent-native workflows (AI agents using MCP to create, update, and finalize plans with users)
4147

@@ -50,7 +56,8 @@ This document now captures clarified answers and decisions before implementation
5056
- Many polls created, but few result in a confirmed plan
5157
- What UX quality bar should support the success metric?
5258
- Availability selection should feel spreadsheet-fast: like selecting time-slot cells in Excel on desktop, with clear visual state and low interaction friction
53-
- Proposed implementation direction from product/developer facilitation: on mobile, tap-to-select plus draggable corner handle expansion with edge auto-scroll
59+
- Selected state must be visually obvious at a glance (high-contrast fill/border and clear active-range affordance)
60+
- Brett's mobile direction: match Google Docs/Google Sheets touch behavior where selecting a cell reveals a drag handle that can expand or shrink the current selection (with edge auto-scroll when dragging near viewport boundaries)
5461
- Overall product aesthetics should feel friendly and colorful (primarily blues/greens) without losing a minimalistic, clean interface
5562
- Route transitions should be direct and explicit: create on `/`, manage on `/s/{scheduleKey}/{hostKey}`, collect attendee availability on `/s/{scheduleKey}`
5663

@@ -66,6 +73,7 @@ This document now captures clarified answers and decisions before implementation
6673
- Use the existing web stack with lightweight sharing links and a mobile-first web experience
6774
- Preserve an interaction model that supports drag selection and future MCP-triggered scheduling actions without complex rewrites
6875
- Route model should keep host and attendee capabilities clearly separated while preserving easy sharing
76+
- Preserve in-world realism in this step: avoid workshop/training/meta language in product-facing behavior and copy
6977

7078
### Risk clarity
7179

@@ -84,7 +92,7 @@ This document now captures clarified answers and decisions before implementation
8492
- Frictionless response flow with clearer status tracking
8593
- Avoid mandatory account creation in MVP; use private host link access for management
8694
- Limit v1 to a narrow set of social planning flows
87-
- Adopt proven interaction patterns: desktop cell selection inspired by spreadsheet tools, and mobile selection behavior similar to Google Sheets (tap cell, drag corner dot to expand, edge-drag auto-scroll)
95+
- Adopt proven interaction patterns: desktop cell selection inspired by spreadsheet tools, and mobile selection behavior modeled after Google Docs/Google Sheets (select cell, drag handle to expand or shrink selection, edge-drag auto-scroll)
8896
- Make route purpose explicit in UI copy and provide clear copy/share controls for both schedule and host links
8997

9098
## Questions asked in the meeting
@@ -131,7 +139,7 @@ This document now captures clarified answers and decisions before implementation
131139
- How do those competitor experiences feel in real use?
132140
- Familiar enough to start quickly, but clunky on phones and still weak on clear finalization confidence
133141
- What should mobile time-slot selection feel like?
134-
- Kody's proposed direction validated by user feedback: similar to Google Sheets mobile selection (tap a start cell, drag a corner handle to expand selected slots, auto-scroll near view edges)
142+
- Brett's preferred direction, reinforced by user feedback: similar to Google Docs/Google Sheets mobile selection (tap a start cell, drag a corner handle to expand or shrink selected slots, auto-scroll near view edges)
135143
- Which route is most sensitive to mobile usability quality?
136144
- `/s/{scheduleKey}` attendee submission flow, because most invitees respond on phones
137145

@@ -157,7 +165,7 @@ This document now captures clarified answers and decisions before implementation
157165

158166
- Assumption:
159167
- Why we believe this:
160-
- Familiar spreadsheet-like slot selection (desktop) and Google Sheets-like touch selection (mobile) will reduce cognitive load and improve completion rates
168+
- Familiar spreadsheet-like slot selection (desktop) and Google Docs/Google Sheets-style touch selection with drag-handle expand/shrink behavior (mobile) will reduce cognitive load and improve completion rates
161169
- How we will validate it:
162170
- Track response-completion and error-correction rates across desktop and mobile cohorts, and compare against baseline interaction prototypes
163171

0 commit comments

Comments
 (0)