Becoming a Resilient Coder
Complete Developer Podcast - En podcast af BJ Burns and Will Gant - Torsdage
Resilience is the ability or capacity to quickly recover from difficulties. Systems that are resilient have less risk, a lower cost of ownership, and the ability to build upon the system. The CAP theorem of Consistency, Availability, and Partition applies to resilience within the domain of distributed systems but is instructive in regards to any system. The seven principles of resilience used in this episode were gleaned from the Stockholm Resilience Centre’s guidelines for general-purpose resilience. The first three involve systems design while the final four focus around team and organizational structure. Episode Breakdown * 06:54 What is Resilience “The ability of a substance or object to spring back into shape; elasticity” Resilience is the capacity to quickly recover from difficulties or problems. The Stockholm Resilence Centre provides guidelines for building resilient systems. The first three principles are actual system designs with the latter being team and organizational structure. In essence, these will work for any chaotic system that needs to be managed. * 09:12 Why Systems Should Be Resilient Resilience lowers the cost of ownership in a system by reducing the risk. It creates the ability to build on top of the system. * 11:32 The CAP Theorem Applies to resilience within the domain of distributed systems and consists of three principles of which only two can be in effect at one time. * Consistency: Everything is up to date with the latest version at all times * Availability: A guarantee that every request receives a response. * Partition Tolerance: The system continues to operate despite network failure. * 14:23 7 Principles of Resilience * Maintain Diversity and Redundancy Gives partition tolerance, if a system fails in one area the failure does not cascade into another. * Manage Connectivity Well-connected systems can recover quickly, yet overly-connected systems fail quickly. * Manage Slow Variables and Feedbacks A slow variable is one whose influence does not scale linearly. With disk space going from a lot to enough will not noticeably change performance. However, going from enough to not enough degrades performance rapidly. * Foster Complex Adaptive Systems Thinking Give up the illusion of perfect control, meaning let things go to a certain level. This is more an attitude than a systems design. * Encourage Learning Another attitude over system design, systems will have to be adjusted from time to time. * Broaden Participation Get stakeholders more deeply involved in the project to eliminate surprises, whether by error, unknown requirements, or political maneuvering. * Promote Polycentric Governance Also known as multi-level or multi-party governance. It is an organizational structure where multiple participants order their structure based on a general set of rules. In software design polycentricity reduces risks when scaling applications and systems. IoTease: March is for Makers March is for Makers is a movement started by Saron Yitbarek of Code Newbie and Scott Hanselman of HanselMinutes for their respective podcasts. All month long they will be interviewing makers and discussing hardware. Though not officially part of the movement to show our support we are dedicating IoTease this month to fun family projects that can be done each week.