Decision Tracking

Track development decisions, record outcomes, and learn from patterns

Decision Tracking helps you log important development decisions, record their outcomes, and learn from patterns over time.

Overview#

Track decisions to:

  • Remember context - Why was this decision made?
  • Record outcomes - Did it work? What happened?
  • Learn patterns - What decisions lead to success?
  • Get recommendations - What worked before in similar situations?

How It Works#

Decision Logged Outcome Recorded Pattern Learned ─────────────────────────────────────────────────────────── "Use PostgreSQL" ──▶ "Success" ──▶ "PostgreSQL works for user data" "Fast queries" well for user data" (confidence: 0.85)

Logging Decisions#

Via CLI#

1# Log a decision 2bootspring decision log "Using Clerk for authentication" \ 3 --type architecture \ 4 --reason "Built-in SSO, easy integration, good docs" 5 6# With more detail 7bootspring decision log "Switching to connection pooling" \ 8 --type database \ 9 --reason "Hitting connection limits in production" \ 10 --context "50+ concurrent users causing timeouts"

Via API#

1const memory = require('bootspring/intelligence/memory'); 2 3memory.logDecision({ 4 decision: 'Using Clerk for authentication', 5 type: 'architecture', 6 category: 'auth', 7 reason: 'Built-in SSO, easy integration, good docs', 8 context: 'Need enterprise auth features', 9 confidence: 0.8 10});

Decision Types#

TypeDescriptionExamples
architectureSystem design decisionsTech stack, patterns
databaseData model decisionsSchema, queries
securitySecurity-relatedAuth, encryption
performanceOptimization choicesCaching, indexes
uiInterface decisionsComponents, layout
dependencyLibrary choicesnpm packages
processWorkflow decisionsGit flow, deployments

Recording Outcomes#

When a Decision Works#

bootspring decision outcome <decision-id> success \ --notes "Reduced auth issues by 90%"
memory.recordOutcome(decisionId, { status: 'success', notes: 'Reduced auth issues by 90%', metrics: { authErrors: -90, loginTime: -500 } });

When a Decision Fails#

bootspring decision outcome <decision-id> failure \ --notes "Performance issues under load"
memory.recordOutcome(decisionId, { status: 'failure', notes: 'Performance issues under load', lesson: 'Need connection pooling for high concurrency' });

Outcome Statuses#

  • success - Decision worked as expected
  • partial - Partially successful, some issues
  • failure - Decision didn't work out
  • pending - Still evaluating

Getting Recommendations#

Ask for past decisions that worked:

1const recommendation = memory.getRecommendation({ 2 type: 'database', 3 category: 'caching', 4 context: 'Need to reduce database load' 5}); 6// { 7// found: true, 8// decision: 'Redis for session caching', 9// outcome: 'success', 10// confidence: 0.9, 11// similar: [...] 12// }
bootspring decision recommend --type database --category caching

Impact Scoring#

Decisions are automatically scored by impact:

LevelScoreDescription
Critical5Major architectural decisions
High4Important feature decisions
Medium3Standard development choices
Low2Minor implementation details
Minimal1Trivial decisions

How Impact is Calculated#

impactScore = typeWeight × confidenceScore × outcomeMultiplier
  • typeWeight - Based on decision type (architecture = 1.5, security = 1.4, etc.)
  • confidenceScore - Your confidence when making the decision
  • outcomeMultiplier - Success = 1.2, Failure = 0.8

Viewing Decisions#

Recent Decisions#

bootspring decision list --recent 10
const recent = memory.getRecentDecisions(10);

Pending Outcomes#

bootspring decision pending
const pending = memory.getPendingDecisions();

Decision Statistics#

bootspring decision stats
1const stats = memory.getStats(); 2// { 3// total: 45, 4// byType: { architecture: 12, database: 8, ... }, 5// outcomes: { success: 30, failure: 5, pending: 10 }, 6// successRate: 0.85 7// }

Pattern Learning#

The system learns from your decisions:

1const learning = require('bootspring/intelligence/learning'); 2 3// Analyze patterns 4const patterns = learning.analyze(); 5// { 6// insights: [ 7// { type: 'success_pattern', message: 'PostgreSQL decisions succeed 90%' } 8// ], 9// recommendations: { 10// by_type: { 11// 'database': { success_rate: 0.9, recommendation: 'Use PostgreSQL' } 12// } 13// } 14// } 15 16// Get anti-patterns to avoid 17const antiPatterns = learning.getAntiPatterns(); 18// [ 19// { decision: 'hardcoded_secrets', failure_rate: 1.0, recommendation: 'AVOID' } 20// ]

Best Practices#

  1. Log decisions as you make them - Context is freshest immediately
  2. Be specific about reasons - Future you will thank present you
  3. Record outcomes promptly - Don't wait too long to evaluate
  4. Review patterns regularly - Learn from your history
  5. Include metrics when possible - Quantifiable outcomes are more useful

Performance#

Decision tracking uses an append-only strategy for fast writes:

  • O(1) write performance for logging decisions
  • O(1) write performance for recording outcomes
  • Periodic compaction keeps read performance optimal