Why is it so special?

Learn how to make the construction of your software system effective and enjoyable

  • You will learn directly from Francesco, who will be your Mentor and Coach for three full days.
  • The Workshop is extremely hands-on, with 70% of it dedicated to Coding and Review Sessions. You will learn by working on the code.
  • The Workshop considers real cases - The exercises are taken from real system code collected by our Task Force or from the Anti-IF Campaign's Code Recruitment.
  • The Workshop deals with real-world software development issues: from parser development to exception handling, construction and configuration of complex objects.
  • You will learn new powerful decision making tools that will enable you to identify the next best steps to take, especially when faced with difficult design choices.
  • Within six months from the conclusion of the Workshop, you can perform a check-up.
Francesco Cirillo

Francesco is a software developer, product manager and industry consultant. He created the Pomodoro Technique and originated the Anti-IF Campaign. He currently runs Cirillo Company in Berlin. Waaaaaah!® Decision-Making Model, Recombining Relational Production® (RRP®), and Managing Software Development with RRP® are his most recent creation: the culmination of work started in 2008. Francesco will lead this Workshop.

    3 days


Participants will become aware of the process through which a continuous series of small programming decisions - such as the seemingly simple decision to put an IF - can achieve the emergence of effective design structures.

The objective of the Workshop isn’t to follow "this" or "that" particular practice, but to become more aware of why such practices are used in the first place.

Another objective of the Workshop is to learn techniques and criteria for self-observation in order to be able to direct your own independent improvement, allowing you to achieve ongoing progress.

Course Description:

The Anti-IF Workshop is an advanced emergent design training held over three full days that focuses on real-world software design issues and challenges. The Workshop is extremely hands-on and teaches participants concrete methods and tools.

  • Each workshop session focuses on different topics and cases. Therefor, even if you have already taken the Workshop, you can take it again and still be able to work on new cases and leran new topics, always with a focus on real-world issues.

Together with the participating teams and programmers, you will re-invent practices such as Refactoring, Testing, and TDD to understand how to grow software incrementally, maintaining maximum quality and deliverin the highest possible number of functionalities.

By the end of the Workshop you will be able to:
  • Get rid of bad IFs by learning to grow software in an emergent way - You will be able to distinguish dangerous IFs, those that can cause a system to degenerate into a Code Monster - from physiological IFs. You will also learn how to transform those dangerous IFs in good code in an emergent way by implementing new requirements.
  • See and recognize the flow of design dependencies and be able to organize them in a conscious way without fear and without rushing.
  • Identify effective solutions without running the risk of over design - A dangerous IF can be eliminated in many different ways. Not all of them are able to reduce complexity.
  • Learn to recognize patterns and combinations of patterns in an emergent way instead of imposing them.
  • Grow software incrementally while maintaining maximum quality and delivering the highest possible number of functionalities.
  • Direct your own independent improvement using self-observation techniques.

The Method:

Real Team: The Workshop is organized to simulate real work of a development team: feedback, ideas for discussion, and lots of functionality to be implemented.

Observation Stimulation: The Workshop focuses on strengthening your self-observation and self-assessment skills, which will enable you to better understand the choices you make when introducing the next statements into your system as well as make ongoing improvements in your overall approach.

Sharing: Participants will be working in different languages: Java, C#, Ruby. One of the objectives of the Workshop is to facilitate contamination, as such, you will work in pairs with someone who uses a language, and perhaps a different environment, from your own. This sharing of diverse perspectives promotes the emergence of creative and effective solutions and allows you to recognize and focus on design issues and find solutions in any language.

Observation Stimulation: The palpable sense of freedom in this Workshop will set you on the road to new ideas. Be prepared to give your feedback on the Coding Sessions in which you will participate. Be open to critical discussion with Francesco and the other participants on the pros and cons of every principle that will be addressed.


Every attendee will receive a Student Certificate which proves that he or she attended a specific edition of the Workshop.


The Workshop is aimed towards Experienced Programmers who want to be more effective and are able to question themselves in order to make improvements, as well as Junior Programmers who want to start their business on the right foot.


Participants should be fluent in the fundamental concepts of the Object-Oriented Paradigm in a language of their choice. Creating classes, subclasses, making associations, implementing Design Patterns, and understanding how to use the xUnit testing framework.

To participate in the Workshop, no other particular professional skills are needed. Participants will acquire skills during the Workshop.


Laptop - Participants will perform the Anti-IF Workshop coding sessions using their own laptops. So the first thing to remember is to bring your laptop :-).

Languages - The Anti-IF Workshop is open to Object-Oriented languages such as Java, C# and Ruby. It is up to each participant to choose their preferred development environment and operating system.

Setup - Install your preferred development environment. Install the appropriate xUnit Framework for the language that you will be using. We also suggest installing a plug-in or a library for refactoring and to collect product metrics, number of lines of code absolute/by class/by method, cyclometric index of complexity (for Eclipse users we suggest Metrics).


To get the most out of the Workshop, we recommend that participants review the main concepts of Object-Oriented and Design Principles. And even if you know them already, a thorough review of Design Patterns will surely be useful as well :-).

Suggested Reading Material:

  • "Implementation Patterns" by Kent Beck
  • "Apply UML and Patterns" by Craig Larman
  • "GOF Design Patterns"