5/13/11

I was recently reading David Mamet’s “On Directing Film” because I’d heard it has a good analysis of how to tell a well-built story. The book is a synthesis of several lectures he gave at Columbia Film School shortly after directing his second film. In the section on building a story he makes a reference to the Stoics of ancient Greece, and how they held that craftsmen should maintain a simple and understandable tool set. Mamet then goes on to say that using simple tools, a complex and aesthetically pleasing story can be built stone-by-stone in a logical way.

When I heard this, it resonated with me not only as someone who likes to watch good films, but also as software developer. Creating a software system is a complex task, involving hundreds of decisions, not only by a single artist, but from a team, or multiple teams of developers. In the olden days, project managers used a tool called a Requirements Specification, which attempted to make all these decisions in advance. Unfortunately, this method of development led to situations equivalent to specifying a jackhammer, where a screwdriver and a wrench might have been more useful.

In 2001, however, a group of independent thinkers about software development wrote “The Agile Manifesto,” which included a list of twelve principles that could be used to optimize software projects. I admire these principles for several reasons: they focus on simplicity, understanding, and the craft inherent in the process. Sound familiar?

So, I looked up the Stoics, and discovered that much what we know about these philosophers from nearly 2000 years ago is via the writings of Emperor Marcus Aurelius who lived from 121 to 180 AD, and is considered one of the most important Stoic philosophers. One of his most-quoted statements is often heard in leadership seminars: “Waste no more time arguing about what a good man should be. Be one.” (1) In fact, his diary is a wealth of quotes, and the more I read the more I realized he was predicting the principles of the Agile Manifesto! Ok, well, not so much a prediction, but let’s say more of a resonance. I find it amazing that here’s a guy from two millennia in the past, yet the sentiments of working a craft are almost the same as today.

As an exercise, I paired up each of the principles from The Agile Manifesto with a quote or two from Marcus Aurelius. Except for one principle, the ancient Greek had something to say about each Agile development tenet (more about the missing principle later -- see if you can guess which one).

Agile Manifesto: "Our highest priority is to satisfy the customer through early and continuous delivery of valuable software."MA Says: Begin - "To begin is half the work, let half still remain; again begin this, and thou wilt have finished." (2)

Agile Manifesto: "Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage."MA Says: "Observe constantly that all things take place by change, and accustom thyself to consider that the nature of the Universe loves nothing so much as to change the things which are, and to make new things like them." (3)

Agile Manifesto: "Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale." MA Says: "Confine yourself to the present." (4)

Agile Manifesto: "Business people and developers must work together daily throughout the project.MA Says: Each day provides its own gifts." (5)

Agile Manifesto: "Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done."MA Says: "Accept the things to which fate binds you, and love the people with whom fate brings you together, but do so with all your heart." (6)

Agile Manifesto: "Working software is the primary measure of progress."MA Says: "Everything that exists is in a manner the seed of that which will be." (7)

Agile Manifesto: "Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely."MA Says: That which is not good for the bee-hive cannot be good for the bees. (8)

Agile Manifesto: "Continuous attention to technical excellence and good design enhances agility."MA Says: "Execute every act of thy life as though it were thy last." (9)MA Says: "If it is not right do not do it; if it is not true do not say it." (10)

Agile Manifesto: "Simplicity--the art of maximizing the amount of work not done--is essential."MA Says: "How much time he saves who does not look to see what his neighbor says or does or thinks." (11)

MA Says: "Let not your mind run on what you lack as much as on what you have already." (12)

Agile Manifesto: "The best architectures, requirements, and designs emerge from self-organizing teams."MA Says: "Everything we hear is an opinion, not a fact. Everything we see is a perspective, not the truth." (13)MA Says: "The secret of all victory lies in the organization of the non-obvious." (14)

Agile Manifesto: "At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly."MA Says: "Look back over the past, with its changing empires that rose and fell, and you can foresee the future, too." (15)

So, which Agile principle failed to have a partner in the quotes of Marcus Aurelius? It is: “The most efficient and effective method of conveying information to and within a development team is face-to-face conversation”

At first this baffled me, since I figured this Stoic philosopher would have some comment on communication, until I realized the obvious. Two thousand years ago there were only a few possible ways to communicate, and 99% of the time it was face-to-face conversation. The ancient Greeks didn’t have email, phones, Skype, or Post-it notes, most of them probably couldn’t even read. They were forced to use personal communication.

Ironic, isn’t it, that one of the benefits of modern technology – automated and remote communication – is also one of the greatest drawbacks in developing the same systems? While the ancient Greeks didn’t have to concern themselves with being misunderstood in an email, modern software development, already a complex process building a complex system, increasingly relies on complex communication structures. In fact, it’s so great a problem that the writers of the Agile Manifesto included it in their list of 12 key principles. Hopefully, though, people will remember the Stoic philosophy and maintain a simple and understandable tool set, including the ability to communicate in person.

On a final note, Marcus Aurelius had one more quote which I think can be applied equally well to software projects, the Agile mentality, and life in general. That is: “The universe is change; our life is what our thoughts make it.” (16) Sounds like a good philosophy to me.