Liquid error (layout/theme line 33): Could not find asset snippets/za_product_blocker.liquid

The New Anti-IF Software Design Online Course

Francesco Cirillo Apr 10, 2018

This online course stems from the idea of enabling participants to learn, in a concrete and fun way, expand their software in a sustainable way and reduce the cost of change.

The Anti-IF campaign is designed to increase awareness of the moment in which we decide what our next step will be. We find ourselves in front of the monitor. The cursor flashes in front of us. We know we have to make a decision but what? Add an IF? Create a new class, write a test, refactor a method into a Strategy? I call that the “Waaaaaah!” moment—like the internal cry of a child that needs to make a decision about what to do. The bad IF and the bad design are often based on an unconscious choice, often out of fear or the inability to recognise how to manage their own Waaaaaah!

To retrieve this awareness, you need experience. And to get experience, you need three elements: time, real cases and sharing your solutions with other people. Here are the main features of the new online courses starting in the Summer Semester 2018:

  • Work on a real application—you need features taken from a real-life context to learn to manage your own Waaaaaah! This can be the basis for developing a video game like Snake, or an actual sales report… It is by seeing and commenting on various solutions to actual problems that we will increase our experience as a software designer.
  • For 4 weeks—you need time to learn to use new concepts and practices and to change your own behaviour.
  • With weekly online sessions—the online method chosen for this course helps participants develop diverse experiences from all over of the world. The greater the variety, the more effective the comparison. The online sessions encourage the participants to compare with one another, presenting new concepts and practices for improved awareness of decision-making and giving feedback on the effectiveness of their solutions. During the week, participants can work on their own to find solutions to the assignments they are given.
  • For a small group (max. 5 people)—so that each participant is given the attention required and can actively contribute.

Participants can use any language to develop their solutions. I will often use Java or JavaScript, or other languages. Again, the greater the variety, the more effective the comparison. Different languages can make the comparison more stimulating. Being knowledgeable and knowing how to manage our Waaaaaah! can be influenced by languages and by the IDE that we use and how we use it. 


How does an online session in the course work?

Each session starts with feedback on participants’ design solutions. I present slides with screenshots of the most interesting parts of the codes taken from participants’ solutions. These slides are the catalyst for showing new concepts and practices. The goal is to become aware of the effectiveness of these solutions or how to improve them.

The session continues with exercises for us to increase awareness of our SW design decision-making. We work in remote pair programming on a feature of our project, taking our Waaaaaah! into account. And we work to find effective design solutions, not driven by fear or the pressure of time.

At the end of the session, I present the assignment. The assignment includes:

  • new features to develop
  • reading and exercises to reinforce the skills of each individual participant

Figure 1. Collaboration

Each version of the course is different. The new assignments, feedback received, choice of new features to develop depend on the participants. The course is put together and is adapted to the skills of the participants and the solutions they come up with.

Over the 4 weeks of the course, during the online sessions and at home through the assignments, participants develop a series of features of a software application. Below are some examples of projects on which the courses are based.

Snake ‒ We take a “standard” code—a version that we can download from the Internet—of Snake in Java with IF and classes and “we put things in order” :) . How? Adding functionalities. Each new functionality is an opportunity to improve the design of our application. Adding new functionalities will reduce the complexity of the software and will make its growth sustainable, lowering the cost and effort it takes to make new changes.

Alarm watch ‒ “If it is 7 o’clock in the morning, this mp3 file will play”. Alarm software can be full of IFs. In this course, we will develop the alarm in unexpected directions. Our alarm watch could become a workflow management system and then have to become a Pomodoro timer, or something else again… How do you organise the design of our software so that you can manage change in unexpected directions?

VAT Sales Report ‒ Every three months at Cirillo Consulting, we prepare a very special sales report. This report is used to calculate a European tax on sales of digital products called MOSS. The report considers any transaction where the sale has been made in a country in the European Union, the object of the sale is a digital product (an ebook or an online course), the sale has been made in a certain quarter and/or the client is a private individual (not a company). It groups these transactions by European country and calculates the taxes (VAT) due in the various countries. The percentage of applicable VAT depends on the country: if the sale has been made in Italy, the percentage is 22%; if it is carried out in France, it is 20% and so on. But the real problem is the change imposed by time: the percentage of VAT of any particular country can change within a quarter. Countries in the European Union can change within the quarter (new countries entering or leaving the union); also the definition of digital product can be changed within the quarter by a new European law… Have you taken into account how many IFs are needed to manage this type of scenario? An IF-driven solution would only increase the complexity of this software system. How can you organise the design of our software to manage the complexity and change imposed by time?