Getting Off The Monorail

Moving to Service Orientated Architecture

Hello

Sasha Gerrand

Funding Circle
@sgerrand

Problems We Faced

One app

One app
Two app

One app
Two app
Three app

More

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

Internationalisation

  • 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

Logging

  • 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

Commonality

  • 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

Conclusions

Changing State Is Hard

Tests Are Your Expectations

Focus On Platform Performance

Questions?

Thank You

Sasha Gerrand

Funding Circle
 @sgerrand

Made with Slides.com