Archive for the ‘craftsmanship’ Category

Kerry Buckley in the Wandering Book

Monday, July 12th, 2010

In the most recent entry of The Wandering Book, Kerry Buckley gives us a glimpse of his career and how he realised that he cared about code and the way he codes.

What I personally like about his story is the message Kerry sends (indirectly) to the developers out there who are not working in an environment where caring about the craft and continuous improvement are part of the day to day.

Kerry's entry in The Wandering Book

What I really like though about his entry is his reminder to look outside your companies boundaries and search inspiration and knowledge from other people.

There are many wise people out there from whom you can learn an awful lot!

Who’s code have you studied recently? What new techniques have you discovered?

Adewale Oshineye in the Wandering Book

Wednesday, June 2nd, 2010

It has been quite a while since the last entry to The Wandering Book has been made, but finally we have it! This time Adewale Oshineye, co-author (with Dave Hoover) of Apprenticeship Patterns gives us a gentle push as a community.

What have you made recently?

He rightly asks us what we have made, what we have learned by doing so and what is the next thing we are going to build.

Ade's entry in The Wandering Book

Ade's entry in The Wandering Book

There is one thing in his entry though that really made me nod and be totally in tune. He talks about generative communities; groups of people with overlapping values that, together, create things that interact with the physical world (conferences, software, articles, devices, etc).

Having said that, I am working on this problem for a couple of months now, trying to find a way to give back to my community (here in Winchester) and enable the growth of other people; either in terms of software development (teaching how to build software) or by infecting them with goodness and the will to help each other.

Five things I learnt from Corey Haines

Wednesday, March 17th, 2010

Recently I attended QCon and got a chance on the last day to pair with Corey Haines. We worked on a new rails project we’re building with a few friends (that’s the subject of another post). We’d spent a fair amount of time hanging out, but I hadn’t had a chance to sit down and actually code with him. We paired for a couple of hours in the QCon expo area just as everyone was packing up.

Here are a few lessons and some things I picked up.

REALLY learn vim. Watching Corey fire around vim was something else: my brain could barely keep up with where the cursor was sometimes. Sometimes it felt like he’d just moved the cursor to where he wanted it to be through Sheer Power of Thought. I’m no slouch in vim, but was impressed by just how much faster I’ll be able to go someday, as I continue to practice.

resource_controller. formtastic. That is all. These gems take out the legwork of building a thin restful resource-based rails app. You end up with a lot of tests and very little code to worry about. As webapps become more about javascript and the front-end, rails apps are becoming thinner and thinner, and these gems make them really fast to write.

Alias everything. Corey has a few really useful little bash tricks, like:

alias c='script/console'
alias r='rake routes | grep'

..and some others I didn’t catch. They save so much time and are so obvious that later I found myself banging ‘c’ into a console and wondering why it doesn’t work.

The summary of these lessons is another more general one:

Work to remove whatever constrains you from getting the computer to do what you want. We need to ensure that there is as little as possible in the way of getting stuff done. Everything else is yak shaving: slow typing, tool-illiteracy, whatever. Anytime we’re not thinking about the problem, we’re wasting time.

And finally, a meta-lesson:

Extend your pairing gene pool. It’s amazing how much you learn when you pair with someone outside your immediate sphere. Rather like when I first paired with Enrique, I learnt about stuff I would never have heard of otherwise.

I spent two hours working with Corey and it was a pleasure. Sadly we live a few thousand miles apart, but I’m looking forward to remote pairing sessions in the future.

Michael DiBernardo in the Wandering Book

Sunday, March 7th, 2010

The new entry of The Wandering Book by Michael DiBernardo is a very interesting one. In the first part of it he praises the Software Craftsmanship community (our strive to learn and improve, the way we try to make our software as simple as possible, etc), but it is actually the part “under the line” that caught my attention.

Michael DiBernardo's entry in the Wandering Book

My concern is the conflict between what we are preaching and how that is interpreted in the context of how we appear to others. Because seriously – if someone is pontificating to me about simplicity, elegance in design, attention to detail – how much can I appreciate what he is saying if he is wearing a 6 year old ironic t-shirt and khakis that are several sizes too big for him?

Michael has a very valid point there!

Software Developers are notorious for their out of the norm (to be diplomatically correct here) dressing habits. If we are to raise the bar in software development and try to be professionals we have to think of all the aspects of it. The little things, that our customers can see from us as professionals will surely reflect on how we interact with them. I am not saying we should wear suits and ties, but we surely need to work on our presence.

Imagine going to the doctors and he is wearing a think geek t-shirt about some sort of zombie rights and khakis… Would you let him perform open heart surgery on you?

BBC Talk on A Philosophy of Software

Sunday, February 21st, 2010

Video of a talk I gave recently at the BBC about the nature of software development. We discuss craftsmanship, apprenticeship and the limitations of university education, amongst other topics.

Watch the video here:

Bobby Wilson in the Wandering Book

Thursday, February 4th, 2010

It seems that The Wandering Book is travelling at higher speed now. We recently had a very insightful entry from Gustin Prudner and, to my surprise, today there is a new one; this time by Bobby Wilson coding fellow at Entryway:

Bobby Wilsons entry in The Wandering Book

In his entry he states:

There are ideas but there aren’t rules. Craftsmanship is an introspective process with an emphasis on building quality and value, but the discipline is up to you.

The thought of having different disciplines in different studios/workshops helps to create an environment where new ways of crafting great software can be learned. I would call that schools of practice (or thought).

Every studio/workshop has it’s unique approach to building their software, interacting with their customers, etc.

I was thinking about this last year, and I was pondering with the idea of creating an event inviting different craftsmanship studios/workshops to gather together and share their way with the other studios present. This way we could be able to learn from each other all sorts of techniques (from coding practices, billing techniques, customer collaboration, and a long etc).

The idea is still in my head, and I would love to make it happen anytime soon (maybe by the end of this year). Would you and your workshop/studio attend to such an event?

Gustin Prudner in the Wandering Book

Monday, February 1st, 2010

We have another wonderful entry to The Wandering Book, this time from Gustin. Gustin runs a small studio in Floyd, Virginia called Entryway. They follow a set of core values deeply ingrained into their culture embracing Software Craftsmanship to their daily lives as a business.

In his entry in The Wandering Book, Gustin, describes his thoughts on the Craft of Software. I was very pleased to read his entry and see that he, like many others, has created a culture of betterment around him, trying to nurture the environment around him with energy and his values.

I loved though one particular part of his entry:
Gustin's entry

A software crafter is often on the verge of obsession. Craftsmanship is caring enough to change the little things that may not be noticeable to a customer, whether it is for aesthetic reasons or for the future maintenance of code. It is the forethought toward the future evolution of market, client, and software.

Moreover Gustin has been the first person to write on (and have the courage) more than 2 pages on The Wandering Book which actually pleases me as we can see the brilliant result!

Here you can see Gustin’s original entry in The Wandering Book, or you can read it on his personal blog as well.

Driving out feature ambiguity

Friday, January 15th, 2010

Cucumber features are very useful. The ability to spec out what the customer wants in detail in a format they can read and understand really helps to communicatate what needs to be done. This combined with the ability to execute the feature to ensure that it is completed correctly catches many bugs and incorrect assumptions.

However there is one area of bugs that features don’t catch so well, and even cause to some extent. These bugs are built right into the text in the form of ambiguity, sometimes through the constraint of features being executable.

This came up recently in a conversation with James and Enrique at Eden Development about James’ apprentice task, the Snakes and Ladders Kata. It turns out that the text of one of the features runs against the commonly understood way that Snakes and Ladders works:

Scenario: Win the game
    Given player 1 is on position 97
    And player 1 rolls 3
    Then player 1 has won the game

Question: is that a valid scenario? Given the commonly understand rules of Snakes and Ladders, you cannot just start on position 97. Implementing it as written complicates the domain model.

How do you implement the first step? Do you go for a simple:

Given /^player (.*?) is on position (.*?)$/ do |player, position|
  @game.set_player_position(player, position)
end

The potential issue with this is that you are exposing a method that in real life won’t get called, just to set up a test. It’s also tying your model down to a particular structure, by implying that the game stores an arbitraty position variable for a player. This might not be the best way to model the problem.

The other option is to change the scenario such that the “Win the game” is tested in a similar way to the following:

Scenario: Win the game
    Given a game is started with two players
    And the following dice are rolled:
      |3|
      |4|
      |5|
      |5|
      (etc.)
    Then player 1 has won the game

That satisfies our understand of Snakes and Ladders, and gives us more freedom in our domain model. In this case, we simply modify the agreed scenario in the code and sidestep the problem.

Right? Wrong.

The important thing to remember is that the customer is always right about how the software should behave, even when it violates our commonly understood assumptions about the world. The software they want you to build might require a different implementation of Snakes and Ladders. They might have a 3 year-old daughter they’re planning to play the game with, who always wants to be given a headstart. In this case, we’ve not delivered what they want, simply because it makes life easier for us. We’ve let our assumptions and our concerns for good design drive out the features, rather than letting the features drive our design.

There’s another possibility: when the customer wrote this scenario, they simply used “starts on position X” as a shortcut and don’t really care if it’s possible to do this in real life. In this case, we can work with them to write the scenario so as not to cheapen our design for the sake of easier feature writing.

The key insight: there’s no way that we can know which it is from reading the scenario. We have to ask the customer and drive out the ambiguity in the feature.

We mustn’t let the necessary constraints of executable features build ambiguity into your conversations about what the customer really wants. And we must be constantly talking to the customer all the way through the iteration, especially if they’re not on site.

You might think “It’s only Snakes and Ladders, what does it matter?” It matters a great deal: situations like this come up regularly in real life projects. Practising how to deal with these issues and the conversations that result is one of the many powerful things you gain by doing katas.

What’s your take on the above problem? Have you come across it in real life?

Customer Collaboration: on Empathy

Wednesday, December 30th, 2009

The 4th value in the Manifesto for Software Craftsmanship reads:

Not only customer collaboration,

but also productive partnerships.

Being “in tune” with our customers has always been one of the most important aspects of my professional life. I have always tried to understand, really understand, the need of a customer; get to know where it itches.

When I was in Nigeria for 2 years developing the Value Added Services platforms for a mobile operator I spend my days running from operations to customer care up to marketing and back to coding (I actually spend more then one night coding). I was trying to understand all the perspectives of the software we wanted to develop and deploy so that our public, the mobile phone users of the country could enjoy the best service. I even responded to more than a call at the customer care centre and talked to users that had a problem with a given service.

Usually I would say I have a gift for understanding, and taking my time to understand, my customers needs.

The other day though I got totally blown away buy a level of professionalism and empathy that I had not experienced before.

My mother has recently been operated from a cancer and she is recovering at home. Her GP organised a special service from the so called Unidad de Paliativos (eng. Palliative Unit). Basically there is a doctor that comes to your house once a week and looks after you making sure everything is fine.

The day of the visit the doctor did not come alone for the visit, but had an apprentice with him. A learning doctor that assists him while he visits his patients.

The way this doctor acted and spoke during the visit left us all speechless (not in the literal way). He had a way of talking and understand my mothers concerns and situation that was beyond what I can possibly explain; as my mother said it was a finest hour (actually she used the german term Sternstunde).

I am not able to transmit the power of this doctor and his way of dealing with his patients, it was a far to awe inspiring experience. What I am possibly trying to express is deep respect and a desire to learn from this experience.

At the moment I am not sure in which way I am going to digest and apply this experience in my craft, but I am sure it will change the way I interact with my customers.

Coming back to the 4th value of the Manifesto I think it is just a starting point from which we have to explore the interactions and relationships with our customers.

productive partnerships sounds a bit cold and abstract, nevertheless it is a good starting point for a workshop/studio to expand upon and make it part of their school of thought.

What do you think? Do you have any experiences to share?

Software Craftsmanship on IRC

Tuesday, December 22nd, 2009

The other day I was looking around IRC (it was a long time since I had logged into IRC) and to my surprise I could not find a #software_craftsmanship channel!

Long story short (this should be just a little update) I have decided to log into irc.freenode.net whenever I can and be in the #software_craftsmanship channel.

This should give us a lot of opportunities to share ideas and thoughts (even help each other with smaller issues) in almost realtime.

I hope to see you around! :)

Enrique