Product Requirements Document
A structured document that defines what a product or feature should do, for whom, and why - without specifying how to build it.
Product Requirements Document
Section titled “Product Requirements Document”A PRD (Product Requirements Document) is the contract between a product team and an engineering team. It answers: what is the problem, who has it, what does success look like, and what are the boundaries of the solution? What a PRD deliberately does not answer is: how will engineering implement this? That boundary is the PRD’s most important feature.
Canonical template
Section titled “Canonical template”# [Feature Name] - Product Requirements
## Problem Statement[Who has what problem, with what frequency and impact.]
## Goals- [Measurable outcome 1]
## Non-Goals- [What we are explicitly NOT solving in this release]
## User Stories / Jobs-to-be-Done- As a [user], I want to [action] so that [outcome]
## Success Metrics- [How we will know this worked]
## Open Questions- [Assumption not yet validated]When to use
Section titled “When to use”Defining a new feature, aligning engineering on scope, communicating product intent to stakeholders, planning a sprint or milestone.
When not to use
Section titled “When not to use”Operational documentation, post-launch retrospectives, engineering design decisions.
Pairs well with
Section titled “Pairs well with”pragmatic-architect, candid, matter-of-fact, problem-solution
Often confused with
Section titled “Often confused with”adr: An ADR records an architectural decision already made. A PRD defines what should be built before engineering has made the implementation decisions.
Instruction
Section titled “Instruction”Write as a Product Requirements Document (PRD). Cover: Problem Statement (who has what problem),Goals (measurable outcomes), Non-Goals (explicit scope exclusions), User Stories orJobs-to-be-Done, Success Metrics, and Open Questions. Do not specify implementation - the PRDdescribes what should be built and why, not how to build it. Make the problem statement specific:name the user, the friction, and the frequency. Make the non-goals as explicit as the goals -scope creep lives in what was left ambiguous. The open questions section is required: name theassumptions that have not yet been tested.Template
Section titled “Template”See the Product Requirements Document template.
Related
Section titled “Related”Pairs well with
Section titled “Pairs well with”Pragmatic Architect, Candid, Matter of Fact, Problem-Solution
Avoid with
Section titled “Avoid with”Pastoral, Devotional Reflection, Warm, Reverent
Often confused with
Section titled “Often confused with”Examples
Section titled “Examples”Async Standup Bot - Product Requirements
Section titled “Async Standup Bot - Product Requirements”Problem Statement
Section titled “Problem Statement”Engineering teams using Slack for team communication have no structured way to run async standups within the tool they already use. Current approaches require either a separate SaaS product (Geekbot, Standuply), which adds cost and context-switching, or a manual template posted to a channel, which requires someone to enforce the format and generates no structured data. Teams that need to review standup history, track blocker patterns, or report on team activity cannot do so without manually reading thread-by-thread.
The users who feel this most are engineering managers and team leads at companies with distributed teams (at least two timezones). They run standups daily. They need blockers to surface and resolve without requiring a meeting. They cannot afford a per-seat SaaS subscription for a feature they could implement natively.
- Enable any Slack workspace to run structured async standups with no external tool
- Reduce time-to-resolution for blockers by routing them to the named person via direct @mention
- Produce a structured weekly digest that engineering leads can use for 1:1 and planning prep
- Support teams of 4 to 50 engineers without configuration complexity
Non-Goals
Section titled “Non-Goals”- This release does not replace synchronous standup tooling (Zoom, Meet integrations)
- This release does not include time-tracking or sprint velocity metrics
- This release does not support custom standup prompts in v1 - the three-field template is fixed
- This release is not intended for non-engineering teams (sales, marketing standup formats are different)
User Stories
Section titled “User Stories”- As a team lead, I want to configure a standup channel and prompt schedule once so that I am not manually reminding my team to post each day
- As an engineer, I want to post my standup update in a format that takes less than two minutes so that the daily ritual does not feel like overhead
- As an engineer with a blocker, I want my blocker to reach the specific person who can help so that I am not waiting for them to notice it in a channel they may not read attentively
- As a team lead, I want a weekly summary of standup activity so that I can see blocker patterns and prepare for 1:1s without reading 50 individual posts
Success Metrics
Section titled “Success Metrics”- Average time from blocker posted to first response from @mentioned person: target under 30 minutes during business hours
- Daily participation rate: target 85% of team posts on any given weekday
- Setup time: a team lead can configure and launch a standup channel in under 10 minutes
- Weekly digest open rate: target 70% of team leads open the digest within 24 hours of delivery
Open Questions
Section titled “Open Questions”- Does the bot need to handle engineers across more than two timezones in a single team? If so, how does the “post by 10am local” constraint work when “local” varies by 13 hours?
- Should the bot send direct reminders to engineers who have not posted by their deadline, or only post a channel reminder?
- What happens when someone is out of office - does the bot need OOO awareness, or does the team handle this manually?
- Is there a meaningful integration with GitHub or Jira that would let the bot pre-populate the “shipped” field from closed PRs or resolved tickets?
PRD: Morning Routine v1
Section titled “PRD: Morning Routine v1”- Author: Me
- Status: Draft
- Last updated: 2026-05-14
- Target launch: 2026-05-19 (Monday)
1. Problem Statement
Section titled “1. Problem Statement”The current morning experience (6:30am - 7:30am) is unstructured and reactive. The first action upon waking is phone-checking, which consumes 40-50 minutes and produces measurable downstream effects: elevated baseline stress, slower work start, and a recurring sense of having begun the day in a deficit. Three prior unstructured attempts to “use the phone less in the morning” have failed within a week, indicating the problem is not motivational but architectural.
2. Goals
Section titled “2. Goals”- G1: Establish a repeatable, low-friction routine for the 6:30am - 7:30am window on weekdays.
- G2: Eliminate phone use during this window.
- G3: Arrive at the 9am work start with a written daily plan already in hand.
- G4: Be sustainable for at least 30 consecutive weekdays without willpower spikes.
3. Non-Goals
Section titled “3. Non-Goals”- NG1: Not optimizing weekends in v1. Weekends have different constraints (children, social schedule) and warrant a separate spec.
- NG2: Not solving sleep. Bedtime drift is an upstream issue; will be addressed in a future cycle.
- NG3: Not adopting a meditation practice in v1. Out of scope to avoid scope creep on a fragile habit.
- NG4: Not tracking metrics in an app. Paper-only by design.
4. Success Metrics
Section titled “4. Success Metrics”| Metric | Target | Measurement |
|---|---|---|
| Weekday adherence | >= 80% (4 of 5 weekdays per week) | Paper checklist, weekly review |
| Phone-touch before 7:30am | 0 times per weekday | Self-report, honesty system |
| Daily plan completion before 9am | 100% of weekdays | Notebook timestamp |
| Self-rated morning calm (1-5) | >= 3.5 weekly average | One-line journal entry |
5. Requirements
Section titled “5. Requirements”5.1 Functional
Section titled “5.1 Functional”- R1: Routine MUST execute in this order: water, light, movement, planning.
- R2: Routine MUST complete within 60 minutes of waking.
- R3: Phone MUST remain in the kitchen, plugged in, face down, until 7:30am.
- R4: Planning step MUST produce a written daily shortlist in a designated paper notebook.
5.2 Non-functional
Section titled “5.2 Non-functional”- R5: Routine MUST be executable in under 30 seconds of decision-making (no daily re-planning of the routine itself).
- R6: Routine MUST tolerate one missed module per day without invalidating the rest.
- R7: Routine MUST function in winter (light module has a window fallback for cold or dark mornings).
6. User Story
Section titled “6. User Story”As a working adult who currently begins the day in a reactive state, I want a predefined sequence of four small actions in my first hour so that I arrive at the work day having already chosen how I show up.
7. Open Questions
Section titled “7. Open Questions”- OQ1: What happens when a child wakes early and interrupts the routine? Default behavior: resume at the next module after the interruption ends. Needs trial.
- OQ2: Should travel days use a compressed version (e.g., water + planning only) or be exempt? Lean toward compressed.
- OQ3: Is 10 minutes of planning enough on heavy-meeting days? Possibly extend to 15 on Mondays.
8. Out of Scope (for future versions)
Section titled “8. Out of Scope (for future versions)”- Evening routine design (v2)
- Weekend variant (v2)
- Family-coordinated morning (v3)
9. Approval
Section titled “9. Approval”Self-approved. Re-review in 30 days.
Lattice Notify Notification Service - Product Requirements
Section titled “Lattice Notify Notification Service - Product Requirements”Author: Priya Shah (PM) Engineering lead: Ana Rivera Date: 2026-05-14 Sprint target: 2026-05-25 week Decision dependency: Datastore choice (Postgres vs DynamoDB) locked at the 11am Friday 2026-05-16 sync; this PRD assumes Postgres per ADR-0023.
Problem Statement
Section titled “Problem Statement”Lattice Notify users currently receive product activity (mentions, comments, status changes) only through the monolith’s polling-based feed. The feed updates every 60 seconds, which our users have rated 3.1/5 on responsiveness in the last two quarterly NPS cycles. Account-level usage data shows that customers on larger teams (>50 seats) churn 2.3x more often than smaller teams, and churn interviews consistently surface “I missed something important because the notification was late” as a top-three reason.
The product needs a real-time notification system - sub-second delivery for in-app surface, sub-5-second delivery for email and Slack push - that serves the 500K notification events/day Lattice Notify generates today, with headroom for the 10x growth scenario over the next 12 months if our Slack-partnership deal closes.
- Deliver in-app notifications with p95 latency under 1 second from event to surface
- Deliver email and Slack push notifications with p95 latency under 5 seconds
- Support the 500K events/day launch volume at the SLOs above with no manual intervention from the on-call rotation
- Increase notification responsiveness NPS subscore from 3.1 to 4.0 within 90 days of launch
- Ship to general availability within 6 weeks of sprint kickoff
Non-Goals
Section titled “Non-Goals”- Notification preferences UI beyond the existing per-channel toggles (deferred to next quarter)
- Push notifications to native mobile apps (no mobile clients exist yet)
- Cross-workspace notification routing (single-workspace scope for v1)
- Historical notification search beyond 90 days (use existing audit log for older items)
- Replacing the polling feed (it stays as a fallback for the first 90 days post-launch)
User Stories / Jobs-to-be-Done
Section titled “User Stories / Jobs-to-be-Done”- As a Lattice Notify user on a team of 100, when a teammate mentions me in a comment, I want the notification to appear in my in-app inbox within a second so I can respond before the conversation moves on.
- As an admin on a team of 200, when a workspace-wide status change occurs, I want to receive a single consolidated notification within 5 seconds so my inbox is not buried.
- As an on-call engineer at Lattice Notify, when notification volume spikes 5x, I want the system to absorb the load without paging me so I can keep my night.
- As a Lattice Notify product manager, when the Slack-partnership deal closes and traffic grows 10x, I want a documented decision point about when to revisit the datastore choice so we are not blindsided by a scaling wall.
Success Metrics
Section titled “Success Metrics”- p95 in-app notification latency under 1 second, measured continuously and reported in the weekly status report
- p95 email and Slack push latency under 5 seconds
- Notification responsiveness NPS subscore reaches 4.0 within 90 days of launch
- Zero data-loss incidents in the first 90 days of production
- On-call pages attributable to the notification service: under 2 per month after the first 30 days
Open Questions
Section titled “Open Questions”- At what sustained event volume should we revisit the Postgres vs DynamoDB decision? ADR-0023 proposes 5M events/day; this PRD inherits that threshold pending Friday lock-in.
- Should notification preferences live in the notification service’s database or stay in the monolith user table? Ana to propose by sprint kickoff.
- What is the deprecation path for the polling feed after the 90-day fallback window? Priya to draft a follow-up PRD by 2026-06-15.
- How do we handle the partnership-deal trigger if it lands before we cross the 5M revisit threshold? Open with Priya and the partnerships team; not blocking this release.