Geeks With Blogs

News Dave's Mug View David Oliver's profile on LinkedIn Add to Technorati Favorites Blog Directory for Guildford, Surrey
Dave Oliver's Blog Enterprise Technology Thought Leadership in a FTSE 100

As we all know the development cycle at many a code shop is floored and there has been a number of methodologies and initiatives to help us get over some of the core problems.

The simple fact is that I believe that a great deal of the problems in the development cycle or more uncomfortably closer to home.

I alluded to this in a previous post ‘Software design and why developers suck at it !’  but to but it bluntly, it’s our attitude towards our work and the other people (other than developers) in the development life cycle.

OK, I admit that our job is arguably the most demanding part of the development process, but we don’t make it easy.

I’m not sure of the route cause whether this is an effect of our training or because of the way we are created and our place in society that has made the monster that is us.

I remember vividly when a development manager, Barry Rimington, was mentoring me many moons ago, said “If we, and I mean, developers as a whole, ever became a united force we could control the world, but that will never happen because we all think we can code better than each other”. This for me sums up our problem, developers have ego’s.

Builder.com published this article, it shows that this is not a newly recognised issue but one that Gerald Weinberg , back in 1971 in his book, The Psychology of Computer Programming, first spoke about, and this is the concept of “Egoless Programming”. To which Lamont Adams has created his own guidelines to counter the issue and this is Ten Commandments of Egoless Programming and this are,


1. Understand and accept that you will make mistakes. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on.

2. You are not your code. Remember that the entire point of a review is to find problems, and problems will be found. Don't take it personally when one is uncovered.

3. No matter how much "karate" you know, someone else will always know more. Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it's not needed.

4. Don't rewrite code without consultation. There's a fine line between "fixing code" and "rewriting code." Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.

5. Treat people who know less than you with respect, deference, and patience. Nontechnical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don't reinforce this stereotype with anger and impatience.

6. The only constant in the world is change. Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, not as some serious inconvenience to be fought.

7. The only true authority stems from knowledge, not from position. Knowledge engenders authority, and authority engenders respect—so if you want respect in an egoless environment, cultivate knowledge.

8. Fight for what you believe, but gracefully accept defeat. Understand that sometimes your ideas will be overruled. Even if you do turn out to be right, don't take revenge or say, "I told you so" more than a few times at most, and don't make your dearly departed idea a martyr or rallying cry.

9. Don't be "the guy in the room." Don't be the guy coding in the dark office emerging only to buy cola. The guy in the room is out of touch, out of sight, and out of control and has no place in an open, collaborative environment.

10. Critique code instead of people—be kind to the coder, not to the code.As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.
The article also has a link to a download that has the commandments in a rather tongue in cheek format, stone tablet, a la Moses.

Yes the commandments are all very note-worthy and I agree with the sentiment completely, but they aren’t the answer? Who’s going to remember them tomorrow?

So what is the answer? Well, I've long held the idea that we are somehow going to have to reduce the amount of involvement a developer has in the development cycle. I believe we are going to need to create tools and techniques that essentially give a develop a clearer more detailed steer that allows them very little room to manoeuvre as the discussion on how a program will work, the order of events, the interaction, the results, has all happened and been previously agreed.

OK, so we have business analysts and architects, isn’t that what they should do? Yes and no, the roles need to be able to work closer together and have a method of producing what the customer wants to see to get down to a detail enough to code.

OK, it’s hard enough to get requirements out of customers, let alone details, this is what Agile development is about right? It breaks it up into smaller more manageable, easier to visualise chucks and yep you do have to do a bit of design up front, so you don’t go completely off course.

Now I’m going to get hate mail, I don’t believe Agile Development really works. Lets be honest here, the problem is that the code is, for the most part, the design and this is that hardest place to change design.

Software development really does need to be more like building bridges or buildings, no not engineering disciplines, heaven forbid, but a clear blue-print that allow the customer full vision of what they are going to receive and the develop enough detail to know what to code, or indeed finish coding what the automated routines haven’t performed.

So am I talking about Software Factories and DSL’s? Well I have been an advocate of that in the past, but I haven’t seem it live and working yet, but it does have a good feel about it.

What I do know is that the current working practice and methodologies such as UML don’t cut it. So perhaps we can bash our heads together and see what we can come up with.

Incidentally, I’ll be at tomorrow’s London Girl Geek dinner, the guest of the very lovely Ms Blow, so if you want to chat about Egoless Programming or anything else I would be more than happy to. See you there!

Posted on Monday, May 15, 2006 4:53 PM Main , Development Technologies | Back to top


Comments on this post: How do we defeat our ego's?

Comments are closed.
Comments have been closed on this topic.
Copyright © Dave Oliver | Powered by: GeeksWithBlogs.net