The Diamond Kata

Anti-IF Workshop

Live Online with Francesco Cirillo
October 16 - 17, 2024
Wednesday to Thursday
08:30 AM EST - 12:00 PM EST (New York)
02:30 PM CEST - 06:00 PM CEST (Berlin)
04:30 PM GST - 08:00 PM GST (Dubai)
2 Days | 7 Hours Total | 3.5 Hours per Day

Register $199.00

The Challenge

  • Have you ever tried to solve the Diamond Kata? Have you ever read how Software Design Gurus solve this kata ( Seb Rose, Alistair Cockburn , Jon Jagger, Ron Jeffries 01, and 02, George Dinwiddie, Emily Bache, Nat Price and Matteo Vaccari)?
  • How is it possible that Test-Driven Development (TDD) can generate highly 'compressed,' rigid, and often unreadable solutions with if statements and for loops manipulating characters that only work under very specific conditions and difficult to grow in any direction?
  • Do you believe, as Alistair Cockburn suggests, that it is difficult or not possible to achieve a well-designed solution to draw a diamond by making small steps in TDD and that instead "sometimes" you should think ahead?
    A
   B B
  C   C
 D     D
  C   C
   B B
    A              

The Solution

Francesco is not a fan of katas—and he will explain why in the workshop—but in this session, he will explain his approach to the Diamond Kata using TDD to deliver a well-designed solution in emergent design (#NoThinkingAheadRequired) and, of course, not applying the IF Strategy (#NoIFStrategyRequired). Francesco will approach the Diamond Kata as if it were a real-world application, not a simple, non-evolution-oriented exercise.

The workshop will unfold with sessions where Francesco alternates between explaining concepts and practical principles, and demonstrating incremental steps using code and slides. There will also be interactive sessions where participants will join in the development process, starting from a specific point in the evolution of the Diamond Kata.

Participants will witness the transformation of abstractions into an adaptive solution through incremental TDD and Anti-IF practices. By emphasizing small, manageable steps, this workshop will show how to avoid the pitfalls of over-engineering and rigid code structures, ultimately leading to a robust and adaptable design.

In this workshop, we will also discuss topics such as how to improve design skills and TDD practices.

Program

Day 1: Foundations of TDD and Initial Steps

Duration: 3.5 Hours

Module 1: Introduction to TDD and the Diamond Kata (1 hour)

  • Overview of Test-Driven Development
  • Introduction to the Diamond Kata problem
  • Exploring the benefits and challenges of TDD

Module 2: Setting Up the Environment (30 minutes)

  • Tools and software setup
  • Configuration of development environment specific to TDD

Module 3: First Steps in TDD (2 hours)

  • Where to start
  • Writing the first test
  • Implementing the simplest solution to pass the first test
  • Adding a second test
  • Looking for diamonds

Day 2: Mastering the Diamond Kata in TDD

Duration: 3.5 Hours

Module 4: Delivering the First Diamond (1 hours)

  • Explaining the steps: Understanding the process to deliver the first "diamond"
  • Live development of a difficult step
  • Reflecting on the principles guiding the development and the decisions made

Module 5: Adding Value to Our Diamond (30 minutes)

  • Explaining the steps: Finding new abstractions
  • Refining the diamond: Advanced refactoring techniques
  • Reviewing and discussing different approaches and solutions

Module 6: Delivering a Valuable Diamond (30 minutes)

  • Explaining the steps: Adding value by reducing complexity
  • Live development of a difficult step
  • eflection on value: Discussing how to keep complexity low throughout the development process

Module 7: Etudes (30 minutes)

  • Can we make the Diamond Move?
  • Can we draw other shapes?
  • Reflection on principles and decisions: Why is this kata not simple?
  • Final thoughts: Wrapping up with key takeaways and advanced techniques

Q&A and Wrap-Up (30 minutes)

  • Open forum for participant questions
  • Review of key takeaways from both days
  • Guidance on further resources and continued learning in TDD
  • Recap of the workshop

Key Takeaways

  • Master Anti-IF Techniques: Learn how to replace the IF Strategy and create more readable and maintainable code.
  • Step-by-Step TDD: Understand how to approach problem-solving in small, incremental steps using Test-Driven Development Francesco's way.
  • Enhanced Design Skills: Gain insights into improving your software design skills through practical application of Anti-IF practices.
  • Avoiding Over-Engineering: Discover how to avoid the common trap of over-engineering solutions and instead create flexible, adaptable designs.
  • Real-World Application: See how these techniques can be applied to real-world coding challenges, making your everyday development practices more efficient and effective.

Additional Details

  • Recording Access: Participants will have access to the session recording for 30 days post-workshop.
  • Student Discounts: Students studying software architecture, computer science, or software engineering can email us for a chance to receive a voucher for a full discount on the workshop fee.
  • Limited Spaces: Secure your spot today and start transforming the way you develop software!

Join us for this engaging workshop and transform the way you approach coding challenges with Francesco's expert guidance and innovative techniques!

Register $199.00

Anti-IF Diamond Workshop

Direct Interaction

Francesco will personally answer your questions, offering detailed explanations and tailored support.

Access to Recording

Receive access to the workshop recording for one month, allowing you to review the content at your convenience.

Platform: Zoom

Conducted on Zoom, ensuring easy access from anywhere and effective, interactive participation.

Certificate of Participation

Obtain a certificate at the end of the workshop, validating your participation and the skills acquired. Enroll today to transform your understanding of TDD and elevate your programming skills!

Register $199.00

Related Products

Anti-IF Diamond Explained Ebook

Enhance your workshop experience with a commented copy of the slides, personally annotated by Francesco. Gain deeper insights and behind-the-scenes perspectives to complement your learning. (Note: This resource is sold separately and is not included in the workshop.)

Available from October 7, 2024

Anti-IF Diamond Diagrams Ebook

Visual learners will appreciate this diagrams-rich ebook that complements the textual explanations with clear, informative visuals. Enhance your understanding of complex concepts through engaging diagrams. (Note: This ebook is sold separately and is not included in the workshop.)

Available from October 7, 2024

Anti-IF Diamond Video Course

Prefer learning at your own pace? Our streaming video course covers similar topics to the workshop but allows you to revisit the content anytime. (Note: Access to this video course is sold separately and is not included in the workshop.)

Available from October 7, 2024

GitHub Repository with Source Code

Implement what you've learned by accessing all the source code used in our workshop and courses. Explore, modify, and test the code at your own pace. (Note: GitHub repository access is sold separately and is not included in the workshop.)

Available from October 7, 2024

Upcoming Events

Topics for Discussion

UNDERSTANDING OBJECTS AND POLYMORPHISM

By using polymorphism, you can avoid multiple if or switch statements and instead rely on overridden methods to achieve the same logic.

USE DESIGN PATTERNS

Design patterns, like State, Strategy, and Command patterns, can help encapsulate variations in behavior, thereby reducing the need for conditional logic.

KEEP METHODS/PURPOSE SMALL

Methods should ideally have a single responsibility. When methods start having multiple responsibilities, it increases the likelihood of numerous if statements.

CONFIGURATION OVER CONDITIONALS

Sometimes, system behavior can be controlled using configurations of objects rather than hard-coded if statements.

USE TABLE-DRIVE METHODS AND LAMBDA FUNCTIONS

Leverage data structures and higher-order functions to streamline decisions, making code more flexible and easier to modify without numerous conditionals.

RULE ENGINES

For very complex decision-making logic, rule engines might be a better fit than having layers of nested if conditions.

REACTIVE PROGRAMMING

Harness the power of data flows and change propagation. Reactive programming allows for dynamic reactions to data changes, reducing the need for explicit conditional flow controls.

Benefits

Enhanced Readability

Minimize reliance on conditionals, making code clearer and easier to understand.

Robust Design

Master patterns and techniques that result in sturdier and more maintainable software architectures.

Agile Structures

Learn to create code structures that are easily adaptable and configurable without rewriting core logic.

Practical Application

Engage in real-world examples and exercises, ensuring you can apply what you've learned immediately.

Continuous Learning

Gain post-workshop access to resources and an online community for further questions and continuous growth.


Who Is It For?

If you've ever found yourself saying "it can't be done" in response to a request for change, or if you've reacted with "why didn't they tell us earlier?" If you're a CTO who believes your software is in good health, yet you find yourself asking your clients to limit their requests for new features... perhaps you should have signed up earlier... but maybe there's still time.

Anti-IF Diploma

No, you will not receive a diploma for merely participating in this workshop. Why? Because you haven't yet demonstrated your ability to transcend the IF Strategy with a more effective approach. We challenge you: send us an article detailing how you eliminated a problematic "if" from your codebase, a move that spared you an entire weekend of additional work. Or better, show us how you built your feature without using the IF Strategy and favored the immediate delivery of an unpredictable change request. Achieve this, and you will ascend to the esteemed rank of Conditional Commander. Join the Ranks.

Anti-IF Editions

So far, we have planned 3 editions of the Anti-IF Workshop. The first edition will take place in May, followed by the second in July, and the third in October. Each edition is uniquely designed around a set of challenging software features to be developed. This offers participants a live opportunity to interact with Francesco and immerse themselves in solving real-world software design challenges.

Digital Course

For those unable to attend the live workshops, there's an alternative way to benefit from Francesco's expertise. We offer a digital course option, where you can purchase video courses related to each workshop edition. In these courses, Francesco meticulously demonstrates how he approached and solved each design challenge, providing valuable insights and techniques that you can apply to your own software development projects.

TRAINER

...

Francesco Cirillo

Francesco’s journey in software spans over 30 years, influencing startups, corporates, and individual consultants.

A seasoned mentor, he has impacted countless professionals and teams. From his early days with Sun Microsystems to pioneering Agile Methods and creating XPLabs, Francesco's mark on the software industry is profound.

Notably, he's the creator of the groundbreaking Pomodoro Technique, a time management method embraced worldwide, as well as the visionary behind the Anti-IF Programming philosophy, challenging conventional coding practices.

Testimonials

Carlo Garatti

"If your question is about how to write valuable software, this program is for you!! Through one-on-one lessons with Francesco you will learn how to fit the right techniques and tools in the exact phases of the software development cycle. You will fix and apply these ideas in real cases. And, last but not least, in an enjoyable way!"

Alessandro Ruzzon

"What did I like the most? In this workshop the theory part matches up with the practical part. You don't only hear WHAT TO DO but also HOW TO DO IT, and you start practicing it right away in the labs! That's really what the Workshop is about: real-life practice aimed at consolidating theoretical notions. This approach helps in understanding problems"

Break the Chains of Conditionals!

Faq

Originated by Francesco Cirillo in 2007, the Anti-IF Programming approach has transformed how many perceive IFs and conditionals in software design. At the heart of software design lies a simple yet potentially dangerous tool: the conditional 'IF' statement. Undeniably foundational, its use to handle changes in a growth context, dubbed the "IF Strategy", can be a silent saboteur, complicating code and tangling logic. The IF Strategy can lead to debugging problems, never-delivered user stories, technical debt, entangled design, frictions in the team and other inefficiencies. In essence, the IF Strategy can escalate costs and delay software delivery times while degrading internal quality.

While some familiarity with programming concepts is beneficial, the workshop is designed to be comprehensive. If you're keen to learn, this workshop will provide valuable insights into advanced programming techniques.

Yes, all attendees will receive a digital booklet covering workshop content, sample code, exercises, and further reading recommendations.

Absolutely! The workshop emphasizes practical application, and there will be several exercises throughout the day to reinforce learning.

While the examples might be in a specific language, the principles of Anti-IF programming are universal and can be adapted to most modern programming languages.

We encourage continuous learning! You'll have access to an online forum for one month post-workshop where you can ask questions and interact with fellow attendees and the instructor.

Questions