Tries
Financial Modeling and DCF Valuation Platform for Investors and Analysts
Tries is a financial modeling platform, a programmable alternative to terminals like Bloomberg and Capital IQ for generating DCF valuations.
Most of an analyst’s time goes into pulling numbers from filings and vendor APIs, normalizing them, and wiring them into spreadsheets. The modeling itself, the part that needs judgment, is a small slice of the work. Tries moves everything upstream of that judgment into infrastructure.
Workflow
A user picks a company, chooses a template such as a standard DCF under an enterprise or equity framework, and sets assumptions like risk free rate and terminal growth. The system fetches canonical data, resolves every formula through a dependency graph, and returns values with full derivation lineage, so any number traces back to the provider field it came from. Analyses export to Excel, PDF, or CSV.
What makes it more than a data pipeline is that the calculation layer is polymorphic. The same metric, WACC for example, resolves through different equations depending on the company’s industry and the chosen DCF framework, and the dependency graph reshapes itself at runtime to match.
Stack
| Area | Tools |
|---|---|
| Frontend | Next.js, TypeScript |
| Backend | FastAPI, Python, SQLAlchemy, Pydantic |
| Data | PostgreSQL, RDS Proxy |
| Infrastructure | ECS Fargate, AWS Lambda, EventBridge Scheduler, SQS, S3 |
Architecture
A FastAPI application in front of PostgreSQL, split into five subsystems. The seam between them is the canonical fact store: the refresh pipeline writes to it on a schedule and the calculation engine reads from it on request, so ingestion can be slow and batched while resolution stays fast.
Refresh Infra
EventBridge triggers a Lambda dispatcher, which fans out one queue message per company and provider, and Fargate workers call the provider APIs and upsert results through RDS Proxy. The workers run on Fargate rather than Lambda because a call spanning several years of statements can exceed Lambda’s timeout.
Calculation Infra
Discovers the dependency subgraph for the requested metrics, picks a formula variant at each polymorphic node, and evaluates in topological order so each metric is computed exactly once. Lineage trees are built afterward, which is what makes every value inspectable down to its source.
Data Infra
Reads go through a narrow pair of components rather than query logic scattered across services. The query builder decides what to fetch and from where, and the executioner runs it against RDS.
Template Infra
A template is a JSON config holding the DCF framework, the required metrics, and the section layout. The assembler validates incoming templates and extracts the metric list the engine asks for.
Output and Export Infra
A structure provider maps the template to a sheet layout, a file builder fills in the values, and an uploader writes the artifact to S3 and records its key. Downloads are served through presigned URLs, so the bucket stays private and no file passes through the application.
Status
Tries is in active development at Polymic, where I work on the ingestion, template, and export infrastructure.
If you’re interested in our code, check out Tries repository! 🚀