Cognite PowerOps, HydroPower Bidding Platform

I spent about 14 months working at Cognite A/S on PowerOps, their platform for automating electricity market bidding for Norwegian hydropower operators. Production customers include Hafslund Eco and Lyse Energi.

The core of PowerOps is a bid processing pipeline. When new price scenarios arrive, the system triggers a chain of serverless functions that dispatch parallel solver runs (one per price scenario permutation), collect the results into partial bid matrices per plant, then aggregate everything into a final total bid matrix for market submission. This runs daily, hundreds of executions, fully automated.

The pipeline is orchestrated through CDF Workflows with dynamic parallelism. A dispatcher function analyzes the configuration at runtime and generates variable-length task lists. The workflow engine expands these into parallel function executions. This means the number of parallel runs scales with configuration, not code. Three workflow definitions cover the full bid lifecycle including benchmarking different bid methods against historical data.

12 serverless Python functions in total, each idempotent with status tracking via CDF Event metadata. Error handling is designed for graceful degradation: if all solver runs fail, the system creates an alert instead of crashing. If some bid matrices fail, it marks them with alerts and continues. Timeout stratification across stages: 5 minutes for dispatch, 60 minutes for simulation, 15 minutes for aggregation.

My biggest single contribution was the FDM Migration: leading the refactoring of the preprocessor from legacy data models to Cognite’s Flexible Data Model. This meant rewriting the data reader layer, function input/output handling, and removing all v1 transformation support. Other major work included building the integration test infrastructure with approval client mocking and YAML-based fixtures, consolidating the preprocessor from a separate repo into the monorepo, and refactoring the bid matrix calculation pipeline.

I also contributed across the broader PowerOps ecosystem: the Python SDK, a GraphQL code generation tool, the solver wrapper library, and the FDM schema definitions for the PowerOps domain.