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
http://12factor.net
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
Resume presentation
Getting Off The Monorail Moving to Service Orientated Architecture
BESbswy
BESbswy