What We See • Complex monolithic systems built over many years as a web of interdependent parts • Poor developer experience and productivity • Slow feature delivery and more bugs • Tactical treatment of symptoms (ex. latency) and not core problems (ex. design) • Technology-focused “horizontal” strategies
What We See • Old Application Logic - Poor Documentation • COBOL, PL/I, Assembler, JCL, Easytreve, IDMS, DB2, and the list goes on ... • Tightly Coupled and Brittle Architecture • Expensive Licensing and Maintenance • Rehosting and Batch Offload Approaches • Genuine Desire to Modernize … But How?!
We Apply Systems Thinking ● Taking a holistic view to identify and treat root cause problems, not just the painful symptoms ● It requires a shift of perspective, from ○ Parts to Whole ○ Objects to Relationship ○ Structures to Process ● We use agile methods, set measured objectives, experiment, learn and adapt approaches ● Systems Thinking requires System Modeling ○ Event Storming ○ BORIS Exercise ○ SnapE System thinking is a method of critical thinking by which one can analyze the relationship between the system’s parts to understand a situation for better decision-making.
Use 12 factor app principles to create cloud ready applications ● A set of best practices for developing and deploying cloud-native software. ● Practices translate into platform features and workflow requirements.
Our Approach is Enablement Focused We work on a fixed timeline and spin this wheel many times, using the techniques as necessary Event Storming Value Stream OKRs Discovery • Current state discovery • Cloud suitability assessment and education • Discuss timeline, staffing, risk, dependencies, etc. Ongoing Delivery Cycle • One-week iterations Scoping • Define OKRs We deliver working code via replatformed apps and modernized slices that prove patterns and inform strategy Boris Patterns Snap / SnapE Slice Analysis Product Backlog (Pivotal Tracker) Fixed Timeline Engagement Supported by a Paired Team • Hands-on code within 2-3 days • Working code used to inform a cookbook of patterns
Objectives and Key Results (OKRs) Are we going the right way? Ambitious Where to? Objectives Key Results AppTx # 70 - 80% decr ease % ase e r c n i +
Event Storming Bounded Context Slice candidate ! Payment Seats Aggregate Command Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Domain Event Aggregate Aggregate Command Domain Event Relevant Business Event “Policy Requested”, “Rating Determined” Aggregate Domain Event Domain Event ? Brains Accepts Actions / Generates “Events”
Boris Diagramming UI Service UI Service Ext Q Service Q Service Q Service Service Service based on Context “Policy Service” Ext Service Queue Message Queue “...Decisioned” UI External Link to External System
SNAPe API Rabbit MQ Data Source / Storage REST / JSON Purchase History Other CICS GW Stories UI AdminUI Risks Dependent On... GET GET /purchases GET /purchases /purchases
Case Study Bank B Bank A Kernel Bank C
Kernel Process TX request TX request IMS Shared Queue z13 1. One record for one bank balance 2. High Freq. update by every TX 3. Row locked when update z13 IMS Database Table for banks balance Tables for for TXTables records Tables for TX records Tables for TX records TX records
Issue Occurred - 1 TX request IMS Shared Queue z13 z13 IMS Database The row is locked for ensuring the balance >=0 Tables for for TXTables records Tables for TX records Tables for TX records TX records
Issue Occurred - 2 TX request IMS Shared Queue z13 z13 IMS Database Tables for Tables for TX records Tables for TX records Tables for TX records TX records
Issue Occurred - 3 TX request IMS Shared Queue z13 z13 IMS Database Tables for Tables for TX records Tables for TX records Tables for TX records TX records
Issue Occurred - 4 TX request IMS Shared Queue z13 z13 IMS Database Tables for Tables for TX records Tables for TX records Tables for TX records TX records
Event Souring Pattern Order Service Customer Service Order Service Event Store Order:3589
ID 3589 Status Total … OrderCreated OrderApproved OrderShipped
Simplified CQRS and DDD microservices Container Host Logical Ordering Microservices Container Queries & View Models Application Layer DB Command & Domain Models