Modern Software Engineering Lessons from Ancient Temple Builders
Alan Kay, the computing luminary once quipped:
“People who are really serious about software should make their own hardware”
Alan was emphasising the need to control & fine-tune every technical layer powering the final software experience. The late Steve Jobs took Alan’s advice seriously, and that is one reason Apple keeps the entire hardware/software development stack in-house. Apple’s success is an existence proof for Alan’s sagacity.
However, Alan was merely talking about the product. I’d like to draw the reader’s attention towards the software construction process, which involves people, knowledge, skills and attitudes towards product building. In similar vein to Alan’s sentiments, I’d like to propose another statement related to the software-building process:
Those who are serious about software, must build their own organisations.
A major hurdle in raising the software quality standards in the world emerges from the wrong psychological approaches towards the work itself. The way the process of software construction is carried out in general leaves much to be desired. First, I’ll outline my reservations about a set of beliefs and approaches to software construction usually used in the world at large. Next, I’ll draw inspiration from certain ancient architectural constructions to muse about what higher aspiration in software may look like. Finally, I’ll propose a list of mantras for software development, in line with the inspiration, which potentially can govern the spirit of new software development organisations.
I want to talk a little bit about software. When we talk about software, it is often seen as just a commodity product. It is seen as something built as a response to market demands. It is seen as an everyday necessity, and that its nature is of a profane and day-to-day sort. It is sort of like the rice we buy from the shop, or the traffic we get stuck in. The general view of software is like this, that it gets things done, and that’s all we care about.
However, those who aspire to build serious software, those who wish to engage in mastering the craft, for such people a feeling of ordinariness and every-day-ness is a giant obstacle. Usually, in various organizational environments, the magic of software gets reduced to the mere execution of assigned tasks, and a cold calculation towards how to succeed in the market. It is just a job, which you throw away without any concern to take another opportunity. Such thinking is more likely to result in mediocre software or failed attempts.
- Excellent software is a long term game; one must persist with its development even when the going gets tough, even when it is not immediately profitable, etc.
- It takes a long time, multiple attempts to make a software product successful.
- Many skills have to be acquired. Knowledge of various systems must be perfected. Skills, knowledge and attitudes must be integrated and deployed with refinement during the workday. All these factors, added in, requires an intense yet steady approach to engineering.
- The discipline of day to day practice cannot be relegated to the whims of some remote market possibility. Daily practice must be rooted in firm convictions, that the work matters regardless.
- The market keeps swinging, various conditions keep changing, keep evolving, disturbing mental tranquillity.
- People get sick, patience and impatience play their dances.
- Resources deplete, and sometimes they augment causing either extreme fear or excessive hope.
Given all these things, such vacillations in the operational environment, which includes physical, material and mental conditions will usually degrade software quality. However, quality degradation is not absolutely necessary. I propose that holding an attitude of sacredness counters such degradation to environmental conditions.
When we see some software functioning, we must understand that there is enormous intelligence, dedication, commitment and sacrifice behind it. When we see something working wonderfully, we must respect it.
A feeling of reverence, respect and affinity for the process of building software is helpful. It is personal. The entire process involves unpleasantness, boredom, and doses of excitement as well. It requires a real human effort to get software going.
One may use the analogy of temple builders, vs merchants. The reason we see many historical temples survive in glorious condition while mercantile artifacts rotting is because the temple people believe in something larger than themselves. They are honouring something larger than themselves, they are doing it in service of something sacred (as opposed to something profane, and day to day). It is my view that day-to-day thinking leads to low-quality software. Truly wonderful software can only come from long-term commitment; and from care, concern, and a wholehearted involvement.
As a concrete example, take a look at the Kailasa Temple at Ellora, India.
The Kailasa Temple, built in the 8th Century CE, is a testament to the power of human dedication. The 32 meter structure (as high as about 20 people in a column) is carved out of a rocky mountain, completely dedicated to the deity Shiva. The large structure bears no dedicatory inscription, nobody is claiming loudly — “I did this”. All that remains is a brilliant yet toilsome production, performed with the highest care, concern and attention to detail, in dedication to the sacred. One remains in awe of the tenacity, determination, execution capability of the builders. Software practitioners of the day have quite a few lessons to draw from the temple builders of the past.
The most important thing for a software team to become successful is to cultivate a feeling of sacredness, rather than profaneness. The culture must run indifferent to the main currents happening within the world, in the various busy streets, loud conference gatherings, and so on. The process of software building is a quiet and intense affair. It is a matter of commitment, a personal test and challenge. It is not of the large, it is not of some commodity effort. All great software starts with a few minds, immensely committed to making it happen. The production of serious software can happen only this way. The core people are like the seers residing in a temple. They are the guardians of the vision. They are fully in tune with the vision and determined in treading the disciplined path. Only then they can execute at the desired level of skill. If they operate with a sense of profanity, with concern for mere economic and expedient matters, they will not produce anything worthwhile.
The quality of software is merely a reflection of the practitioners; it is the nature of the people working on the things, which gets etched in the product. The greatness of the engineer shows up in the smile of the customer at the end of the day. Hence, we must preserve a sense of sacredness in activity. When activities are performed without love, care and devotion, it produces all the wrong things: psychologically and materially.
Software building initiatives fail due to profane execution, weak commitment from the people. What is badly needed to build great software is the individual’s spirit to see the work through, to put one’s heart and soul into the work, and approach the work with a sense of sacredness.
Mantras for Software Development success
First and foremost: Fund it with your life energies
Software cannot be separated from the people building it. The quality, commitment, focus, care, ability, resources and nobleness of the people building it defines its character.
Software work is sacred; don’t approach with a profane spirit of gain and self-interest alone
Software work is an all-consuming affair. Don’t hesitate to give it your all.
Work together, work with your heart and soul in it
Commit to a life-time, regardless of adverse circumstances
Sacrifice comfort if and when needed, and make sure you see the work through
Think before you commit; but don’t abandon high aims for comfort.
Sacred work demands discipline; eschew comfort in favor of education, higher focus and discipline.
Continuously train; training is the way. Every minute is an opportunity to raise capabilities so that the work can reach its potential
One performs activities for the work to succeed, not for personal success. If the work succeeds, that’s enough
One doesn’t work for name, or good reputation. One works for the accomplishment of the task. It is like heartfelt prayer. Prayer is a personal affair; the public at large may not understand it. Don’t let temporary misunderstandings deter your resolve.
Aim for higher quality every time; raise the challenge and sophistication a little bit every time you work
Honour your fellows, whenever they try to raise their capabilities in the service of the work. Apply any number of potential teaching paths so that people deepen their commitment and practice with high aspirations.
Perform activities with concentration, strive to acquire abilities, but also learn to love the question, and the problem. Overcome the hurdles, one by one.
You may die trying to make it work; but you may not die without using everything at your disposal. You may not quit the task.