Getting Off The Monorail

Moving to Service Orientated Architecture


Sasha Gerrand

Funding Circle

Problems We Faced

One app

One app
Two app

One app
Two app
Three app


Growing Out Of Control

  • More features than tests
  • Interfaces being sidestepped
  • Exponentially increasing complexity
  • Invalid assumptions
  • Undocumented dependencies

Concurrent Development

  • Rapid changes in single source tree
  • Constant clobbering and rebasing
  • Inconsistent system design
  • Deviation between teams goals

Test Suite Slowdown

  • Integration tests masquerading as unit tests
  • Unit tests as the poor cousin
  • Testing the wrong things
  • Poor configuration bloating running time

Code Stagnation

  • Unused code paths not removed
  • Refactoring
  • Divergent implementations

Testing The Wrong Things

  • Using functional tests as integration tests
  • Too many integration tests
  • Hitting databases in unit tests
  • Testing static views instead of helper methods


  • More than just translation
  • More than just localisation
  • Opened US office (same language?)
  • Finance makes this harder

The Way Out

Adequate Test Coverage

  • Documentation for your software
  • Implicit contract for interfaces
  • Lets you know when things break
  • You really need this!

Functional Separation

  • Decouple software
  • Create logical functional groupings
  • Reduce scope of responsibility
  • Break separated groupings into applications
  • Enforce communication methods

Interface Contracts via APIs

  • Harder to sidestep
  • Design for external consumption
  • Everyone becomes a consumer
  • Doesn't have to be HTTP


  • Log everything
  • Levels should change per environment
  • Ensure it's discoverable
  • Must be centrally accessible
  • Cause and consequence can be observed

Repeatable Configuration

  • Recreate environments on demand
  • Invaluable for development and test
  • Enables scaling
  • Reduces scope to code

12 Factor Apps

  • Helped reduce manual processes
  • Reduced difference between environments
  • Solves many deployment related issues
  • Hard to implement everything right


  • Avoid recreating the wheel
  • Solve the hard problems once
  • Create services via configuration

Help New People Help

Some Different Approaches

JavaScript Client Apps

  • Faster page loads
  • Improved code re-use
  • Leverage browser capabilities
  • More 'native' experience

Native Mobile Apps

  • Offer functionality not available 'in-browser'
  • Still very popular on mobile devices
  • Provided quick wins for mobile users

Service-to-Service Clients

  • APIs heavily used by institutional investors
  • Planning to expand third party offering

Security, Security, Security

Authentication and Authorisation

  • Centralise user access out of apps
  • Consider different use cases
  • Reduce access to logical groups
  • Group roles into functional areas

Minimal Viable Caching

  • Cache as much as possible
  • Use pooled connections


Changing State Is Hard

Tests Are Your Expectations

Focus On Platform Performance


Thank You

Sasha Gerrand

Funding Circle