Podcast Key Points: Complexity and Overcoming Blockers

Complexity

1w7qpw29ni6lnbex9gksl5y6d961.mp3

Key Points from the Continuous Delivery Podcast: Complexity

This episode explores complexity in software development from various angles.

What is complexity?

  • Difficulty in completion: Many dependencies, unreachable stakeholders, and external factors contribute to complexity.

  • Unpredictability: Inability to foresee how changes will impact the system.

  • Effort disproportionate to change: Simple changes requiring extensive coordination and effort.

  • Codebase intricacy: Difficulty understanding code structure, duplication, and fear of unintended consequences.

Causes of complexity:

  • Technical debt and legacy code: Messy, poorly architected codebases.

  • Overly complex frameworks: Using "one size fits all" solutions that introduce unnecessary dependencies.

  • Designing for unknown future: Building features for anticipated needs instead of focusing on current requirements.

  • Organizational structure: Conway's Law - system complexity mirrors organizational complexity. Poorly architected systems reflecting organizational changes.

Combating complexity:

  • Merciless refactoring: Continuously simplify code, keeping methods and classes small.

  • True DevOps adoption: Empowering developers to build automation and simplify workflows and environments.

  • Tight feedback loops: Short planning cycles with frequent feedback from product and end-users.

Identifying and tracking complexity:

  • Cyclomatic complexity, maintainability index, and other static code analysis tools.

  • Time to implement changes: Increasing time indicates growing complexity.

  • Throughput measurement: Low throughput can be a symptom of a complex system.

  • Number of code changes to fix a bug: Multiple changes for a single bug suggest a complex system.

Other important points:

  • Cynefin framework: A model for understanding and addressing complexity based on the nature of the problem.

  • Stacy complexity matrix: Applying the Cynefin framework to system design.

  • Complexity impacts the entire organization: From development teams to organizational structure.

Call to action:

  • Join the Continuous Delivery Podcast LinkedIn group.

  • Follow the podcast on Twitter: @continuouspod.


Overcoming Blockers

9514875-ep-62-overcoming-blockers-to-continuous-delivery.mp3

Key Points from Continuous Delivery Podcast: Overcoming Blockers

This episode discusses common obstacles to achieving Continuous Delivery and offers solutions:

Problems:

  • Penetration Testing as a Bottleneck: Expensive external pen-testing done in large batches slows down frequent deployments.

  • Bureaucracy in Tool Acquisition: Lengthy procurement processes for essential tools delay Continuous Delivery initiatives by months.

  • Fear and Perceived Lack of Freedom: Blame culture and the perception that individuals can't effect change stifle innovation and experimentation.

  • Outdated Policies: Rigid policies, like code freezes or mandatory handoffs, create waste and hinder agility.

  • Lack of Slack: Overbooked schedules and a lack of breathing room prevent teams from experimenting and improving processes.

Solutions:

  • Challenge Assumptions and Policies: Question the necessity of policies like blanket pen-testing for every change.

  • Focus on Education and Collaboration: Empower developers with security knowledge and work with operations teams to automate deployments.

  • Start Small with Experiments: Find a low-risk area to pilot new practices and build trust with stakeholders.

  • Iterative Improvement and Automation: Gradually automate processes and policies to reduce manual work and increase efficiency.

  • Leadership Buy-In and Evangelization: Secure leadership support to champion Continuous Delivery and overcome organizational resistance.

  • Build Trust Through Collaboration: Involve operations teams early in the development process and work together to create robust deployment practices.

  • Emphasize the Importance of Slack: Advocate for dedicated time to experiment, learn, and improve processes, ultimately paving the way for Continuous Delivery.

Overall Conclusion:

While technical challenges exist, the most significant roadblocks to Continuous Delivery are often rooted in organizational culture, outdated policies, and a lack of slack. Overcoming these obstacles requires a shift in mindset, open communication, and a commitment to continuous improvement.