The people who are paying you to be a software developer are depending on you to know what you're doing. How can you instill in people confidence that you can deliver when you are unfamiliar with the required technology? In this week's column, Dave Hoover tells you how to build confidence by showing the people who rely on you that delivering software involves a learning process. Then allow them to watch you grow.
Human nature tells you to look competent. As software creeps deeper into our everyday lives, our society is increasingly dependent on your competency. Yet because of the continually evolving software development landscape, the average practitioner has many zones of ignorance. You are in a bind. The people around you are under tremendous pressure to deliver software, including your manager, your client, your colleagues, and especially you. You can see this need for confidence in their eyes when they ask you how long it will take you to finish task X. There can be tremendous pressure to pacify these people, to reassuringly tell them that you know precisely what they want, how you're going to give it to them, and when.
A software craftsman's reputation is built through strong relationships with clients and colleagues. Conceding to unspoken pressures and telling people what they want to hear will not build strong relationships in the long run. Tell them the truth. Let them know that you're starting to understand what they want and you're in the process of learning how to give it to them. If you reassure them, reassure them with your ability to learn, not by pretending to know something you don't. This way, your reputation will be built upon your learning ability rather than what you already know.
Get used to this learning process; this is the road to craftsmanship. Those of us uncomfortable with this process become experts: people who achieve expertise on one platform or in one domain and stick with it. Because of an expert's narrow focus, she can deliver functionality into a specific context better than anyone. While it is certainly important and inevitable for our industry to have experts, this is not the goal of the apprentice.
Expertise is a byproduct of the road to mastery, not the destination. Over the course of a craftsman's journey, she will work with countless technologies and domains. If, through practice or necessity, she develops expertise in one or more of them, so much the better. This is to be expected, just as the woman training for a marathon develops stronger leg muscles. She's not training to have strong legs, she's training to run. Like the motivated developer who after working on a Python project for two years achieves a deep knowledge of Python, the marathon runner's strong leg muscles are a means, not an end.
The critical distinction between a craftsman and an expert is what happens after a sufficient level of expertise has been achieved. The expert will do everything she can to remain wedded to a single context, narrowing the scope of her learning, her practice, and her projects. (You can make good money by doing this.) The craftsman has the courage and humility to set aside her expertise and pick up an unfamiliar technology or learn a new domain.
Experts focus intensely on what they already know, and, at the cost of ignoring their ignorance, they work hard to know more of the same. Craftsmen could be considered experts at learning, who identify an area of ignorance and work to reduce it. Like the soil in a garden, an area of ignorance can be transformed by cultivating seeds of knowledge. Be honest with yourself and the people who are depending on you; ask colleagues for help. Thus, you water these seeds by learning through experimentation, practice, and reading. Or you can choose to hide your soil of ignorance from the light. Embarrassed by its size, you cover it with a tarp, and your pride remains intact. The difference between an expert and craftsman is the difference between having a great garden and being a great gardener.
The expert has in-depth knowledge into a few threads of technology. With these threads, the expert has the ability to weave together robust software applications on a small number of platforms and domains. The master craftsman has the ability to weave a tapestry out of myriad threads. No doubt she will have her favorite threads, and her favorite combinations, but the number of threads will be high, allowing the master craftsman to adapt into a wide range of technological environments. This is where the road to mastery takes you. By exposing and confronting your ignorance, you will spin the missing threads much more quickly than by faking it in order to appear competent.
Editor's Note: This article was adapted from one of the patterns from Dave's book-in-progress From Apprentice to Journeyman: Guidance for the aspiring software craftsman. For more information about this emerging pattern language, visit http://redsquirrel.com/dave/work/a2j/.