Section 06
Decision Framework
Pick the right system for the workload — and know when to migrate.
System comparison
| Factor | DuckDB | Railway + Postgres | AWS + Postgres | Snowflake |
|---|---|---|---|---|
| Best For | Solo analyst / local reporting | Small app or prototype | Growing org / managed cloud | Large analytics workloads |
| Data Size | Under 200GB | Under 500GB | 500GB–1TB+ | 1TB+ |
| Users | 1 | 1–5 | 5–20 | 20+ |
| Freshness | Manual / daily batch | Scheduled batch | Hourly / scheduled / event-driven | Batch / near real-time |
| Cost | Free / very low | Low | Medium | Medium to high |
| Complexity | Very low | Low | Medium | High |
| Compliance Fit | Low | Low-medium | Medium-high | High |
| When to Migrate | More users or automation needed | Needs stronger security / scale | Analytics outgrow Postgres | Usually final analytics tier |
Migration Triggers
You have outgrown DuckDB when
- More than one person needs concurrent access
- Reports must refresh automatically
- Data must be served through an application
- File sharing becomes risky
- Security and access control matter
You have outgrown Railway + Postgres when
- Jobs need stronger scheduling and monitoring
- Data volume grows beyond simple app-database reporting
- You need private networking, IAM, and stronger audit controls
- Multiple departments depend on the outputs
You have outgrown AWS + Postgres when
- Analytical queries slow down operational workloads
- Many dashboards query the same database
- You need warehouse-style scaling
- Cost/performance favors an analytics warehouse
Use Snowflake when
- Analytics is the primary workload
- Multiple teams need governed access
- Data volume is large
- Warehousing, data marts, and BI performance matter more than app simplicity