Some Software Craftsmanship treasures

While reviewing some proposals for the SoCraTes (un)conference, the German Software Craftsmanship and Testing conference, I wanted to look something up in the principles statements that we came up with back in 2009 shortly after writing down the manifesto. Unfortunately I found out that Google Groups is going to turn down files and pages inside groups, and you can just download the latest versions of the files and pages now.

After downloading them, I found some treasures, which I would like to keep – even after Google took down the pages section in their groups. So, here it is.

Software Craftsmanship Ethics

I was involved in the discussion that came up to identify the principle statements similar to the Agile manifesto and principles there. It was Doug Bradbury from 8thLight who constantly tracked what the other twelve people on the mail thread were replying, and derived something meaningful out of it in the end. I don’t recall why these principles – which we later called the ethics – were never published on the manifesto page, but I think it had something to do with the discussion on the mailing list after we announced the final draft for discussion. (I obviously didn’t take the time to follow that discussion. There were too many replies for me to keep track.) So, here is the final version. Interestingly we saw the four main categories also in the four statements of the manifesto.

The Software Craftsman’s Ethic

***DRAFT*****

We Care
We consider it our responsibility to gain the trust of the businesses we serve;
therefore, we take our customer’s problems as seriously as they do and
stake our reputation on the quality of the work we produce.

We Practice
We consider it our responsibility to write code that is defect-free, proven, readable, understandable and malleable;
therefore, we follow our chosen practices meticulously even under pressure and
practice our techniques regularly.

We Learn
We consider it our responsibility to hone our craft in pursuit of mastery;
therefore, we continuously explore new technologies and
read and study the work of other craftsmen.

We Share
We consider it our responsibility to perpetuate the craft of Software;
therefore, we enlist apprentices to learn it and actively engage other craftsmen in dialogue and practice.

Original Software Craftsmanship Charter

In the early days we were struggling on how to get started. Back in November and December 2008 we collected together some statements from the books that we felt strong about. In the archive, this is kept as the original Software Craftsmanship charter. Later some of these statements were turned in for the manifesto and the principles. You can already see the structure of the final manifesto in there, but it’s still merely a brainstorming list. Here is the version from the google groups pages:

Original Software Craftsmanship Charter

Raising the Bar

As an aspiring craftsman/professional,

… we can say no– Do no harm

… we can work in a way we can take pride in.

… we take responsibility for the code we write

… we believe the code is also an end, not just a means.

… we follow a strict set of practices and disciplines that ensure the quality in our work

… we live and work in a community with other craftsmen

… we will help other craftsmen in their journey

… are proud of my portfolio of successful projects

… can? point to the people who mentored me and who I mentored

Here are some of my suggestions: (DougB)

As aspiring Software Craftsmen we are raising the bar of professional software development.??? We are proud of our work and the manner of our work??? We follow a set of practices and disciplines that ensure quality in our work??? We take responsibility for the code we write??? We live and work in a community with other craftsmen

??? We are proud of our portfolio of successful projects??? We can point to the people who influenced us and who we influenced??? We believe the code is also an end, not just a means.??? We say no to prevent doing harm to our craft

My suggestions: (Matt Heusser)? We take responsibility for the code we write ++? We take responsibility for our own personal software process(*)? We take responsibility for the outcome of the process???? That is to say, a laborer delivers software on specification???? A craftsman develops a solution to an interesting and ambiguous problem in a way that delights the customer

List of questions

Someone (I forgot who) mentioned a list of interview questions from the 8thLight office. They held some of the inaugural software craftsmanship user group meeting back in December 2008 there in Chicago, and eventually crafted together a basis for the manifesto. One of the attendee wrote down some interview questions which were floating around there. Here is the list:

List of Questions

What questions should be asked to a candidate to understand if he/she cares/understands what software craftsmanship is?

Do you follow a particular process to create your work?

What tools have you built to enhance your work?

When do you stop re-factoring and enhancing your code?

What are your training techniques?

How much time do you spend per week coding outside your main job?

How do you react when you discover a bug in your own software?

What are the first things you would teach a new apprentice?

How many languages do you know and can use consistently in the same project?

What are your most important influences in the programmers community?

Who is the best developer in the world in your opinion?

What makes you passionate about software?

Who else would call you a craftsman?

Do you consider your self involved with the software community?

Can you deliver consistent results in your code?

Can you define what good code is?

Can you point to some source code that you consider a masterpiece?

How do you react to something that you are forced to ship but is not consistent with your practices? (for example not tested?)

How do you stay current with industry standard?

Would you go back to a past customer project to fix your own bugs?

How do you define aesthetics and pragmatism in software?

Final words

So, having put these artifacts from the early days of software craftsmanship on my blog, I hope they won’t get lost. I still hope that the ethics statements we came up with will make it to the manifesto page one day, but until then I can reference this blog entry.