Delivering Superior Banking Experiences
How our customer-centric approach led us to Rust
In today’s digital age, customer expectations in the banking sector have never been higher. Every tap, swipe, or click must deliver a seamless, fast, and secure experience. At CIMB Niaga, we understand that our users’ trust is paramount — and that trust is built on technology that works flawlessly. The values of customer-centricity that we hold drive everything we do, especially when it comes to optimizing the systems behind our mobile and internet banking services, OCTO Mobile and OCTO Clicks.
Recently, our digital team undertook a significant initiative to migrate our critical microservices from Java to Rust, which is already paying dividends in speed and scalability. This wasn’t just a technical upgrade — it was a step towards ensuring our customers enjoy the best possible experience.
Putting Customers First in Every Decision
For us, customer-centricity means ensuring that every interaction with our digital services is smooth, secure, and reliable. As our user base grew and banking demands evolved, we saw performance limitations in some of our Java microservices. Latency issues and increased memory usage were beginning to affect user experience during payday periods, and we knew we needed a solution that would scale with our customers’ needs.
We had a clear goal:
Improve system performance while maintaining the trust our customers expect.
After careful evaluation, we determined that migrating our core microservices to Rust would give us the best opportunity to deliver on these objectives.
Why we chose Rust
When it comes to modern backend languages, both Rust and Go are well-regarded. However, for the high-performance requirements of our banking services, Rust emerged as the clear winner. Here’s our reasoning:
Memory safety without compromise
Rust’s standout and well-known feature is its memory safety model, which ensures that common bugs like NullPointerException and memory leaks are eliminated at compile time. This gives us confidence that our microservices are running error-free in production without the unpredictability of runtime issues.
In comparison, Go uses garbage collection to manage memory, which can introduce periodic pauses during service execution. Even the slightest delay in transaction processing can lead to a poor user experience in banking. Rust’s model allows for smoother, uninterrupted performance, directly translating to faster customer response times.
Performance that scales with our customers’ needs
Rust’s low-level control over system resources allows us to optimize our microservices for performance. This is particularly important for mobile and internet banking, where users expect instant access to their OCTO’s MyAccount page & details, free & fast online transfers, e-wallet & e-money top-ups, and real-time notifications. Rust’s ability to handle concurrent operations with minimal overhead ensures that our system can handle increased transaction volumes without slowing down.
Go is known for its ease of use and effective concurrency model through goroutines, but Rust gave us more control over fine-tuning the performance of our microservice. For an application where milliseconds matter like ours, we chose the precision of Rust to ensure our services remain fast, no matter the scale.
Our Migration Journey: A Seamless Transition for Customers
Migrating our core microservice is no small feat, especially when customer impact is a top priority. We knew that any downtime or disruption could affect the trust our users place in us. Therefore, we planned the migration meticulously to ensure zero disruption to customer services.
Phased rollout for zero downtime
Rather than a sudden switch, we adopted a phased rollout strategy, deploying the Rust microservice in parallel with its existing Java counterpart. This approach allowed us to monitor performance under real-world conditions closely, ensuring that the new service was not only faster but also more resilient under high loads.
Customer-focused testing
As we prepared for the full migration, our engineering team ran extensive tests designed to replicate actual customer behaviors — such as transferring funds during peak hours on payday periods or checking balances simultaneously across multiple accounts. The new Rust service passed every test with flying colors, delivering the improvements we aimed for without sacrificing the reliability and trust our users depend on.
Learning and growing together as a team
Migrating from Java to Rust also meant learning new tools and techniques. While many of our engineers were familiar with Java, Rust was a newer language for some. However, our commitment to customer-centricity makes learning part of our team culture — we provided knowledge sharing, hands-on training, and peer mentoring to ensure that every engineer was empowered to contribute to the migration’s success and speed up the learning process. Yes, we acknowledge that Rust has a steep learning curve.
The Results: A Faster, More Secure Banking Experience
Since migrating the microservice from Java to Rust, the performance improvements have been immediate and measurable:
- Faster start-up time: The Rust service has significantly reduced start-up time. Our internal authentication service’ startup time decreased from ~31.9 seconds in our Java service to less than 1 second in Rust service, which is 31 times faster, enabling us to scale up services quickly and handle unexpected surges in user demand more efficiently.
- Reduced CPU and Memory usage: Rust’s efficient use of system resources has led to lower CPU and memory usage. Utilization in our internal authentication service was reduced from 3 cores and 3.8 GB in Java service to 0.25 cores and 8 MB in Rust service, which is 12 times less CPU and 486 times more memory efficient. This optimization means our services run leaner, helping us support a more extensive user base while keeping operating costs low.
A Tech-Savvy Team Dedicated to Customer-Centric Solutions
At the heart of this migration is our digital team — a group of talented engineers and delivery managers who are passionate about delivering the best possible banking experience.
Dear team, keep innovating with the customer in mind, always looking for ways to improve service performance and reliability. Keep committed to building a platform that’s as responsive to our customers as it is to the evolving world of technology.
Looking Forward: Building for the Future
This migration is just the beginning. As we continue to scale and enhance our mobile and internet banking platforms, we’re confident that Rust will play a key role in helping us meet future challenges. With a customer-centric mindset, we’ll keep pushing the boundaries of what’s possible, ensuring that our users always enjoy the best that modern banking has to offer.
At CIMB Niaga, we’re committed to putting customers at the center of everything we do. By migrating our services to Rust, we’re building faster, more secure digital banking experiences that our users can rely on every day.
Join Us: Internships with Mentorship from Industry Leaders
Are you a student passionate about technology and interested in working on projects that make a real difference? CIMB Niaga is now looking for driven, enthusiastic students for our 1-year internship program. As an intern, you’ll gain hands-on experience, and you’ll be mentored by Solution Architects who are experts in creating reliable, scalable, and maintainable ecosystems. This is a unique opportunity to learn and grow within a forward-looking digital team, working on impactful projects that help shape the future of banking.
Our internship program is a chance to be part of a team that values innovation, creativity, and collaboration. Apply now to start your journey with CIMB Niaga and develop the skills that will set you apart in the tech industry.
Thank you
Thanks a lot, Pak Jeff, Pak Bob, and Bu Lusi, for your continuous support in everything we do to grow our OCTO Mobile and OCTO Clicks. Your leadership is reflected in every line of code we write and every solution we deliver to our customers.