Yandex Go has introduced a custom domain-specific language to manage the intricate logic behind calculating ride costs, replacing what would otherwise become an unmaintainable collection of conditional statements in the core service code.
Trip pricing at Yandex Go is far more complex than simple multiplication of distance and time. It incorporates geozones, real-time demand, discounts, toll roads, additional stops, and special requirements such as transporting a cat, bicycle, or skis. The same pricing engine is invoked not only when a ride is ordered but also when the route or payment method changes, when a trip ends, when support staff intervene, and when analysts verify data.
Pricing can be fixed, interval-based, or calculated by taximeter. To support this flexibility without constant redeployments, developers first gather parameters from multiple sources in parallel: tariff category, geozones, discounts, surge multipliers, and additional services. These dependencies form a graph executed asynchronously on userver, ensuring that failure of a non-critical source does not halt the entire calculation.
Previously the algorithm resided in C++, but because pricing rules change on average twice a week, frequent service updates became impractical. Redeploying the service across 50 pods takes approximately 40 minutes, and the growing set of dynamic configuration files would have turned the codebase into a museum of conditional statements.
Instead, Yandex created its own DSL featuring conditions, functions, immutable values, and fold operations in place of traditional loops. Rules are organized into sequential chains where each transformation receives the current price and parameters and returns a new result together with metadata. The language grammar is defined with ANTLR 4, and the Z3 theorem prover verifies that no program can generate an incorrect price.
As a result, changes to pricing logic no longer require service recompilation, erroneous versions can be rolled back instantly, and every calculation can be reproduced from input data and intermediate results. The pricing platform is already shared with Yandex Taxi, Delivery, and the electric-vehicle charging service.


