Craftsmanship Begins With You

Craftsmanship Begins With You

Cory Foy
Cory Foy

April 13, 2012

What does it take to be a professional?

This week, we held series of events to kick off the launch of the 8th Light Florida offices in Tampa, FL. Our evening event was Uncle Bob Martin giving a talk on Demanding Professionalism in Software Development. At the end, I did a Q and A session with the audience, and one of the questions that came up was "How do I get my organization to care about craftsmanship?"

The context for the person asking was that they were a contractor dealing with a large, very legacy application being handled by a large team embedded in a large company. No tests. No refactoring. Probably lots of spaghetti code with large functions and methods. And it took me back many years to a smaller version of the same question: "How do I convince my boss to let me do TDD?" And the answer was as crystal clear as it was true.

You don't. You just do it.

Being a professional isn't something that you get permission to do. It's something you are. If you want to see craftsmanship and professionalism on your team, you start with you. But what does that mean? What are the qualities that set apart someone we would define as a craftsman? While there is a lot to be said in some great books, and in the craftsmanship manifesto, there are some specific qualities I identify with:

  • Hungry - One of the defining characteristics of applicants to 8th Light is their vocation - their hunger to learn. They aren't satisfied with their tools, or their knowledge, or their language. When things don't go right, they think through it, and reflect on it, and find ways to make that better. A similar passion is seen in Entrepreneurs who launch companies. But the same passion can be found inside larger companies - people truly hungry to learn, to grow, and to make themselves and their teams the best they can be.
  • Humble - Because of that hunger and that desire to learn, humility is an important characteristic. You can't learn if you have the attitude that you are the expert already, and therefore can't ever be wrong. When mistakes happen, a craftsman works not to blame, but to seek the root cause - even if it was with their code. (See how we handle bugs as an example)
  • Practiced - Sustainable growth doesn't come from all night reading sessions. It comes through the practice of the concepts you have, over and over, until they are second nature. So when the next spurt of learning comes in, you're able to retain what you had before, plus begin practicing the new skills. This is done through focused exercises like katas and koans.
  • Articulate - Because professionals are practiced, they can articulate the code smells they see. For example, is there anything wrong with the following:

    
    def show
    		id = params[:id]
    		@monkey = Monkey.find(id)
    		redirect_to not_found_path if @monkey.nil?
    		if @monkey.banana_pouch.color == :red
    				colorize_screen
    		end
    end
    
    

    Hopefully the answer is yes. But can you articulate why? Things like the The 4 Rules of Simple Design, the SOLID Principles and the Law of Demeter. It's good to be able to start "smelling" bad code - but even better to be able to have a sensitive enough nose to know what those smells are.

  • Diversified - Knowing a language is great, but it isn't enough anymore. If you do OO, you should try functional languages. If you use dynamic typing, you should try static typing. If you use a compiled language, try an interpreted one. If you use a relational database, try a document one. Try learning Seven Languages in Seven Weeks or Seven Databases in Seven Weeks.
  • Sustainable - There's a lot you can do, and a lot you can learn, but you have to do it at a sustainable pace. This is a lifelong commitment to your craft, and if you let long hours, venomous arguments, and worst of all - bad colleagues - bring you down, then it will be hard to be...
  • Passionate - And passion is the best part. I love talking about great teams, and about craftsmanship because of how much of an impact it can have on developers accustomed to the mentality that they are merely resources being used in the cog of some big machine. But there are questions you should be asking yourself and your team (especially if you are a team lead). And when you invest in yourself, and you invest in your team, truly amazing things start to happen.

The important thing is that you define being a professional in terms of who *you* are. It doesn't matter your team, your company or your position. You can change your organization or you can change your organization - but in both of those cases, it starts with not changing who you are - staying true to the value system that defines what you find acceptable. That kind of value system can be infectious. And when it isn't - gives you the confidence to find an organization that values the craft of software.