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