The long way through Software Craftsmanship

Growing software according to the season

Mar 29, 2015 - 3 minute read - Comments - growing-softwarebuilding-softwareseasonagriculturegardeningsoftwareembedded-tweetgoos

This is the first post is of the growing-software series

A few weeks ago, while reading the book Growing Object-Oriented Software Guided by Tests by Nat Pryce and Steve Freeman, I finally understood why the software needs to be grown and not built:

A few days ago, I was thinking about new inspiration sources and this came to my mind:

In agriculture, at least in this latitude, there are different seasons. Different plants have different temporal schedules: you need to plant, wait for it to bloom, produce fruits then collect. Maybe remove the plant and wait for the next time slot to appear.

When growing software, things are different (or we think so):

  • Do we need to plant? Yes, seed the project with resources
  • Wait for it to bloom? Yes, from an outside actor perspective, there is no result for a while, even if it is one sprint
  • Wait to produce fruits? Yes, usually some sprints past the minimum viable product (MVP) until the minimum lovable product (MLP)
  • Do we need to collect it? Yes, usually the final tests (e.g., regression) and ship it to production to be used.

After all, we might say that the process is not so different in both activities. Nothing to do related to tools or materials, etc.

As in agriculture, seasons vary in productivity for a certain activity or crop: during the cold months, not many plants are able to produce fruits. Meanwhile, during the hot months, harvest is much higher. (This only applies to outdoors gardening.)

When producing software, there might be seasons too:

  • Seasons where productivity (harvest) varies
    • Lowers when a new team member joins (see the Mythical Man-Month), the pressure is too high, salaries are low, …
    • Increases when there are no information silos, the bus factor is high, the team is not affected by external distractions, …
  • Seasons where different harvests can be planted, but a subset of them will be the most effective
    • A front-end developer can do back-end, but it won’t be as productive. In this area, one can learn other disciplines and get as effective as other professionals.
    • There are many tasks to be done but the prioritized ones are more effective
  • Some harvests are more intense on the fields than others. After that, there is a required rest so the next season is as productive as the previous one
    • Some projects produce burn-out so some slack time is more productive than getting to work again.

But there might be differences too:

  • Geographical distribution: some crops cannot grow in certain conditions. I believe any geographic area (e.g., country) can produce any type of work (e.g., back-end, front-end, quality assurance, project management, etc)
  • Quality distribution: same as before, many crops do not grow in Iceland (due to the harsh environment) or do it with lower quality as nearer to the Equator.

Xavi Gost responded to my tweet:

[Roughly translated: Concepts like allowing some time for things to grow and ripe would benefit the industry]

Get the tools out of the tool-shed and start buying seeds for this spring.

Meetup cross-pollination Books read in 2015Q1