DEV Community

Discussion on: Software Craftsmanship as a Metaphor is a Career Glass Ceiling

Collapse
 
conw_y profile image
Jonathan • Edited

I hesitated to heart this rather lengthy and, I think, somewhat difficult to parse post. I'm just going to go off the title (though I accept that it might have been somewhat in jest or purposely provocative).

Speaking from my own experience of 10+ years in the industry (i.e. an eternal beginner who's reconciled himself to that fact) I have to say that the idea of treating software as a craft is one of the best and most beneficial ideas I've ever encountered.

The notion that it represents some kind of 'glass ceiling' I confess I find baffling.

If anything, I've found it to be more like a glass elevator.

What I take away from the 'software as a craft' movement isn't TDD, BDD, refactoring or even caring about code quality. It's something even more fundamental than that.

It's taking pride in what we do.

In pushing back against this post, there are three things I want to point out:

1. There's no one religion or ideology for software craftspeople to subscribe to.

Treating our work as a craft, as important, as something we take pride in, has nothing to do with medieval guilds or TDD or extreme whatever. These are merely ideas (valuable or not) that certain people have come up with. But there is no one way to execute the craft that would apply to every situation. If that were the case, then software development would have been automated out of existence long ago. But, by its nature, the execution varies from situation to situation. I would go as far as to say that every execution is unique and one-of-a-kind - just like a musical performance. I think the Japanese phrase "ichi-go ichi-e" captures this quite beautifully.

(I find it funny that we worry so much about software development becoming automated and ceasing to exist as a human profession, and yet we don't apply that notion to other complex human undertakings, such as psychotherapy or science or brain surgery. Perhaps we spend so much of our time in such close proximity to the processes we are automating that we think we are one with them - but we're not.)

This doesn't mean there aren't superior and inferior executions. As with any discipline, as you work on it, you discover flaws and mistakes and learn how to avoid repeating them in future. You mature and grow and perhaps even develop a new technique. Programmers aren't born.

But no one can force you to subscribe to their ideology or vision of what a software developer should be. People can offer ideas. But each craftsperson is free to cultivate the craft within themselves. To cultivate that which they believe is important and crucial, based on their own experiences, empirical knowledge and personal capabilities. There will be schools of thought and clashes of ideas, just like there have been with every field of human endeavour - whether it's music, architecture, politics. But ultimately, as with all of those, each individual has their own mind and their own idea of what it is that they do. And we need a diversity of ideas and approaches to solve the problems of a world that is becoming radically more complex every day.

2. Career and craft don't clash, in fact they're kind of the same thing.

Do you think Beethoven was such a genius that he didn't have to hustle? Do you think Martin Luther King or Ghandi didn't have to market and sell themselves? I mean even Jesus Christ had to deliver his sermons on a giant hilltop and speak in a loud voice so thousands could hear him.

Anyone who wants to do this as a living and be successful has to take full responsibility for sustaining it financially and in every other respect. We must negotiate hard. We must ruthlessly market and self-promote. We must meet deadlines when meeting them is the difference between keeping and losing the job.

Your unit tests and careful designs mean nothing if the business goes under. What would Facebook's investors have preferred - perfect code or a multi-billion-dollar business?

If there's anything a craftsperson doesn't do, it's to mindlessly treat every case in exactly the same manner.

Just as a doctor doesn't faff about with a patient who's on life support and could die any moment, a software craftsperson doesn't faff about unit testing every square inch or drawing the most detailed UML diagram in history, when there's a production issue costing the company thousands of $ every minute.

Taking the situation into account is not compromising your principles, it's applying the right principles at the right time.

Enough of the "tragic hero" mentality! No one benefits from you losing your job because your "dedication to the craft" forced you to spend years perfecting a single code base, whilst neglecting your C.V. and your elevator pitch, only to have the credit for your work go to some rascal in senior management!

Marketing yourself, selling yourself, hustling, bargaining and negotiating, seeking out the highest paid and most prestigious positions - all of these are part of the lot of the software craftsperson. You may even have to take a pointy-haired job title, like 'Head of People' or 'Strategic Leader'. You are not a sell-out for not being sold down the river. Developers should be as aggressive, ruthless, cunning and manipulative as they possibly can be, for the purpose of doing what they love and building a comfortable career and life out of it.

Would you want the top dentist in the world to be some lilly-livered, weak-willed schmuck who accepted underpaid positions and gradually sunk into a pit of despair and boredom, eventually retiring to a life of reading? HELL NO! YOU WOULD WANT HIM WORKING ON YOUR TEETH! If he had to sometimes neglect other people's feelings or focus on his C.V., you would be happy for him to do it. (Ok, I admit to coming off a bit like Jordan Peterson here.)

There is no dichotomy between doing what you love and doing what it takes to get there. The two are the same thing. If you can't sell yourself into a well paid developer role, you don't deserve that role. Simple as that.

3. We aren't as different from other fields as we think

Software developers seem to think of themselves as either gods or vermin. We're either changing the world or we're pathetic underlings who are forced to obey our overlords (bosses, clients, managers, users, etc.).

The truth is, our problems aren't entirely different from the problems of any other profession.

Do architects have to sometimes deal with tight deadlines or confusing requirements? Yes. Might they have to prove themselves all over again in a job interview, even if they've been doing it for 20 years? Sure. Do they sometimes fail to achieve their platonic ideal, due to realities of time, cost, politics, regulation, etc? Almost certainly.

Why do we expect some kind of great "reward in heaven" for what we do? It's just another job. Sometimes I think we should get over ourselves. Yes, it's unique in a way. But that doesn't mean we are exempt from the normal laws of economics, supply and demand, and of course, human nature.

This goes back to the point about career and craft being the same thing. We shouldn't kid ourselves that just because we're good at software, that we can hack around real life and not even bother with careerism, like promoting and selling ourselves. We should have the humility to realise that we share this world with every other human being, and so we have to deal with human problems, not just machine problems.

I would even go to the end and say that the twists and turns of a software developer's career are really the twists and turns of the hero inside of every human being. That life is a constant and ongoing evolution. That there are always booms and busts, good times and bad. Opportunities for recognition as well as theft of credit. That we will always encounter some mixture of problems that the world imposes upon us and problems that we create for ourselves. In navigating the messy quagmire of reality, we can interpret the world in various ways. The point, however, is to change it!


Anyway that's my lengthy, wordy speil. Your post was valuable in that it triggered many thoughts, as you can see. But I have to push back as well, because for me, software is most definitely a craft, and something I will do until I die.

Collapse
 
daedtech profile image
Erik Dietrich

I understand and welcome folks pushing back, as you put it. I certainly have opinions about the software world that (1) might stir controversy and (2) aren't for everyone.

But as kind of an aside and piece of unsolicited advice, have you thought of taking this and posting it as your own DEV article or on your own blog, or both? You've written a ~1,400 word rebuttal with a thesis, supporting arguments, headings, and conclusion -- a fully baked, well conceived blog post, if you want it to be.

I won't begin to try to respond in a comment because the scope is simply too large to do so. But, if you port this to a first-class post, I'll happily tweet/share/whatever it out, because I imagine there are plenty of people that read my stuff that don't agree with all of it and would appreciate contrasting points of view.

Collapse
 
v6 profile image
πŸ¦„N BπŸ›‘

Ok, I admit to coming off a bit like Jordan Peterson here.

Improve the hygiene of your dwelling cubicle, bucko!