From David H. Hoover and Adewale Oshineye. Illustrated by Paul A. Hoover.
DRAFT 2006-04-10

Walking the Long Road


Do you have training and achievement certificates hanging around your cubicle? Back when Dave had his very own cube and even less experience than he does now, he conspicuously piled a stack of certificates near his desk. The pile featured a Brainbench "master" certification in Perl and grew to inclue certificates proving that he had completed various multi-day trainings in C, J2EE, Vignette, and ATG Dynamo. This small stack of pseudo-parchment reassured him (and his organization) that Dave knew what he was doing. He had been trained.

Meanwhile, Dave had started to ExpandHisBandwidth?: through perlmonks.org and the comp.lang.perl.* newsgroups he had discovered some exceptional Perl hackers. The hackers' expertise was daunting, particularly because Dave could see that they were still learning, and fast. It began to dawn on him that he had barely scratched the surface of what it meant to be a great software developer. Over the following months, his pile of certificates slowly disappeared beneath a larger pile of scratchpaper and print-outs of book drafts and tutorials.

Through his observations and interactions with a few of these exceptional hackers, Dave was captured by the learning process. Periodically he would catch a glimpse of the depth and breadth of the hackers' knowledge and come away either discouraged or inspired. Dave was discouraged by how little he understood, yet inspired by the power of these hackers' abilities. He threw himself into his BREAKABLE TOYS and began to READ CONSTANTLY.

The more Dave learned, the more he recognized how far he had to go. Over the next couple years he had the good fortune to collaborate face-to-face with some exceptional software developers. Dave saw that although these exceptional people were miles ahead of him, they were walking the same road...


The Long Road

"'How long will it take to master aikido?' a prospective student asks. 'How long do you expect to live?' is the only respectable response." George Leonard, Mastery

"To become truly good at programming is a life's work, an ongoing enterprise of learning and practicing." Ron Jeffries et al, Extreme Programming Installed

For every step you take toward mastery, your destination moves two steps further away. Embrace mastery as a lifelong endeavor. Learn to love the journey.

THE LONG ROAD is for people aspiring to become masters of software craftsmanship. This long (yet bright) journey will bring out of you a rich set of abilities. You will become an expert at learning, problem solving, and developing strong relationships with your customers. You will come to wield knowledge and technology as the samurai uses his short and long swords. You will come to comprehend and appreciate the deeper truths of software development.

THE LONG ROAD is not for people aspiring to become CIOs, project managers, or wealthy. Yet, along the way, it is not unlikely that you will find yourself taking on roles of power and resposibility or the recipient of significant amounts of money. But these roles and benefits are not what the successful apprentice aspires to. They are by-products of a lifelong journey. Rather than counting the days to retirement, the craftsman will willingly and joyfully work into his final decades.

One of the primary goals of this book is to encourage software developers to walk THE LONG ROAD. The patterns in this chapter combine to help apprentices remain on the path to mastery. We don't want to give the impression that what we call THE LONG ROAD is a single road (see DRAW YOUR OWN MAP) or that it's the right road for every software developer (see A DIFFERENT ROAD). Some developers leave software development permanently and become executives, testers, salesmen, or project managers. This is a great and necessary thing, and these are the right roads for them. But this book and THE LONG ROAD are not for those people.

If an ACCURATE SELF ASSESSMENT is the cornerstone of a successful apprenticeship, THE LONG ROAD is the foundation. The transition from apprentice to journeyman is only the first few steps along THE LONG ROAD to mastery. Like a martial artist attaining the rank of black belt, a new journeyman realizes how incredibly far he has to go.

Software developers are fortunate. Ours is a complex and profound path, a path that by its nature changes continually. Moore's Law marches relentlessly on, regularly opening up new opportunities for craftsmen to explore new platforms or reprioritize the characteristics of a sufficient program. And yet, other changes are often superficial. New technologies replace older technologies yet solve the same fundamental problems. While there will always be new technologies to learn and better hardware just around the corner, THE LONG ROAD teaches craftsmen the deeper truths of the craft, allowing the masters to transcend specific technologies and cut to the heart of the problem.


Craft Over Art

"I would describe programming as a craft, which is a kind of art, but not a fine art. Craft means making useful objects with perhaps decorative touches. Fine art means making things purely for their beauty." --Richard Stallman in "Art and Computer Programming" by John Littler

Context: You are being paid to build something that will solve a problem for a customer.

Problem: Although there is a proven solution available, your customer's problem represents an opportunity to do something truly fantastic, providing you with an opportunity to create something beautiful that will impress your KINDRED SPIRITS.

Solution: Craftsmanship is built upon strong relationships. Focus on delivering value to your customer over advancing your own self-interests.

As a craftsman you are primarily building something that serves the needs of others, not indulging in artistic expression. As Laurent Bossavit put it: "For a craftsman to starve is a failure; he's supposed to earn a living at his craft." Consequently you must find ways to do your best work in ways that place your customers' interests over your own need to display skill or pad your resume. However this does not mean abandoning the minimum standards of competence provided by the software development community. Walking THE LONG ROAD means you must balance both sets of conflicting demands. If you starve because your creations are too beautiful to be delivered in the real world then you have left the craft. If your desire to do beautiful work forces you out of professional software development and away from building useful things for real people then you have left the craft.

The things we build for customers can be beautiful but must be useful. Part of the process of maturation encompassed by this pattern is developing the ability to sacrifice beauty in favour of utility if and when it becomes necessary.

Indulging in the creation of beautiful but useless artifact is not craftsmanship. A craftsman values a 50 line game that makes someone smile over a 1 million line game that pushes the frontiers of computer science but is unplayable.

Another consequence of choosing CRAFT OVER ART is that your customers will need you to be able to produce satisfactory quality even when you don't feel like it. A craftsman is unwilling to wait until inspiration strikes before he delivers artifacts that satisfy his customers. This has both positive and negative connotations. On the one hand he is barred from the idyllic playground where other people pay him to build the things he wants. On the other hand, the craftsman and his customers have the satisfaction of knowing that they created software that provides immediate value.

Ken on craftsmanship

"Working on real problems for real people is what hones the craft, not just doing it for self-satisfaction." Ken Auer, email


Sustainable Motivations

"Anyone who has ever seen a programmer at work...knows that programming itself, if the programmer is given the chance to do it his way, is the biggest motivation in programming." Jerry Weinberg, The Psychology of Computer Programming

Context: As an apprentice, you must develop your technical skills. Because of this you will find yourself in the trenches.

Problem: Working in the trenches is rigorous, sometimes tedious, sometimes exhausting, often frustrating, and frequently overly chaotic or constraining.

Solution: Ensure that your motivations for craftsmanship will adapt and survive through the trials and tribulations of THE LONG ROAD.

There will be days, weeks, and months that you love your job. Like Fred Brooks, you'll chuckle to yourself, in awe that you actually get paid to develop software. The software you write will flow effortlessly from your mind, through your fingertips, beautiful to behold in function and design. These are good and extraordinary days. In other words, they are not your ordinary days.

"...there is not much overlap between the kind of software that makes money and the kind of software that's interesting to write. ... If you want to make money, you tend to be forced to work on problems that are too nasty for anyone to solve for free." Paul Graham, Hackers and Painters

As Paul Graham so rightly says, the typical programming job will put you face-to-face with tedious, vaguely-defined, and needlessly complex problems. Nasty, wicked problems. What's more, you may eventually be faced with bureaucracy, difficult personalities, and spotty leadership. There will be days, weeks, and months that you question your commitment to the craft. When you are confronted with these problems, it is crucial that your motivations to program are aligned with walking THE LONG ROAD. A few examples to illustrate...

Some programmers can become inadvertently trapped by their motivations. Jerry Weinberg describes this phenomenon as The Golden Lock in More Secrets of Consulting: "I'd like to learn something new, but what I already know pays too well." The risk of the Golden Lock highlights the importance of aligning your motivations with THE LONG ROAD, which requires a motivation to achieve mastery. A desire for mastery should motivate you to be wary of Golden Locks as they inevitably present themselves. As you progress as a craftsman, you will be faced with tough decisions that will determine whether you have the freedom to stay on THE LONG ROAD or whether you will find yourself trapped in a Golden Lock. An example:

Obie is an exceptional Java programmer whose reputation was built on his Java expertise. Obie had a decision to make: continue to grow his Java-expert status or learn a promising new web framework (Rails) in an unfamiliar language (Ruby). Obie chose to focus on learning in order to expand his toolset, the mark of a craftsman. He set aside the safety of his Java reputation and became a Ruby newbie, avoiding a Golden Lock.

On a couple occasions Marten Gustafson has found himself in the midst of a project death march because his passion for the craft induced him to throw all of his time and energy into the project. To keep your motivation aligned with THE LONG ROAD, it is essential that you NURTURE YOUR PASSION for software craftsmanship while keeping it in balance with the the other aspects of your life. Naturally, there will be times where the scales are tipped in one direction. Nevertheless, all along THE LONG ROAD, you should be concious of this balancing act.

Dave's low pain threshold

During the evolution of this pattern, David Wood (one of my KINDRED SPIRITS) shared some conventional wisdom with me: "Do what you love and the money will follow." This advice resonates with me because I am a complete wuss when I can't do what I love. On the flip side, when I'm doing what I love, I find that I have an overwhelming amount of creativity and energy to throw into my work, which ultimately provides me with greater financial rewards. While many programmers could probably find higher paying jobs in the short-term, the money that follows from doing what you love will pay off handsomely in the long run. To read more about this conventional wisdom, read (college dropout and Apple co-founder) Steve Jobs' commencement address to Standford's class of 2005. Dave Hoover


Nurture Your Passion

"To only a fraction of the human race does God give the privilege of earning one's bread doing what one would have gladly pursued free, for passion. I am very thankful." Frederick Brooks, The Mythical Man Month

Context: You have been hired as a software developer.

Problem: You work in an environment that stifles your passion for the craft.

Solution: Take steps to protect and grow your passion for software craftsmanship.

To become a journeyman you will need to have a passion for software craftsmanship. Unfortunately, your daily activities often work to diminish this passion. You might be faced with demoralizing corporate hierarchies, project death marches, abusive managers, or cynical colleagues. While it's doubtful that your passion will grow when exposed to such hostile conditions, there are some basic actions you can take to sustain it.

Work on what you like. Find something at work -- anything -- that interests you. Even if it is only a small fraction of your time, identify it as something you enjoy and pour yourself into it. If you can't spare enough time during the workday for this activity, consider putting in some extra time. If this isn't feasible, dedicate some time outside of work to build some BREAKABLE TOYS.

In a presentation at O'Reilly's Open Source Convention (OSCON) 2004 entitled Great Hackers, Paul Graham said, "The key to being a great hacker may be to work on what you like. ... To do something well you have to love it. So to the extent that you can preserve hacking as something you love, you're likely to do it well."

Seek out KINDRED SPIRITS. Join a local user group that focuses on something you want to learn more about. Start a weblog and read blogs that interest you. Participate in online forums and mailing lists and SHARE WHAT YOU LEARN. Start a study group using the Knowledge Hydrant pattern language from Joshua Kerievsky.

STUDY THE CLASSICS. Immersing yourself in some of the great literature of our field can carry you through the rough spots when your passion is in jeopardy. These timeless books can open your eyes to a different world, a world where things can be better.

DRAW YOUR OWN MAP. There are times when your needs, goals, and aspirations contradict the career paths your employer provides. Moving into an organization that offers career paths congruent with your own can protect your passion.

Project death marches are probably the most damaging of the hostile conditions. It's hard to imagine how you could protect your passion, let alone grow it, in the face of a death march. It saps your time and your energy, preventing you from taking any significant actions to protect your passion as more important issues like personal health and strained relations at home demand your attention. Death marches play into the hero mentality that is prevelant in many software development organizations. The people on THE LONG ROAD are not the heros who sprint for a few years and burn out, they are the people walking at a sustainable pace for decades.

To grow your passion, set clear boundaries that define the sort of working environment you are willing to work in. This might mean you leave work while the rest of the team stays late, that you walk out of a meeting that has become abusive, that you steer a cynical conversation toward constructive topics, that you refuse to distribute code that doesn't meet your minimum standards. The result could be you get passed over for pay raises, promotions, kudos, or popularity. But these boundaries are necessary if you are going to break free of the hostile conditions and keep your passion strong.

Later in his OSCON presentation, Paul Graham went on to say, "Try to keep the sense of wonder about programming that you had at age 14. If you're worried that your current job is rotting your brain, it probably is."


Draw Your Own Map

Context: Any given employer can offer only a limited sub-set of all possible career paths.

Problem: None of the career paths that your employer provides fits for you.

Solution: Consciously set out clear goals that address what's missing from your life and what you want to do about it. Identify the skills you feel you are lacking and have a go at imagining the sorts of experiences that would help you plug those gaps. Combine all of those into a conscious vision of the kind of person you want to be when you are a little further on the path. Then act upon it.

It is vitally important that you take the first step even if it doesn't seem that significant. By taking that first step you generate the momentum that will sustain you towards your goals. It's that very willingness to take the first terrifying step (and all the other steps later on) even in the absence of a perfect plan which turns your map from a daydream into reality.

Rather than just writing down high-level goals try to define small achievable steps. These small steps will provide feedback which you can use to modify your map but they also make it easier to get help from KINDRED SPIRITS to achieve your goals. After all, there's not much anybody else can do to help you become what Paul Graham calls a "great hacker" but they can point you to resources which will help you learn Lisp or unix socket programming or achieve similarly well-defined goals. Ideally your goals will be S.M.A.R.T (Specific, Measurable, Achievable, Relevant, Time-framed).

If you find your vision of yourself is not in accord with your employer's vision for you and there doesn't seem to be a way reconcile the differences, examine other opportunities to see if they're heading in the desired direction. Remember there isn't one single path that all apprentices follow. Instead, successful apprentices follow paths that share a certain family resemblance. These resemblances do not happen because apprentices are inexorably shepherded into making the same decisions by their mentors. They happen because each apprentice consciously or not chooses their route through life based on an overlapping set of values.

You will continuously reassess your map as your circumstances and values change. Sometimes your map will be in accord with that of those around you and sometimes your map will require you to chart your own path through the wilderness. Some apprentices we've spoken to have found that being open about their current map has enabled them to find KINDRED SPIRITS whilst maintaining healthy relationships with current and past employers. The only constant is that the map is always yours and you're free to redraw it at any time.

Use SUSTAINABLE MOTIVATIONS and IGNORE YOUR TITLE to prevent your current title and salary from narrowing the possible destinations on your map. If you need to move into a less hierarchically impressive role in order to stay "on the map", consider THE LONG ROAD and compare the relative importance of impressive titles and salaries to working in a company that is more congruent with your goals.

Desi draws her own map

I took a job working at a start up company doing all sorts of things including database management, system administration, quality assurance, source control, and even some project management. The role changed over the years and after a while I started to feel the itch to try my hand at programming again. I started out with SQL scripts, Perl scripts, and some shell scripting. These scripts revolved around all of the other duties I mentioned above. I realized that programming was actually fun when you had the time to spend in learning what you were doing and didn't have the pressures of an actual class. I was happy with this for a while but the pressure from my boss on me to become more systems oriented started to conflict with my desire to move into development. I lost motivation for programming because my job demanded other types of learning and work. I was frustrated because it was not the work I wanted to be doing but I felt that I had managed to get myself stuck. I wanted to leave production operations and system administration behind or at least only do it as a side effect of writing code but the company I was working for would not allow me to make that move. I was having a difficult time finding a job as a developer due to the fact that I had been out of school for 4 years but had no real programming experience. I left the company and went to another company and continued in a configuration management role. I started to try to introduce Perl to this new company and I was met with a very large resistance. I realized that I would have to make another move because my desire to write code was getting stronger. Fortunately ThougtWorks? decided to take a chance on me. Desi McAdam, email

Chris pushes the learning limit

At Intrado, Dave Oberto taught me everything I know about SQL. He was the migration lead, and I was the test lead, and he was an amazing programmer. Frank DeSuza? taught me everything I know about C, pointer arithmetic, and all the stuff close to the machine. We often employed a contractor named Doug who taught me all I know about software design. I learned a huge amount working there. This annoyed the people around me. I finally left when I was told flat-out that I would not be allowed to learn any more, and that, while I'd been highly successful by exceeding my job description and breaking the boundaries between testers and developers, there were limits -- I wouldn't be able to learn to code there. So I left. Chris McMahon, email


Use Your Title

Context: As a result of your PERPETUAL LEARNING, you have been hired or promoted (formally or informally) into a position with a title containing words like "senior", "architect", or "lead".

Problem: Your ACCURATE SELF ASSESSMENT conflicts with the title you have assumed.

Solution: Do not allow your title to affect you. It is a distraction that should be kept on the outskirts of your consciousness. Use it to gauge your organization, not yourself.

Don't be fooled by an impressive title. Your mother might think you deserve it, but impressive titles and responsibilities do not indicate that your apprenticeship is over. They only serve to remind you that there is a shortage of craftsmen in our industry.

The other side of the coin is an unimpressive title despite the fact that you have surpassed your colleagues. Like the flattery of an impressive title, the frustration that comes from a lack of recognition should remind you that our industry has a problem. Again, use this situation to measure your organization and its fit for you rather than allowing the frustration to slow you down.

Another variant of this theme is informal vs. formal titles. For instance, when your role on your team has grown into a position of authority, despite your formal title remaining the same. These informal titles can be hard to ignore, because they are constantly reinforced by your peers, despite the fact that they conflict with your ACCURATE SELF ASSESSMENT. During these times, your connections with YOUR MENTORS and KINDRED SPIRITS will be critical to keep your self-assessment grounded in reality.

Dave sees the sign

Two years after I wrote my first program, a CGI script, my title was "senior application developer". Having developed a fairly ACCURATE SELF ASSESSMENT, I saw the humor in my situation. Rather than believing that I had achieved my goals, I saw this title as a sign that I needed to move on, to DRAW MY OWN MAP.


Stay In The Trenches

"Seduced by the siren song of a consumerist, quick-fix society, we sometimes choose a course of action that brings only the illusion of accomplishment, the shadow of satisfaction." George Leonard, Mastery

Context: As a result of your PERPETUAL LEARNING, you have established a reputation as someone who can effectively deliver software. Within your organization, exceptional work is rewarded with promotions up the hierarchy.

Problem: You have been offered a promotion into a role that will pull you away from programming.

Solution: To remain on the path to journeyman, work with your employer to find other mechanisms for rewarding you.

This offer will test whether you have SUSTAINABLE MOTIVATIONS and are willing to walk THE LONG ROAD. Most people equate promotion into management with success. They assume that taking a promotion into management is a no-brainer, a sign that you are on the right path. Aspiring craftsmen must not be fooled into believing that they will remain a "technical manager" for long, since, as Pete McBreen? wrote, "As soon as a person stops practicing, her mastery fades." Every day that you are not programming is another step away from becoming a journeyman.

Instead, work with your employer to find other mechanisms for rewarding you. These may include more pay or non-traditional technical leadership roles such as internal consultancy. If your organization is inflexible then it is better to seek opportunities elsewhere (see DRAW YOUR OWN MAP) than to permit yourself to be promoted away from the craft.

Related: STAYING IN THE TRENCHES is a way to NURTURE YOUR PASSION. When you accept a promotion that allows you to continue programming full-time, apply USE YOUR TITLE.


A Different Road

You have DRAWN YOUR OWN MAP and followed it diligently. Yet the map you have drawn leads you away from THE LONG ROAD. Follow your own map and remember what you learned on THE LONG ROAD.

You have been walking the long road for some time. But now as a consequence of DRAWING YOUR OWN MAP you have reached a point where you have realised that it is no longer a suitable choice for you. You have found another path which has rewards that are more in tune with your current values: this may be more time with your family or it may be more money or it may be that a new vocation has captured your attention. Whatever it is, it means saying goodbye to the craft and THE LONG ROAD. This may or may not be permanent.

You may leave the road permanently but the values and principles you developed on the road will always be with you. As Dave found out when he ceased to be a family therapist, he couldn't take Prospero's choice (burning his books and breaking his staff) but brought the lessons and experiences from that vocation to his new craft. The same applies to you.

Larry's detour through family therapy

In a sense, I can't stay away from the people issues any more than I can stay away from computers. I thought I had escaped when I bid farewell to the computer field in July of 1976, declaring my independence even as America celebrated the bicentennial of its independence. Trained as a family therapist, I ended up spending more than a decade in private practice and agency practice working with couples and families and troubled adolescents. But the forces of the universe conspired to steer me back toward the technological frontier. Larry Constantine, The Peopleware Papers


The patterns that directly support an apprentice's journey on THE LONG ROAD can be assembled into myriad combinations. Their ordering in this chapter does not imply a linear progression. For example...

You may be walking THE LONG ROAD with relative ease. Your working environment is not stifling you, your passion for the craft is strong. You are excelling. You receive a promotion to what your organization calls "architect" and you are still programming full-time. Your ACCURATE SELF ASSESSMENT informs you that it's time to USE YOUR TITLE. Simply USING YOUR TITLE to guage the level of your organization may be enough to keep you on THE LONG ROAD, it might be that no other patterns are needed.

...or...

Your organization might emphasize financial rewards. There is a constant, unspoken organizational undercurrent that pressures people to focus on making more money, because, after all, making more money means you're more valuable to the company. You recognize the undercurrent and the danger it presents to your journey. You NURTURE YOUR PASSION and focus on maintaining SUSTAINABLE MOTIVATIONS. Your focus on CRAFT OVER ART has grown your reputation and you have been offered a promotion to project manager. By STAYING IN THE TRENCHES and DRAWING YOUR OWN MAP you work with your employer to define a career path that will keep you on THE LONG ROAD.

...or...

You have been programming since you were very young. You program because you enjoy creating beautiful, elegant solutions. But now, in the corporate world, you are faced with tasks that are not enjoyable and with customers who need you to deliver functionality, and they don't care about elegance. You recognize that for the forseeable future, your motivation for programming is not aligned with THE LONG ROAD. You take steps to NURTURE YOUR PASSION as you develop more SUSTAINABLE MOTIVATIONS by focusing on CRAFT OVER ART. You gradually develop a motivation to establish strong relationships with your customers.

The possibilities are as limitless as the contexts that apprentices live within.