Production. It's where legacy code grinds into shiny new SOA, CQRS and event sourcing goodness. It's where new ideas must go. It's where failure is not an option and the stakes are high. Breaking it can seriously ruin the "Agile" thing you've been trying. It's all or nothing. On the other hand - maybe you could cheat. The talk presents a step-by-step approach for not getting caught with the proverbial pants down when rolling out new systems in legacy-heavy, dependency infested fragile environments. The emphasis is on practical examples for achieving the necessary separation of concerns, deployment automation and monitoring in small increments as part of day-to-day development work, in what constitutes reality for most dev teams: Not enough time for a large concerted effort to clean up code, automate and put tooling in place. Legacy code divide & conquer: Using Domain-Driven-Design techniques to delineate areas of responsibility and create "bubbles" of side-effect free functionality which can be deployed safely. "It's broken! Quick, switch it off...!" How to use business domain level feature toggles to deploy new functionality safely and gracefully degrade end user experience when services fail. Automated deploy, chainsaw edition: An example for getting from manual deploys to pushbutton automation in small (relatively) simple steps. Watch it like a hawk: How to move towards log aggregation, monitoring and alerting that radiates troubleshooting information and business metrics. Combined with domain toggles this can lead to a system that: 1. Detects malfunctions, 2. Switches off affected functionality in a controlled manner, 3. Alerts operators. |