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:
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:
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?