> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Turn PRDs into Sprint Tickets

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Turn PRDs into Sprint Tickets" description="Point Devin at a Notion PRD and get scoped Linear tickets for each work package." prompt="Read the PRD at this Notion page: [paste Notion URL]. Investigate our codebase to understand the current architecture, then break the project into independent work packages. For each work package, create a Linear ticket with a description, acceptance criteria, complexity estimate (S/M/L), and list of files to modify." category="Project Management" features="Integrations, MCP" />

<div className="uc-detail-wrapper">
  <Tip>Don't want to set this up manually? Paste a link to this page into a Devin session and ask it to set everything up for you.</Tip>

  <Steps>
    <Step title="Connect Notion and Linear">
      Devin reads your PRD directly from Notion using the [Notion MCP](/work-with-devin/mcp). Go to **Settings > Connections > MCP servers**, find **Notion**, and click **Enable**. You'll be prompted to authorize access to your Notion workspace — grant read access to the workspace where your PRDs live.

      Your [Linear integration](/integrations/linear) also needs to be connected. Go to **Settings > Connections > Linear** and click **Connect**, then select the teams where Devin should create tickets. Once connected, Devin has native Linear tools automatically — no separate Linear MCP needed.
    </Step>

    <Step title="Point Devin at your PRD">
      Share the Notion page URL and tell Devin exactly how to structure the tickets. Be specific about the Linear project name, your ticket format, and any team conventions.

      <PromptBlock>
        ```txt PRD to tickets theme={null}
        Read the PRD at this Notion page:
        https://notion.so/yourteam/user-profiles-v2-abc123

        Investigate our codebase to understand the current user profile
        architecture, then break this project into independent work packages.

        For each work package, create a Linear ticket in the "User Profiles V2"
        project with:
        - A clear description of the change and why it's needed
        - Acceptance criteria
        - Complexity estimate (S/M/L)
        - List of files likely to be modified

        Order the tickets by suggested implementation sequence and note
        any dependencies between them.
        ```
      </PromptBlock>

      If your team follows a specific ticket template, add it as a [Knowledge](/product-guides/knowledge) entry instead of repeating it in every prompt. For example: "All engineering tickets must include: Description, Acceptance Criteria, Technical Notes, and T-shirt size estimate." Devin applies Knowledge automatically to every session.
    </Step>

    <Step title="Review the ticket breakdown">
      Devin reads the full PRD via the Notion MCP, searches your codebase to map the relevant architecture, then creates Linear tickets scoped to independent code boundaries. It posts a summary like this:

      | Ticket | Title                                                        | Size | Dependencies |
      | ------ | ------------------------------------------------------------ | ---- | ------------ |
      | UP-101 | Add avatar upload endpoint to `/api/users/avatar`            | S    | None         |
      | UP-102 | Create profile settings page in `src/pages/settings/profile` | M    | None         |
      | UP-103 | Migrate `users` table to support bio and social links        | M    | None         |
      | UP-104 | Build profile preview card component                         | S    | UP-103       |
      | UP-105 | Add public/private visibility toggle to profile settings     | M    | UP-103       |
      | UP-106 | Index new profile fields in Elasticsearch for user search    | L    | UP-103       |

      Each Linear ticket includes acceptance criteria, file paths, and implementation notes drawn from the actual PRD and codebase — not generic descriptions.
    </Step>

    <Step title="Refine and kick off implementation">
      Review the tickets in Linear. If any are too broad, ask Devin to split them. When you're ready, you can assign Devin to each of these tickets in Linear to start implementing, or add the `!implement` label to use the default implementation playbook.

      <PromptBlock playbookId="b6ba73c577084d2392720a2abf51dc26">
        ```txt Implement a ticket theme={null}
        Implement UP-101: Add avatar upload endpoint to /api/users/avatar.
        Follow the acceptance criteria in the ticket. Open a PR when done.
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
