George Flanagin

Software Development, Management, and ... other stuff ... at least on this one page.

This article first appeared in Quora. It continutes to get a couple of upvotes per week.

What is the difference between a programmer, a good programmer and a great programmer ?

[ Note: if it is not obvious, please think of each tier subsuming any desirable skills in the ones below it. ]

Part One of Two: What are the differences ...?

Tier I: People like Fred Brooks, Bjarne Stroustrup, and Linus Torvalds. I have not yet worked with any, but I am not yet sixty years old and I hold out hope. These folks seem to be able to do things that other people cannot, and they may be rare. It is also possible that there are many Tier I people who simply remain anonymous.

Whatever the case guys, you know my number, you have my email address, and I will answer if you call.

Tier II: I started work for Boeing in 1985, and I was blessed with three excellent mentors over seven years, each of which I would put in this category, although each for distinct reasons. The common feature of Tier II seems to be that when one of these people is added to a project everyone on it feels a sense of relief that success has just been guaranteed, or if this person initiates a project, everyone already employed somewhere else starts begging to be transferred. These people are catalysts and reagents for the chemicals in other people.

Tier III: Gifted programmers who are unafraid of any challenge, and can both do the work and explain their work to others. Most employers of any size have a few of these people (1 in 50 or maybe 1 in 100), although they may not be in programming roles 8 hours a day. These people are primarily the people who are perceived to "get things done" or "make it happen" when it comes review time.

Tier IV: The competent rank-and-file programmers. Their value to the organization is often in the knowledge of how the employer does business, and how thus-and-such system works. Results are sometimes inelegant, and often they do not seem to be interested in programming. For an example outside programming, I dress appropriately for work and keep my shirts clean and pressed, but I am not interested in fashion; I suppose that makes me a Tier IV in wardrobe.

Tier V: Tyros. This tier contains all the people who are not yet in one of the ones farther up. Tier V spans whiz-kids to the soon-to-be-failures.

Part Two of Two: What are the paths between the levels?

The path to move "up" is not algorithmic.

We can safely say that the first order of business on joining the workforce is to get out of Tier V as fast as possible. If you are a whiz-kid that might mean dropping out of Stanford to start your own business, and if you are perilously close to failing, perhaps you should get an MBA, and go do something else.

If you are somewhere in the middle, you need to grasp two things:

  1. How to punch code that is reliable and useful.
  2. How your employer makes money.

Step 2 is frequently overlooked, and it is one reason why you should be-or-become interested in your company's product. Over the years, I have been interested in airplanes, printers, credit cards, and higher education. The more fascinating I found them, the better I did my job.

The route out of Tier V is mainly one of apprenticeship.

Tier IV may be all you need. If you like that mysterious "work-life-balance" that I have heard about, then this could be for you. You are unlikely to be sacked because you know the business, the database, the body of code. When it comes layoff time, management burns the deadwood, and the people who are the best vote with their feet ... and that leaves Tier IV.

To get into Tier III, your programming (or "software development" if you prefer) cannot be an occupation or even a career. It must be an identity. You wake in the morning, look in the mirror, and you see a programmer. You must spend every spare minute thinking about programming, and you must be ruthlessly self-critical to improve your skills.

You must learn all the other stuff to get into Tier III: documentation (you must write well and type fast), project management (you might have to manage your own project ...), requirements gathering and analysis (you really don't get paid to write C, you get paid to solve real problems of real people).

You will be ten times as productive and knowledgable as the people around you, but you will probably be paid only twice as much. That's just the way things are. If you want to risk this for "more money," you will have to start your own business and have two years of cash on hand when you do.

Tier III might be enough for you. After all, once you have worked at this for fifteen or twenty years, you will retain what you have learned, you will continue to improve, and you will likely live well enough to satisfy you. You might even have the time to get married and have a family, if that interests you.

Tier II ... hmmm. I cannot offer much advice here, although I think staggering intelligence is a requirement. I have a friend who is a Tier II guy. He is inherently more intelligent than I am, and when I was in management I hired him to save a big project. Whatever I am studying, python or Knuth, he is a few years in front.

When he enters the room, his abilities seem to be obvious and beyond question. People relax, and they immediately want to work with him. It is not so much mere social skills (you must have those to enter Tier III), as the ability to radiate confidence, and give your confidence to others.

Oh, and your code is just about perfect. Other people look at your code and wonder to themselves why anyone would do it any other way. Often it does not need a lot of comments because there is only one possible interpretation when it is read -- by the compiler or by a person.

Tier I you can read the bios on Wikipedia.