I noticed that three spirits are fighting in the soul of a software developer – Great Artist, Reliable Worker and Selfish Pragmatist.

Great Artist

If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced. – Vincent van Gogh

The first spirit is a Great Artist who pushes our fellow programmer to work on challenging tasks, invent new approaches and seek for self realization. The spirit gives power and desire to create state of art solutions and move forward with learning and practice. The Great Artist spirit is behind the best software; it makes the developer to think out of box, strive for beautiful code and forget everything outside the problem. It is powerful spirit but dangerous for ordinary business – there is no predictability and assurance that developer will remember what client really needs. The developer driven by this spirit tend to reject mediocre, but good enough solutions, will do stuff his own way and go far beyond what is necessary. This developer has zero tolerance to poor code and will refactor most important pieces of code even night before important demo… after testers go home to sleep.

Reliable Worker

No man is an island, entire of itself; every man is a piece of the continent. – John Donne

The second spirit is a Reliable Worker who puts interests of the team, company and client on the first place. The developer driven by this spirit completely dedicates himself to success of the project and Greater Good. The Reliable Worker spirit suppresses creativity and code that is not sanctioned by management and could fail. The developer will stay late to meet deadlines and fix embarrassing bugs; he will test after testers and verify installation after administrators.This altruistic spirit makes a developer focused, accountable and disciplined citizen of the company, but sometimes cause stress, uneasiness and feeling of wasted talent. The danger is that Reliable Worker spirit can evaporate fast if a company don’t care about developer’s hard work and sacrifices.

Selfish Pragmatist

Life is what happens to you while you’re busy making other plans. – John Lennon

The spirit of Selfish Pragmatist is concerned about personal interests, financial well being, job security and career growth. This spirit forces a developer to accept shit and concentrate mostly on paycheck and managers recognition. The Selfish Pragmatist spirit becomes stronger with age as family and personal matters take over dreams of building great software and day-to-day problems kick out illusions about dedication and loyalty at work. Sometimes the developer influenced by this spirit starts to focus on stuff that is more beneficial for personal growth, produce tangled code for better job security and increase complexity for longer contacts or even work on own side projects, business or simply waste time on Internet. This spirit is fed by natural desire to achieve personal goals, secure own future and have life outside work. The danger of this spirit is that the developer could become counter-productive and don’t care about quality and long-term success of the project and company.

Each of spirits have positive effects: Great Artist provides creative power, Reliable Worker encourage discipline and focus on results and Selfish Pragmatist ability to meet personal interests. But there are also side effects: Great Artist overdoes and misses real needs, Reliable Worker causes burn down and fear of change and Selfish Pragmatist downplays company and client best interests.

These spirits tear on pieces many poor developer’s souls and prevent peace in their minds. What is usual result of this battle of spirits? I saw many developers who end up with one spirit rule (unfortunately often with Selfish Pragmatist) and no longer have much struggle. Other developers will flip between spirits depending on circumstances: some companies spark creative Great Artist and some provoke defensive Selfish Pragmatist.

The existence of the spirits is my subjective observation and theory, but it helps to explain many interesting phenomena in life of software teams. So, I have few questions to you, my dear reader.

Do you agree that these spirits exist? Can you handle and balance them well? Did I miss any other important spirit or force in the soul of the software developer?