Talks
Speakers
Events
Topics
Contribute
Search
Sign in
Search
Home
Talks
Speakers
Events
Topics
Contribute
Leaderboard
Use
Analytics
Sign in
search talks for
⏎
Suggest modification to this talk
Title
Description
A Brewer's Guide to Filtering out Complexity and Churn by Alan Ridlehoover and Fito von Zastrow Mechanical coffee machines are amazing! You drop in a coin, listen for the clink, make a selection, and the machine springs to life, hissing, clicking, and whirring. Then the complex mechanical ballet ends, splashing that glorious, aromatic liquid into the cup. Ah! C’est magnifique! There’s just one problem. Our customers also want soup! And, our machine is not extensible. So, we have a choice: we can add to the complexity of our machine by jamming in a new dispenser with each new request; or, we can pause to make our machine more extensible before development slows to a halt.
Date
Slides URL
For optimal experience, please provide the URL of the slides. Speakerdeck.com is recommended as it allows us to embed the slides with a player on the site.
Summarized using AI?
If this talk's summary was generated by AI, please check this box. A "Summarized using AI" badge will be displayed in the summary tab to indicate that the summary was generated using AI.
Show "Summarized using AI" badge on summary page
Summary
Markdown supported
The video, titled "A Brewer's Guide to Filtering out Complexity and Churn," features Alan Ridlehoover and Fito von Zastrow discussing strategies for managing complexity in software development, particularly in Ruby applications. Using the metaphor of a mechanical coffee machine, they illustrate how complexity can accumulate in codebases and how developers can effectively manage and reduce it. ### Key Points: - **Complexity in Software Development:** - Complexity sneaks into applications one commit at a time. - Recognizing early signs of complexity can prevent development slowdowns. - **Understanding Code Complexity:** - There are thresholds that dictate when complexity becomes problematic. - Tools like the ABC (Assignments, Branches, and Conditionals) metric help measure complexity and guide refactoring. - Recommended practices include keeping methods short (ideally under five lines) and monitoring how complexity changes over time. - **Case Study – The Coffee Machine:** - The presentation uses a fictional coffee machine codebase to demonstrate how complexity accumulates. Features such as adding tea, sweeteners, and whipped cream introduce conditionals that complicate the code. - By the seventh commit, the code is over-complicated, with numerous conditionals impacting readability and ease of modification. - **Refactoring Strategies:** - When complexity reaches a critical point, the authors advocate for "rehydration"—reintroducing duplication to identify missing abstractions, followed by organizing these abstractions into polymorphic classes to simplify the code. - Implementing a factory pattern streamlines how new beverages are introduced to the coffee machine, making the system extensible without complicating existing functionality. - **Churn vs. Complexity:** - Analyzing both churn (how often code changes) and complexity helps identify areas in the codebase requiring attention. Tools that visualize these metrics can guide developers on where to focus their efforts for improved maintainability. ### Conclusions and Takeaways: - **Prevent Complexity:** Understand that complexity builds up due to incremental changes. Regularly reflect on and evaluate your code to manage this complexity. - **Utilize Tools:** Leverage Ruby tools such as flog to assess method complexity and help prioritize refactoring efforts. - **Continuous Improvement:** When changing a file, aim to simplify and improve it incrementally rather than avoiding complex files altogether. - **Best Practices:** Keep methods manageable, avoid excessive conditionals, and always ensure comprehensive test coverage before making changes. The session is packed with practical advice and hands-on methodologies for Ruby developers looking to manage code complexity effectively while keeping their applications maintainable and extensible.
Suggest modifications
Cancel