Software Professionals, or Joe the Plumber?

Over the past few weeks I've seen considerable discussion about how we in the software development industry need to advance our profession. Bob Martin et al have penned the Manifesto for Software Craftsmanship, there has been an active discussion on the Software Craftsmanship Google Group, and the Agile 2009 talk I proposeed on Professionalism has seemed to strike a nerve.

Something that has struck me during these discussions is that when we speak of being professionals, we always equate ourselves with Doctors, Lawyers and other very visible occupations with professional designations.

This has been gnawing away at me. I absolutely agree that we need to move away from the ad hoc nature of how people become software developers now, i.e. anyone can just say that they're a software developer, and who am I to argue otherwise?! What I don't necessarily agree with is attempting to gravitate towards what are considered the higher professions in medicine and law.

Maybe what we need are masses of plumbers, mechanics or electricians.

I don't mind the analogies between medicine and software development - both areas have significant, rapid change as well as role specialization. Contrast that with the work my Father-in-law did as an Aviation Maintenance Engineer (AME), starting in 1943... not a whole lot changed for him in terms of the type of work or even the tools or materials with which he worked between WWII and the last Cessna 150 he checked out in the summer of 2008.

So does that mean we have to be doctors rather than mechanics? Well, I can say that the materials and tools with which I work today have indeed changed since I first started programming in 1981 - or have they? Certainly how I use the tools of the trade hasn't really changed all that much - the technology has simply allowed me to do it much faster. But I still use the same programming structures I learned in the 80's. I still have to compile code, though now I have a runtime or VM that handles the linking for me. The languages have changed somewhat, but not really all that much.

The point is that perhaps we aren't all that far removed from a trade like that of an AME. The commitment to quality that they have is not unlike Bob Martin's Clean Code Wristband concept. Perhaps viewing ourselves as AME's - aircraft mechanics - could move us past software development as a craft an towards a trade.

Maybe being a trade is good enough, and attempting to be a profession is gold plating. I'm interested in your thoughts.


Anonymous said…
I like the direction you're going with this.

Forgive the tangent, but it'll come back to your point...

I can't help but think that there are 2 sides to the software development coin. The project management one and the programming side.

But.. I think when it comes to software development, there are few people who can do both. I'll go further than that and say that if you force someone to master both, you'll transform a great programmer into a mediocre one who can do project management.

How does this relate to the talk on professionalism... any talk of software development as profession that doesn't treat it as 2 very different professions with their own unique skills, is bound to be overly optimistic. Developers typically fall into 1 camp or the other.

Just my 2 cents.
Paul Beckford said…
@ Allain,

I hear what you say, and generally your observation holds true, but I see this as a weakness.

Most programmers have very little business/management awareness. I remember the shock on my first XP project, when the onsite customer told me I wasn't done yet, because it my solution didn't work/look exactly as he wanted.

On the other side are managers that quickly forget just how challenging software development can be in practice.

IMHO, good practitioners need both. We aren't self serving and in the back of our minds we should be the idea that we are here to serve our customer. I've moved back and forth between management and development and I believe that this has strengthened both abilities.


Higher Professional versus Tradesman. The analogies that I like are the creative ones, like fashion designer, song writer, playwright etc. I'm not sure whether there is a collective term to describe these people. Perhaps "Creative Professional". One area of our work that is always underplayed is the creative aspect. We start with nothing, other than perhaps an impulse by our customer and we must then help develop that into a vision and finally create something concrete.

The "code warrior" meme that I think Allain was eluding to, tends to over emphasize the technical aspects of the work, without any recognition of the creative aspects. Again, working closer with customers drives home that there is no one correct (technical) answer, merely solutions that your customer finds pleasing, timely and affordable and solutions that are non of these things.

Interesting discussion. In the end perhaps the software development "profession" is unique to itself.

Anonymous said…
I have thought about these things too. But I see the similarity more towards manufacturing (e.g. cars). There is a design and a production part. Project management goes along with both.
Design is done by engineers, but production more likely by "Joe the plumber". Programming is close to production. But we are not as automated as in the manufacturing industies. In the future I see less and less importance in programming, but in the design part. Although there is much to do to move from handcrafted products as it is today to more or less automatically produced products. Here is where lean management comes in.
We certainly can not stay where we are.
Bill Rimmer said…

Enjoyed the post.

I've been thinking about this and agree with the direction you're proposing. Specifically, trades imply the notion of an apprenticeship, something that is often lacking in today's software development industry.

We need to get away from the notion of software development as a profession - especially when 'true' professions are regulated and come with liability implications for practitioners.

Software development lacks credibility without some sort of formal approach to bringing in new practitioners. For outsiders it can be difficult to separate the true craftspeople from the mediocre developers.

Software development is something that you can only get better at by continuous practice. Starting off your career in an apprenticeship working under an experienced software developer can only be a good thing.