Blogs›Grab Feature Trails
See how major capabilities shipped, upgraded, and evolved across Grab's engineering blog.
Publishing pulse
2026–2026 · peak 2026
12 posts mapped

This post details the development of Grab Bench, a configurable evaluation harness for AI systems on Grab-shaped production work. It addresses the challenge of evaluating AI models beyond superficial correctness by focusing on metric faithfulness, tool-parameter discipline, evidence grounding, and safety boundaries. Grab Bench uses task plugins to run models through specific scenarios, records row-level failures, and employs deterministic scorers or LLM judges. Design choices emphasize making cases safe with synthetic data, scoring contracts over confidence, and making shortcuts visible. The system includes teaching artifacts for learning and certification artifacts for generalization testing, with gates to ensure reproducibility and catch regressions. Future work aims to evaluate pipelines and make packages more reusable.
Timeline

This post details the development of a custom Focus plugin for Android Studio to significantly reduce IDE sync times in Grab's large Android monorepo. The plugin leverages a pre-computed dependency graph from the Gradle-to-Bazel migration workflow to enable selective module syncing, drastically improving developer productivity by minimizing IDE bottlenecks. It also includes an Android Studio plugin for a seamless user experience, offering module selection, dependency count visibility, and automatic argument injection.
Timeline

This post details the migration of Grab's Counter Service storage from a wide-column database to Aerospike. It covers the redesign of the data model to a map-based schema for improved efficiency, the implementation of a phased rollout strategy with dual-writing and shadow reads for safe cutover, and the separation of the data access layer to decouple business logic from storage concerns. The migration resulted in significant reductions in record count and storage footprint.
Timeline

Grab has adopted Apache Iceberg as the foundational table format for its data lake, migrating from Hive Parquet. This transition addresses challenges with catalog latency, the small file problem, operational toil, and data consistency. The adoption has led to significant improvements in query performance (e.g., 10x reduction in runtime via Z-ordering), reduced S3 API costs (up to 95%), and compute savings. A key component of this migration is the open-sourced UnifiedSparkCatalog, which provides a unified interface for data lake operations. The Hugo platform has been re-engineered with Apache Flink to provide a unified, one-click data ingestion platform, supporting both MySQL CDC and Kafka streams directly into the data lake, significantly reducing onboarding time and operational overhead.
Timeline

Grab is systematically migrating services to Distroless images to enhance security by reducing the attack surface. This involves a rigorous testing strategy to mitigate runtime failures caused by missing dependencies. An AI-powered agent has been developed to automate the scaffolding of medium tests for services lacking them, and to manage the Distroless image patching and verification loop. This automation significantly accelerates the adoption process and ensures the reliability of migrated services.
Timeline

This post introduces a feedback-driven framework for verifying and refining knowledge graph relationships. It operationalizes the search interface as a validation environment by injecting unverified candidate edges into search suggestions and measuring user engagement. The system tracks user micro-interactions, aggregates signals, and uses a scoring model to promote or prune graph edges, ensuring the accuracy and integrity of the knowledge graph in dynamic domains.
Timeline

This post introduces Shadow Testing as a new capability to enhance the reliability of Flink deployments. It describes the architecture and deployment flow, enabling new Flink versions to be tested in parallel with the main version without impacting production traffic. This is achieved by replicating production data to the shadow version and comparing its behavior to the main version, allowing for early detection of issues and elimination of downtime during deployment failures. The implementation involves runtime differentiation using environment variables and distinct job IDs, directing results to isolated sinks, and dynamically configuring connectors (Kafka, CDC, S3, StatsD, Logs) to prevent interference with the main application.
Timeline