Anti-IF Workshop

"In my daily work as a software developer, deadlines are more and more demanding. In order to deliver on time the changes requested by my customer, I often apply the 'IF Strategy.'

By doing this, I increase the complexity of my software system, I create duplications and accumulate technical debt. Therefore, the next functionalities to be developed cost more and more. Changes take an unpredictable amount of time to be made (the so-called 'never ending stories') or sometimes even become impossible to be delivered. My work becomes a nightmare 'One IF at a Time.' I create Code Monsters 'One IF at a Time.'"

This Challenge is available in the following formats:

Video Course Basic - Access to all video modules, final source code and updates €45.00/month
or €450.00/year
Video Course Premium - Everything in the Basic Subscription, plus: full source code for each module, private Discord Community and detailed programming screenshots. €75.00/month
Coaching Private Guided Tour - Only for the Premium Subscription: 2 hours of 1-on-1 coaching with Francesco monthly: get direct feedback or discuss your design solutions. €300.00 Soon
Live Online Course 4 x 2-hour sessions (max 8 participants) €650.00 Buy

* Price excludes VAT

Nicole Lemke

Software Manager, 4flow AG

If you not only want to know what “Object-Oriented Programming” means, but are also interested in its origins and what it can achieve, start here, at the very beginning. Let Francesco take you on a journey. Learn about the essence of good objects and write good stories that those objects can tell.

Carlo Garatti

Software Engineer, Oracle

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!

About this Workshop

In order to reach this goal, you have to develop your software design skills. You need to learn how to replace the "IF Strategy" with more effective design strategies that will enable you to reduce the complexity of your software system and deliver new functionalities on time and in a sustainable way.

Course Info

Live: 4x2 hour sessions (max 8 participants) over two weeks.
Video: 30 breakdown sessions for a total of 8 hours.


Delivery Options
Live online, onsite, in-house, recorded video.

Francesco Cirillo


This Course is ideal for Software Developers and Technical Coaches.


No previous knowledge is needed. Much passion is required!

It is strongly recommended to watch the video Three Bowling Kata Solutions"


Are you interested in asking questions, clarify specific aspects of the Challenge, or share your solution? The Bowling Kata Community is the place for you.


This Certificate is delivered to all the participants who have attended the four sessions of the online course.


I am a Software Developer and this is my goal:

  • I want to stop applying the "IF Strategy" (=IF (new condition) { new code}] to deal with new requests!
  • I want to stop debugging my code in an intricate forest of nested IFs
  • I want to be able to reduce the complexity of my software system every time I develop a customer request.
  • I want my code to be understandable at first glance to me and to all my team members.

The Story Behind this Workshop

What is the "IF Strategy"?

The "IF Strategy" is a way of dealing with growth, change and complexity in software development.

Whenever we need to deal with a change in the behaviour of our software system, we CAN do it by introducing an IF statement (the "Let's Put an IF Syndrome") :

IF ( new condition ) { new code }

Why do developers apply it?

Because it is simple:

  • Put an IF
  • Add a condition
  • Add the related behaviour

Done! The problem seems to be solved forever.

But... What does really happen to your software system over time?

Of course, by consistently applying the "IF Strategy" the structural complexity of your system will grow over time. One IF at a time, you will make your system more complex to be read, tested, even debugged. It will become "easier" to duplicate code. Inevitably, you will end up accumulating technical debt all the time.

	calculateWageFor(Person aPerson) {
IF=>	IF(aPerson.type == Person.EMPLOYEE) {
			ordinaryHourlyWage = 15;
			overtimeHourlyWage = 20;
IF=>		IF(aPerson.status == Person.PARENTALLEAVE) {
				ordinaryHourlyWage= ordinaryHourlyWage * .70; // 70%
IF=>			IF(aPerson.daysOffLeft() > 10) {
					ordinaryHourlyWage = ordinaryHourlyWage * 0.9; // 90%
			salary = aPerson.ordinaryWorkHours * 
					 ordinaryHourlyWage +	
					 aPerson.overtimeWorkHours * 
IF=>	IF(person.type == Person.MANAGER) {
			fixedWage = 3000;
			monthlyBonus = lastYearsProfit  * .10 / 12; // 10% monthly
IF=>		IF(aPerson.status == Person.PARENTALLEAVE) {
				monthlyBonus= monthlyBonus * .60; // 70%
IF=>			IF(aPerson.daysOffLeft() > 10) {
					fixedWage = fixedWage * 1; // 90%
                    monthlyBonus= monthlyBonus * 1; // 70%
			salary =  fixedWage + monthlyBonus; 
IF=>	IF(person.type == Person.CONSULTANT) {
			dailyFee = 300;
			workHours = aPerson.workHours();
			realDays = workHours / 7;
			salary = realDays * dailyFee;
		return salary;


Interested in the Anti-IF Campaign? You can join the Campaign here.

Defusing the "IF Strategy"

By replacing the "IF Strategy" with more effective evolutionary design techniques you can break the vicious circle that starts every time you receive a new customer request:

=> 1. new IF(s) => 
=> 2. more complexity (=less readable and testable code, system hinders change) => 
=> 3. more technical debt =>

By defusing the "IF Strategy," you will be able to reduce the complexity of your software system over time.

It will be easier to define a "no-shortcut" design strategy to be applied even under strict deadlines and deliver your customer requests on time without accumulating technical debt.

To defuse the "IF Strategy," you have to learn to deal with two dIfferent aspects:

Technical Aspect - You have to learn how to replace the "IF Strategy" with other evolutionary design techniques that will enable you to grow a software product capable of "embracing change." This means that you need to develop your skills to:

  • Distinguish dangerous IFs from physiological IFs. Dangerous IFs are those that you use when you apply the "IF Strategy" in an evolutionary context. These IFs make a system degenerate into a Code Monster!
  • Get rid of bad IFs. You also have to know how to transform those dangerous IFs into healthy design structures and modules able to reduce the complexity of your software system.
  • Visualize the design dependencies implied in your software system and be able to organize them in a conscious way, confidently and without rush.
  • 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 the complexity of your software system.
  • Grow software incrementally maintaining maximum quality and delivering the highest possible number of functionalities.
  • Use Objects and Patterns in an incremental way to flatten the cost of change curve.
  • Monitor the cost of change related to your software product in order to measure if your design solutions are really reducing the complexity of your system.

Psychological Aspect - You have to learn how to stop and think in order to find a suitable design solution, even if your feel under the pressure of a strict deadline. You don't need to rush. You need to learn how to get help by the current design of your software system.

I want to stop creating Code Monsters "One IF at a Time"

Book your Session

About the Trainer

Francesco Cirillo

Francesco Cirillo has worked at the forefront of the software industry for more than 30 years. In a career spanning startups, corporations and freelance consulting, he has mentored thousands of professionals, developers, managers and software teams.

In the 1990s he worked as a Senior Consultant and Mentor for Sun Microsystem, expert in Software Architectures and Software Development Processes and Java and Object-Oriented Evangelist.

Francesco is one of the pioneers of Agile Methods. He started working on XP and TDD in 1999. He was chosen by Kent Beck to develop the XP community in Europe and as reviewer of the second edition of the book Extreme Programming Explained. In 2000 he created XPLabs, the first company in Europe to offer comprehensive services on XP: software development, training and consulting.

In 2007 he created the Anti-IF Campaign to raise awareness in the international community of software developers to apply good design principles to grow software in a sustainable way.

Since 2008 Francesco stopped actively working on Agile Methods and started to develop RRP, a new method of software development. In 2013 he created Cirillo Consulting based in Berlin to offer professional training and consulting on productivity and software development.

Francesco invented the Pomodoro® Technique, a renowned time-management method used by millions of people all over the world, while being a university student looking for a way to get more done in less time.

Read the Francesco Cirillo's complete profile.

Price & Conditions

Video Basic

Anti-IF Workshop

Learn at your own pace.

  • All 30 modules
    As they're released.
  • Final Source Code
  • All Basic Updates Forever

Video Premium

Anti-IF Workshop

Everything in the Basic Subscription, plus:

  • Full Source Code
    You'll get the source code for each module.
  • Access to the Private Discord Community
    Ask questions and discuss the Kata solutions with the Bowling Kata Community
  • Detailed Programming Screenshots

Private Guided Tour

Anti-IF Workshop

Only for the Premium Subscription:

  • Private Coaching
    2 hours of 1-on-1 coaching with Francesco monthly: get direct feedback or discuss your design solutions.

Live Online Course

Anti-IF Workshop

Only for the Premium Subscription:

  • 4 x 2-hour sessions over 2 weeks.
  • Small classes, max 8 participants.
  • Free access to our Anti-If Community.

Please read our terms and conditions for training courses here.

Marco Isella

Software Engineer

Francesco has changed the way I work, and more.

Upcoming Sessions

Here you can find the next session of this event:

Here you can find the next session of this event:

Useful Resources

Three Bowling Kata Reviews

Learn software design by comparing, fixing and expanding three Bowling Kata solutions. In this session, Francesco Cirillo reviews three different...

The Bowling Kata Challenge Solution

Have you ever noticed how many IFs have been used in Bob Martin's Bowling Kata solution? "Is this an effective...

The Anti-IF Workshop

Learn how to replace the 'IF Strategy' with more effective design strategies that will enable you to reduce the complexity...


Do you have a question not listed here?

Pomodoro® Web App

The Pomodoro® Timer Web App will be your time tutor and help you stay focused so you can get more...

Pomodoro® Sheets

To help you get started, check out the official templates of the Pomodoro Technique that you can download and print....

Pomodoro® Book

This fully updated edition includes new and exclusive material about teamwork, to make you and your team more dynamic than...