business-as-code
Version:
Primitives for expressing business logic and processes as code
308 lines (294 loc) • 8.07 kB
text/typescript
/**
* Basic usage example for business-as-code
*
* This example demonstrates how to define business entities, goals, products,
* KPIs, OKRs, and calculate financial metrics.
*/
import {
Business,
Vision,
Goals,
Product,
Service,
Process,
Workflow,
kpis,
okrs,
financials,
$,
} from '../src/index.js'
// Define your business
const company = Business({
name: 'Acme Corp',
description: 'Building the future of widgets',
industry: 'Technology',
mission: 'To make widgets accessible to everyone',
values: ['Innovation', 'Customer Focus', 'Integrity'],
targetMarket: 'SMB and Enterprise',
foundedAt: new Date('2020-01-01'),
teamSize: 50,
structure: {
departments: [
{
name: 'Engineering',
head: 'Jane Smith',
members: ['Alice', 'Bob', 'Charlie'],
budget: 2000000,
},
{
name: 'Sales',
head: 'John Doe',
members: ['David', 'Eve'],
budget: 1000000,
},
],
},
})
// Define vision
const vision = Vision({
statement: 'To become the world\'s most trusted widget platform',
timeframe: '5 years',
successIndicators: [
'10M+ active users',
'Present in 50+ countries',
'Industry-leading NPS score',
'$1B+ annual revenue',
],
})
// Define goals
const goals = Goals([
{
name: 'Launch MVP',
description: 'Ship minimum viable product to early customers',
category: 'strategic',
targetDate: new Date('2024-06-30'),
owner: 'Product Team',
metrics: ['User signups', 'Feature completion rate'],
status: 'in-progress',
progress: 65,
},
{
name: 'Achieve Product-Market Fit',
description: 'Validate product value with target customers',
category: 'strategic',
targetDate: new Date('2024-12-31'),
owner: 'CEO',
metrics: ['NPS > 50', 'Churn < 5%', '100+ paying customers'],
status: 'in-progress',
progress: 30,
dependencies: ['Launch MVP'],
},
])
// Define products
const product = Product({
name: 'Widget Pro',
description: 'Enterprise-grade widget management platform',
category: 'SaaS',
targetSegment: 'Enterprise',
valueProposition: 'Reduce widget management costs by 50%',
pricingModel: 'subscription',
price: 99,
currency: 'USD',
cogs: 20,
features: [
'Unlimited widgets',
'Advanced analytics',
'API access',
'24/7 support',
],
roadmap: [
{
name: 'Mobile app',
description: 'Native iOS and Android apps',
targetDate: new Date('2024-09-01'),
priority: 'high',
status: 'in-progress',
},
],
})
// Define services
const service = Service({
name: 'Widget Consulting',
description: 'Expert widget implementation and optimization',
category: 'Consulting',
targetSegment: 'Enterprise',
valueProposition: 'Get expert help implementing widgets in 2 weeks',
pricingModel: 'fixed',
price: 5000,
currency: 'USD',
deliveryTime: '2 weeks',
sla: {
uptime: 99.9,
responseTime: '< 24 hours',
supportHours: 'Business hours (9-5 EST)',
penalties: '10% refund per day of delay',
},
})
// Define a business process
const process = Process({
name: 'Customer Onboarding',
description: 'Process for onboarding new customers',
category: 'core',
owner: 'Customer Success Team',
steps: [
{
order: 1,
name: 'Welcome Email',
description: 'Send personalized welcome email',
responsible: 'CS Manager',
duration: '5 minutes',
automationLevel: 'automated',
},
{
order: 2,
name: 'Initial Setup Call',
description: 'Schedule and conduct setup call',
responsible: 'CS Rep',
duration: '30 minutes',
automationLevel: 'manual',
},
],
inputs: ['Customer Information', 'Subscription Plan'],
outputs: ['Configured Account', 'Training Materials'],
})
// Define a workflow
const workflow = Workflow({
name: 'New Customer Welcome',
description: 'Automated welcome sequence for new customers',
trigger: {
type: 'event',
event: 'Customer.created',
},
actions: [
{
order: 1,
type: 'send',
description: 'Send welcome email',
params: {
template: 'welcome_email',
to: '{{customer.email}}',
},
},
{
order: 2,
type: 'create',
description: 'Create onboarding task',
params: {
type: 'Task',
title: 'Onboard {{customer.name}}',
assignee: 'customer_success_team',
},
},
],
})
// Track KPIs
const kpiList = kpis([
{
name: 'Monthly Recurring Revenue',
description: 'Total predictable revenue per month',
category: 'financial',
unit: 'USD',
target: 100000,
current: 85000,
frequency: 'monthly',
dataSource: 'Billing System',
formula: 'SUM(active_subscriptions.price)',
},
{
name: 'Customer Churn Rate',
description: 'Percentage of customers lost per month',
category: 'customer',
unit: 'percent',
target: 5,
current: 3.2,
frequency: 'monthly',
dataSource: 'CRM',
formula: '(churned_customers / total_customers) * 100',
},
{
name: 'Net Promoter Score',
description: 'Customer satisfaction and loyalty metric',
category: 'customer',
unit: 'score',
target: 50,
current: 48,
frequency: 'quarterly',
dataSource: 'Survey Platform',
},
])
// Define OKRs
const okrList = okrs([
{
objective: 'Achieve Product-Market Fit',
description: 'Validate that our product solves a real problem for customers',
period: 'Q2 2024',
owner: 'CEO',
keyResults: [
{
description: 'Increase Net Promoter Score',
metric: 'NPS',
startValue: 40,
targetValue: 60,
currentValue: 52,
unit: 'score',
},
{
description: 'Reduce monthly churn rate',
metric: 'Churn Rate',
startValue: 8,
targetValue: 4,
currentValue: 5.5,
unit: 'percent',
},
{
description: 'Achieve customer retention',
metric: 'Customers with 3+ months',
startValue: 50,
targetValue: 200,
currentValue: 125,
unit: 'customers',
},
],
status: 'on-track',
confidence: 75,
},
])
// Calculate financials
const metrics = financials({
revenue: 1000000,
cogs: 300000,
operatingExpenses: 500000,
currency: 'USD',
period: 'monthly',
})
// Use $ helper for calculations
console.log('\n=== Business Operations with $ ===')
console.log('Format currency:', $.format(1234.56))
console.log('Calculate percentage:', $.percent(25, 100))
console.log('Calculate growth:', $.growth(120, 100))
console.log('Calculate margin:', $.margin(100, 60))
console.log('Calculate ROI:', $.roi(150, 100))
console.log('Calculate LTV:', $.ltv(100, 12, 24))
console.log('Calculate CAC:', $.cac(10000, 100))
console.log('Calculate burn rate:', $.burnRate(100000, 70000, 3))
console.log('Calculate runway:', $.runway(100000, 10000))
// Display results
console.log('\n=== Business Summary ===')
console.log(`Company: ${company.name}`)
console.log(`Mission: ${company.mission}`)
console.log(`Team Size: ${company.teamSize}`)
console.log(`\nVision: ${vision.statement}`)
console.log(`Timeframe: ${vision.timeframe}`)
console.log(`\nGoals: ${goals.length}`)
console.log(`Products: ${product.name} - ${$.format(product.price!)} ${product.pricingModel}`)
console.log(`Services: ${service.name} - ${$.format(service.price!)} ${service.pricingModel}`)
console.log(`\nKPIs: ${kpiList.length}`)
console.log(`OKRs: ${okrList.length}`)
console.log(`\n=== Financial Metrics ===`)
console.log(`Revenue: ${$.format(metrics.revenue!)}`)
console.log(`Gross Profit: ${$.format(metrics.grossProfit!)}`)
console.log(`Gross Margin: ${metrics.grossMargin!.toFixed(1)}%`)
console.log(`Operating Income: ${$.format(metrics.operatingIncome!)}`)
console.log(`Operating Margin: ${metrics.operatingMargin!.toFixed(1)}%`)
console.log(`Net Income: ${$.format(metrics.netIncome!)}`)
console.log(`Net Margin: ${metrics.netMargin!.toFixed(1)}%`)