Writing a Product Spec

Building a feature for a finance platform

So today, I used Claude to help me write a product spec for a new feature for a finance platform.

I wanted to see how it would do. What surprised me most was how technical it was able to get—the specificity with regard to the schema.

It’s a high-level spec but you could prompt the model to go deeper and deeper depending on what you wanted.

If you’re a PM, you might want to start writing your specs with AI.

Prompt

“Product spec for a feature that allows users to connect their bank to a finance platform.”

Output

I’m impressed. I’ve written some product specs in my day and I like the brevity and clarity that Claude gave us here:

Bank Account Connections Spec

Overview

This feature will allow users to connect their bank accounts to our platform via API integrations. Transactions and account data will be synced on a regular basis.

User Stories

  • As a user, I want to connect my bank accounts to import their data.

  • As a user, I want to disconnect accounts and remove their data.

  • As a user, I want to see sync status for each account.

Requirements

  • Integrate with Plaid, Yodlee or other bank APIs.

  • Store encrypted API keys and credentials securely.

  • Sync transactions and balances daily via API.

  • Categorize transactions during import.

  • Allow users to export transaction data.

API Endpoints

/api/v1/bank_accounts

  • POST - Create new bank account connection

Input:

{
  user_id: 123,
  access_token: 'abcd1234', 
  bank_name: 'Chase' 
}

{ user_id: 123, access_token: 'abcd1234', bank_name: 'Chase' }

Output:

{
  id: 456,
  is_connected: true
}

{ id: 456, is_connected: true }

  • GET - Get list of connected accounts

  • DELETE - Disconnect a bank account

/api/v1/bank_accounts/{id}/sync

  • POST - Trigger sync for specific account

/api/v1/bank_accounts/transactions

  • GET - Get paginated transactions for user

Data Model

BankAccount

  • id

  • user_id

  • bank_name

  • access_token (encrypted)

  • last_sync_time

Transaction

  • id

  • account_id

  • date

  • payee

  • category

  • amount

Backend Sync Process

  1. Get access token from vault

  2. Call bank API to get new transactions and balances

  3. Parse & categorize transactions

  4. Insert into database

  5. Update last sync time

Error Handling

  • Retry failed syncs up to 3 times

  • Notify users if sync fails via email/in-app

  • Handle expired credentials and refresh tokens

Performance Considerations

  • Sync transaction window limited to past 30 days

  • Use incremental sync after initial import

  • Queue sync jobs with Redis/Celery

  • Paginate transaction API responses

Here’s the live URL in case you want this project.

Know someone who might like this?

Send them this newsletter:

Reply

or to participate.