← All case studies
Sales & CRM Platform

Sales CRMS

A modular sales CRM platform dependent on an external BC API where slow upstream responses significantly affected application performance and user experience.

Problem

The application depended heavily on an external BC API whose response times were often slow. Because critical application workflows depended on this external data, the overall system frequently experienced long loading times and frustrating user interactions.

Solution

I introduced a strategic caching layer rather than applying a single expiration time to every cache entry. Different datasets were assigned different TTLs based on how frequently their underlying data changed. I also implemented data prefetching so frequently required information could be retrieved ahead of time and stored in cache, reducing the need for users to wait for repeated external API requests.

Architecture

  • Modular architecture
  • External API integration layer
  • Strategic multi-TTL caching
  • Cache jitter through differentiated expiration times
  • Data prefetching
  • Cache-first application workflows
  • External service abstraction
LaravelPHPMySQLBC APICachingREST APIs

Challenges

  • Working around slow response times from an external dependency
  • Preventing the external API from becoming a bottleneck for every request
  • Choosing appropriate cache lifetimes for different datasets
  • Keeping cached data useful without unnecessarily serving stale information

Lessons

  • Caching is most effective when the strategy reflects the behavior of the underlying data
  • A single TTL is rarely appropriate for datasets with different freshness requirements
  • Prefetching can move expensive work away from the critical user request path
  • External dependencies should be isolated so their performance characteristics do not dictate the entire application's user experience