Is it any wonder that many software programmers never become masters of their craft?
A young person:
- graduates from university wanting to be a programmer
- is hired at a company that espouses love for programmers
- is assigned to a project and excited to create software solutions
- is assigned work by someone else who already did the thinking
- is asked to estimate how long to finish the work
- does the work and is wrong about the estimate
- feels like he failed
After this initial failure, the young person now wonders how everyone views the new-hire, fresh out of university? Naive? Young? Not useful? A bad hire? And the young person is now diverted from thinking about, knowing and perfecting his craft to ensuring that other people perceive him as a good hire, as a useful contributor and as someone they want to keep.
Another project comes around and the young programmer is again assigned as a team member. This time being a little wiser, the young programmer:
- asks to participate in the design of the system
- asks to be involved some interesting parts of the development
- is assigned work by someone else again
- is asked how long it will take to get the job done
- does the work and is wrong about the estimate
- realizes that the definition of done is different than the assigned work
- is told he needs to get better at estimating
Now the lightly seasoned programmer is wondering what he overlooked in university, what he may be missing and now concerned that his very first performance reviews will be mediocre at best. He is no longer thinking about how to be a good programmer; now he's trying to figure out what is making his estimates wrong and how to stay employed.
Fast forward ten years later, our young fresh-out of university programmer is now seasoned, if not actually jaded. Our now seasoned programmer knows that no one is really interested in how much or little software is written, how clever the algorithms or complex the integrations, how high the quality of software, the reliability, extensibility or whether he used industry standards, decreased long-term cost of ownership or eliminated hand-rolled vendor lock-in solutions. The only thing anyone ever asks of the programmer is "how long will it take" and "why didn't you get it done in the time you said it would take". The seasoned programmer has learned that the key to getting promotions, staying employed and being valued is measured in how well he meets his estimates (accuracy), how agreeable he is when someone does the thinking and hands off the actual work (good team member) and whether he participates in corporate events (corporate citizenship).
As a result of his professional experience, our seasoned software programmer pursues successful navigation of his corporate culture, craft agnostic. No one is asking him about his craft; only whether he's part of the solution or part of the problem.
People who choose software programming as a profession need to recognize the game board into which they are stepping. Project Managers assigned to 'control and manage' the project according to time, scope and budget even though they may have no idea what it actually takes to deliver the scope other than the budget and time estimates preceding project start. Ladder climbing managers who are assigned to make sure developers develop, testers test, requirements people generate requirements, time is entered weekly and people show up to meetings. Architects who construct architectural directions, designs and directives that have nothing to do with solving real business problems, substitute hand-rolled standards in place of industry standards and encourage technical staff to do as they're told rather than perfecting their craft and increasing value to the business.
Without the software, there is no system, solution, product, revenue or company. Without the software programmer, there is no software. Ironically, everyone who is not a software programmer will attempt to manage the software programmers to their own version of productivity and perceived value.
Dear Software Professional,
You stand in the midst of people. People who have personal identity, lives and responsibilities before they get to work. People who understandably bring their personal stuff with them to work. People who have professional desires and struggle to achieve them daily. People who are developing their own personal and professional world views, at the same time, in real-time, while you're present and involuntarily involved. People who are very often defining their own value by measuring their contributions against yours and those of everyone else.
No one is going to ask you to perfect your craft. They're busy trying to discover and/or perfect their own. All of these other roles want you to be a craftsman. That is why you were hired. However, they many not know to ask for craftsmanship or even understand what it really means. And in the event it doesn't look like you know your craft or that you are pursuing some form of craftsmanship, they'll step in and insert their own definition and method of done.
It is up to you to answer these questions for yourself.
- What is your craft?
- Are you a master of your craft?
- If no, what are you doing about it?
- If yes, how do you know?
After you figure this out for yourself, next is figuring out how to be a team member who pursues his craft in an environment that may not naturally enable such a feat. Let's party. Shall we?