Have you ever seen experienced developers fail? When all external factors are positive and all team members are competent, why sometimes projects come out of mediocre quality or fail completely? You might think that some essential component must be missing, but what could it be?
Software development is a young craft, it has been around for no more than 50 years. There simply haven’t been enough time to develop universal techniques which would allow to solve non-obvious problems. On the other hand, other crafts like painting were evolving for many generations. Modern painting techniques are known since times of Leonardo da Vinci. What if similar problems already have proven solutions and we, as developers, just have to grab and adopt them?
While there must be different reasons for experienced developers to fail, I noticed that there is one most fundamental. The first and most important thing which any art school student learns during the first semester of education is the idea that whole is more important than its parts. Students are taught to ignore details and to pay attention to the whole picture. The philisophical generalization of this idea is called holism. It is adopted by many sciences and crafts like biology, chemistry, sociology, economy etc. Yet computer engineering never adopted the idea.
I compared two books from the popular For Dummies series. Painting For Dummies contain chapters named:
- The whole is greater than the sum of the parts
- The devil in the details
- Blurring details to see the overall composition better
While Programming For Dummies is all about tools, languages, system requirements and no chapters about techniques and work organization. This fact made me sad, because it is the same as if painters were taught only about paints, paper and brushes.
To better understand the idea checkout the speedpaint made by Wojtek Fus:
Pause the video at any point and the picture will look like a finished portrait. Depending on the chosen art style and required detalization author could stop at any point and say that work is done. This is achieved by the special technique according to which author never stops at any detail for too long. This way the picture evolves as a whole. Compare it to the typical software project where each part is made separately and often combined with other parts one week before the final release. Imagine, if software developers could use the same technique to instead evolve features integrated with each other from the beginning of the project. Project could be stopped at any point and be shippable. We would never have deadline problems again, right?
What if artists were working like developers?
Provincial movie theaters in Belarus keep the tradition of handpainting the movie posters as in the days when large poster prints were not available. Some unfortunate posters became internet memes. I am not an artist nor an art critic, so I will be explaining my point as a dilettante using totally inappropriate terminology.
This is a poster of Just Married movie from 2003. Pay attention to character face features separately one at atime, you wight say that they are carefully done, but if you stand back and see the whole face you see that it is distorted.
Another example is a portrait of Brad Pitt from the movie Troy. The shadows and details are painted nicely. I might guess that painter started his work from the lower part of the face, he painted chin before noticing that there is not enough space on the canvas, so he just decided to paint top part smaller. Face looks ugly and distorted as a result.
My personal favorite one is mr Arnold Schwarzenegger in the role of heartful Terminator. The details are amazing, separate bits of hair are carefully painted, you can see that author spent an enormous amount of time painting tiny details of face scar and even eyeballs. But as with other posters the whole picture is crap.
I hope these illustrations explain the source of some analogical problems we have with modern software.
Will developers adopt the holism idea and when?
To answer this question we should dig deeper into the history of visual art evolution. Again I am not a expert in this field so I will be over simplifying. Art evolution is far from linear process but we might divide it into 4 main stages:
About 40 thousand years ago human brain evolved the desire for art. In the beginning there were no rules, basically every individual had to invent his own way of producing art. This was a period of artistic chaos and it worked well as art was still simple.
People started to copy each other and improve upon previous creations. Art became more complex and rules emerged.
Artists kept collectively improving rules merging art with science. Realistic visual art appeared.
Finally, strict rules were abandoned and art went back to chaos again, still it was chaos of totally new quality and complexity. This is the stage where we exist now and no one knows what comes next.
Probably any kind of art, science and craft go through the same four main stages. If so, our question is: at which stage computer engineering is at the moment?
I might propose that computer engineering is somewhere between Cave and Medieval stages. Universal rules are yet to be developed, but some attempts are ongoing. Agile methodology is one of the attempts. In fact the ideas similar to holism were proposed by Agile activists and were named lean or incremental development, still unfortunately they are not widely adopted. Some developers use rules of Agile development almost like religious doctrines, while others abandon them, including some of the founders. We are currently in the state of active collective work to develop the first set of rules to escape chaos.
I also might speculate that software development will go through Renaissance and Avant-garde stages in the future, but I have no idea about what will it be like.
I will not explain how exactly this idea should work for software development, this part will be left for you to think about. Consider is as a home work, read more about Agile, Lean and Incremental methodologies. Be sure to check out techniques like Continuous integration and Test-driven development. These methodologies and techniques probably don’t work for everyone, but it is in your power to improve upon work of others. Use scientific approach and share the experience.
If you are already familiar with Agile software development or even use it in your everyday work, this article should be a reminder that you are on the right path.
P.S. The idea of holism is universal and could be used for anything. Use it to develop your career or relationship with your life partner, use it to rise children or clean the house. In fact I used the same principle to write this article.