Building for Speed: Our Tech Stack
How we built a financial platform that processes millions of transactions while maintaining sub-100ms response times.
The Goal
Financial operations need to be fast. When you're processing invoices, generating reports, or reconciling transactions, every second counts. We set an ambitious goal: sub-100ms response times for 99% of requests.
The Stack
We chose our stack based on three principles:
- Type Safety - Catch errors at compile time, not in production
- Performance - Handle millions of transactions without breaking a sweat
- Developer Experience - Ship features quickly without sacrificing quality
Frontend
We use Next.js 15 with React for our web application:
- Server Components reduce bundle size and improve performance
- TypeScript catches errors before they reach production
- Tailwind CSS enables rapid UI development
Backend
Our API is built with Node.js and Golang:
- Node.js for business logic and API endpoints
- Golang for high-performance data processing
- PostgreSQL for transactional data
- Redis for caching and rate limiting
Performance Optimizations
Database Indexing
We use strategic indexes to keep queries fast:
-- Optimize invoice lookups
CREATE INDEX idx_invoices_customer_date
ON invoices(customer_id, created_at DESC);
-- Speed up reconciliation
CREATE INDEX idx_transactions_status_date
ON transactions(status, processed_at)
WHERE status = 'pending';
Caching Strategy
We implement multi-layer caching:
- Browser Cache - Static assets and API responses
- CDN Cache - Edge caching for global performance
- Application Cache - Redis for frequently accessed data
- Database Cache - PostgreSQL query cache
Async Processing
Heavy operations run in the background:
// Example: Process large reconciliation asynchronously
async function reconcileTransactions(accountId: string) {
// Queue the job
await queue.add("reconciliation", {
accountId,
priority: "high",
});
// Return immediately
return { status: "queued" };
}
The Results
Our approach delivers:
- 50ms average API response time
- 99.9% uptime over the last 6 months
- 1M+ transactions processed daily
Benchmarks
| Operation | Response Time | Throughput | | --------------------- | ------------- | ---------- | | Create Invoice | 45ms | 2000/sec | | Generate Report | 120ms | 500/sec | | Reconcile Transaction | 35ms | 5000/sec |
Monitoring and Observability
We use Datadog for comprehensive monitoring:
- Real-time performance metrics
- Distributed tracing for debugging
- Custom dashboards for business metrics
Lessons Learned
What Worked
- Progressive Enhancement - Start simple, add complexity only when needed
- Automated Testing - Catch regressions before they hit production
- Feature Flags - Roll out changes gradually
What Didn't
- Premature Optimization - Focus on shipping first, optimize later
- Over-engineering - Simple solutions often outperform complex ones
What's Next
We're working on:
- GraphQL API for more flexible data fetching
- Webhooks for real-time event streaming
- Multi-region deployment for global performance
Want to build with us? We're hiring – check out oppulence.app/company for open positions.
Yvan Yomba
Contributor
Contributing to Oppulence's mission of building financial infrastructure that stays in the background.
