DESIGN CASE STUDY

Trading made faster on Groww 🏎

Team: F&O Experience Pod

Role: Product Designer (end-to-end design)

Timeline: 4 weeks from conceptualization to shipping

Impact: Order placement time reduced from 2400ms to 1350ms (45% decrease)

Speed perception is about how fast users feel the app experience is. In trading, experience must be fast, as prices change every millisecond.

I gained valuable knowledge about interaction design and prototyping through this project.

How it started

We trade in the office every Thursday from 9:15 am to 11:00 am. During one session, there was a sudden positive market movement.

Several team members tried to place orders, and I noticed the sheer number of steps involved. If the order placement time is reduced, traders can secure better prices and increase profits.

Reviewing NPS comments, we found that Groww is perceived as slower compared to other apps.

Slowness causes frustation

Reviewing NPS comments, we found that Groww is perceived as slower compared to other apps.

Imagine your positions are in losses, and you want to exit quickly. You open the order card and start placing exit orders.

By the time you place multiple orders, the market moves further against you, increasing your losses. This will be frustrating, you incurred more losses.

01 - Problem

Too many clicks!

Order placement involves numerous steps: placing, modifying, and navigating. Each order shows a success screen, which becomes redundant after 5-6 orders (our users average 22 orders daily).

02 - Problem

We show loaders on every action user takes

Our order placement time averaged 2400ms, while competitors achieved 700-900ms.

We wait for page status before advancing users to the next step, forcing them to see loading screens at each stage.

03 - Problem

Finally, we need to fix broken transitions.

Overlapping transitions caused jerkiness and additional lag during order placement.

Since users repeat these flows 15-20 times daily, it significantly increased their cognitive load.

Reduce latency in orders

Reduce number of steps

Make trading faster on Groww 🏁

Solve navigation for a trader

Fix transitions to reduce jerks

01 - Step

Focus on order placing (V1)

We prioritized optimizing the core order placement flow, as users frequently execute this time-sensitive step.

While navigation and redundant steps also affect speed, our primary focus is on position entry and exit efficiency.

02 - Step

Remove success screen

While success screens benefit first-time users, they're redundant for regular traders. In F&O trading, time is crucial, and eliminating this screen saves 1200ms of rendering and status update time.

However, we must address that 4% of F&O orders fail and 0.5% can remain pending.

03 - Step - Solutions

Create speed perception

Users need instant feedback on their actions. Rather than making them wait with loaders, we now advance users in the flow immediately after action, then load status updates.

We've implemented:

  • Skeleton loaders

  • Progressive loading with data caching

  • Haptic feedback Our current p95 from buy click to order execution is 1350ms, which we must factor into the experience.

Peek into other explorations

Opening the order card

Currently, when users close bottom sheets, the scrim is removed before proceeding to their chosen action. Each transition adds delay.

Since most users open bottom drawers to place orders, we're scaling it to the order card itself, eliminating three steps.

Giving feedback

Post-order flow:

  • Market orders → Positions tab

  • Limit orders → Orders tab

  • Bottom-aligned snackbar confirms the last action

  • Snackbar dismisses via fling or auto-dismisses after 4 seconds

  • Easy access to order details if failures occur

Order is stuck in pending state

Order failed

Handling stacking

Early market hours present a unique challenge: users place multiple AMOs at 8:30 AM that execute together when markets open at 9:15 AM.

Instead of following Material UI's sequential snackbar display, we modified transitions to show multiple order executions simultaneously, eliminating unnecessary delays.

Use cases & configurations

Since this was a new addition to our design system, I documented its anatomy and guidelines thoroughly.

While perfect for confirming quick actions like price alerts and watchlist updates, we kept it strictly utility-focused - no promotions or cross-selling allowed.

Dark mode

Alerts (Future use case)

Fling to dismiss + Auto dismiss (4 sec)

Transitions

In designing our transition system, we paid careful attention to movement details. Objects entering the screen use cubic ease-out transitions - appearing quickly, then gracefully slowing down.

For exits, we chose cubic ease-in transitions for swift departures. Color and opacity changes remain linear and quick (100ms), while snackbars get 200ms and screen transitions take 300ms to feel natural.

Basket Order & Multi orders

We also thought ahead to Groww's power users, particularly option sellers and strategy traders who use basket orders to place up to 20 trades simultaneously.

While bulk order development is scheduled for later, we designed our framework to be future-ready.

This foresight helped our developers build a scalable architecture from the start.

Current experience of Basket Order on Groww

Basket order

The beauty of our solution? Whether it's one order or twenty, they're processed in parallel - keeping execution time consistent.

We've mapped out all scenarios: partial fills, failed orders, and mixed outcomes.

Failed orders get special attention, as traders need quick visibility into what went wrong so they can act fast.

Scaling the new framework to Basket orders and multi-order exp

Some orders are still open

Some orders failed

Some orders failed, some are open some executed

Results 💪

Streamlining the trading flow from 12 steps to just 6, we dramatically improved speed. Orders that once took 2400ms now execute in just 1350ms - giving traders the 45% speed boost.

Experience before

3 clicks → 12 transitions (2500ms)

⚡️ Experience now ⚡️

2 clicks → 6 transitions (1350ms)

Fin ✌️