Hanukkah and Iterative Software Development

Hanukkah is a Jewish holiday that is celebrated during eight days. The tradition is to light candles every day, starting with one candle in the first day, then two candles in the second day, and continue adding one candle a day until there are eight candles in the last day. One possible meaning for this tradition is that we should always grow: The fact that a person is constantly growing and making progress becomes more important than the particular level he may be in a specific moment in his life.

Accordingly, in Iterative Software Development we understand that we do not have all the answers in the beginning of the project. We don’t even expect to have all the requirements clearly defined when we are assigned a new task. And we know that even if all the requirements were specified before we started the design, most probably some of them would change during the implementation. It is much easier to declare a code freeze than a “requirements freeze”.

Software as a Baby

In his classic book The Mythical Man-Month, Fred Brooks explains that software development is an incremental process, like pregnancy:

“The bearing of a child takes nine months, no matter how many women are assigned.”

The development of a software system cannot be reduced to the execution of a list of tasks completely known in advance, in which we can minimize the total implementation time by assigning more people to execute these tasks. Our understanding of the system will certainly change during the implementation, and thus these tasks cannot be really executed in parallel.

Now the question is: If we cannot know all requirements in advance, how can we progressively discover the requirements?

Software Prototyping

Some aspects of a software system cannot be completely defined before there is at least a partial implementation. For instance, the User Interface (UI): Without testing it, it is difficult to determine if a particular design of the UI will satisfy the customer needs.

The idea of Software Prototyping is to provide an incremental and progressive way to develop systems with partial functionality, allowing the developers to adapt to missing or changing requirements.

The process starts with the identification of the basic requirements, for which a prototype is built. Then the customers review this prototype and provide feedback on additions and changes. Using this feedback, the initial prototype is enhanced. These steps can be repeated several times: Each new version of the prototype is reviewed and can then be further improved.

Software Gardening

This incremental approach of software development is very different from other more traditional engineering disciplines. For example, we normally expect that the blueprint of a house should include all the details before we start building it.

In contrast, the authors of the book The Pragmatic Programmer say:

“Rather than construction, programming is more like gardening.”

In an interview, they claim that there are two main aspects that make software development so similar to gardening:

• You can never plan all the small details in advance: The plants in your garden will certainly grow.
• You need to invest a lot in maintenance: The plants may grow in unexpected and undesirable ways.

Going back to our candles metaphor, our role as software developers is to assure that the system is growing in the right direction, incrementally and progressively.

And of course, if you celebrate Hanukkah, then I wish you Chag Sameach!

About Hayim Makabee

Veteran software developer, enthusiastic programmer, author of a book on Object-Oriented Programming, co-founder and CEO at KashKlik, an innovative Influencer Marketing platform.
This entry was posted in Agile, Jewish Sources, Requirements Specification and tagged , , . Bookmark the permalink.

7 Responses to Hanukkah and Iterative Software Development

  1. This procedure is applicable to any new product design and development. However, in traditional engineering there is significant reuse of available subsystems and components (developed earlier).

    For a software product “No material is necessary” and there is “No manufacture”. Absense of these two factors should make software engineering very economical as the AA repository of artifacts keeps growing and BB more and more artifacts are reused in every new project / product.

    • makabee says:

      Thanks, Putcha, I agree that reuse is a very important issue. I think that at some levels software developers are reusing today more than in the past, in the form of libraries and frameworks. However, the most difficult part is to convince them to invest more time in producing artifacts that are appropriate for reuse. Unfortunately, reusability is not yet a required attribute of the many deliverables of the software development process.

  2. kirschilan says:

    Nice analogy! In the early days of Hanukkah there is always the candle that is not standing upright, and spills over the tablecloth or window frame. This is more common with a Hanukkiah that children bring from kindergarten or school (didn’t you mention prototypes?). After a few days you learn how to get the candles right without wax spilling over.
    In early days of a project it should be acceptable to have this story or that spilling over several sprints, until the done criteria is well defined and met.
    The challenge is to be in the acceptable state – as you said, requirement freeze, rather than merely code freeze.
    Well written, thank you 🙂

    • makabee says:

      Thanks, Ilan! I like your extensions of my analogy, and I’m happy you enjoyed my post. Perhaps there is also some relation between the burning candles and burndown charts? 🙂

  3. PM Hut says:

    HI Hayim,

    These seasonal blog posts on project management are quite excellent. We have just published one on Agile and Christmas, which is an Agile poem! We hope you’ll have the chance to read it!

  4. Pingback: Communication Problems in Software Projects | Effective Software Design

  5. Pingback: Four Myths of Software Evolution | Effective Software Design

Leave a comment