Category Archives: Software Craft

Software Craft

Software Craftsmanship week: A brief history

To conclude the software craftsmanship week, I would like to take a brief look on the history of this movement. So, we’ll take a look on the Software Craftsmanship book, on the creation of the Manifesto for Software Craftsmanship, on the writing of the Software Craftsman’s Ethic, The Wandering Book and some apprentice blogs, some conferences, and the software craftsman swap programs from Obtiva, 8thLight, and Relevance. WikiPedia also has a great history on it with some points I won’t mention here.

Continue reading Software Craftsmanship week: A brief history

Software Craftsmanship week: Deliberate Practice and Learning

Reflecting over the history of the Manifesto for Software Craftsmanship and the ideas we concluded for the The Software Craftsman’s Ethic, so far I just covered two aspects. The key ideas behind the manifesto and the ethic statements is that craftsman care for their work, taking pride in it, they practice their craft regularly, they learn deliberately, and finally they share their knowledge in communities and with peers. So far, we have started our journey this week with on the sharing part, and continued to take a closer look on the caring part in the last two days. Today, we will spent time on deliberate practice and learning parts.

Continue reading Software Craftsmanship week: Deliberate Practice and Learning

Software Craftsmanship week: Clean Tests

To some degree I envy programmers for their clear guidelines. One of these set of these guidelines is well-written in Robert Martin’s book Clean Code – A Handbook of Agile Software Craftsmanship. (Personally, I hope that Kurt Häusler will review it this Software Craftsmanship week on his blog.) So, today I decided to write about Clean Tests, and what a book on the topic should cover.

Continue reading Software Craftsmanship week: Clean Tests

Software Craftsmanship week: Apprenticeship in Software Testing

The Mis-education and Re-education of a software tester is a topic that I see discussed heavily. In the past I have reflected back about my personal education as a software tester, and what I had to contribute myself to this. After having read Pete McBreen’s Software Craftsmanship – The New Imperative I started to understand part of the problem. In chapter 2 McBreen explains most flaws of the Software Engineering metaphor. This is my first blog post in the Software Craftsmanship week 2010. I will spend some thoughts on related topics over the course of the whole week. Today, I would like to take a closer look on educational models for testers – in Software Engineering and what clever people have come up with for compensation.

Continue reading Software Craftsmanship week: Apprenticeship in Software Testing

The challenge of the Nine Smurfs

On Monday, I issued a little challenge on a smurf house we got as a wedding gift. The challenge resulted in eight comments overall, and I was struggling to clarify my initial observation. To make things short, I learned something from the comments. What I initially observed was, that the Brainy Smurf was reading in front of a flower, while Smurfette carried a watering pot in front of a pile of books on the first floor on the left. From the comments on my blog I learned, that I should have taken the hindsight, and do some more follow-up testing. The variety of similar mistakes in the arrangement of the smurfs was fabulous.

That said, when going through the comments, I need to find a way to rank the responses I got. A simple second-order measurement could be the number of comments per individual. In this category, Jeroen Rosink is the clear winner. He left two comments. This does not say anything regarding the quality of the comments, of course. So, I needed to find a different rating scheme.

So, on the contextual things remarked, I even didn’t get a hint, why Painter Smurf is in front of the cake, why Handy Smurf is trying to fix the gift in front of him, why Chef Smurf wants to taste the blue paint, or what any of the other smurfs do there.

Regarding the building, the inconsistencies in the building itself and the weather outside are great things to notice. In addition the arrangement of the Smurfs with regards to the background could be a point. Why is Papa Smurf working in that distance to his table? Why does the Fisher Smurf fish the pillow from the Sleepy? Where are the stairs to the first floor? Where is the chimney outside? Well, if you would be able to look on the back of the house (a mushroom) and get a 3d impression, you could see that the walls on the first floor are less in depth than on the ground. So, the chimney could go out of the mushroom house outside, but on the back of the house no indication of any chimney are present. The comment from ElizaF was also very well put. The structure of the building is not well architectured, as there is no kitchen, and no toilets. Maybe Smurfs don’t need them.

Finally, the answer I liked best came from Anne-Marie Charrett, and I was tempted to state that it’s a pure example of the English humor, but recognizing that she’s from Ireland, I realized that I should refuse.

I dunno, if you live in a world where its ok to have blue skin, anything could be acceptable. :)

Well said, Anne-Marie.

Last, but not least, here are some things I missed. I didn’t see anyone trying to find references on the Smurfs and the particular campaign run by a German producer. Before putting up the challenge, I needed to verify that our Smurfs weren’t just misaligned. Thereby I found a picture of the arrangements as well as a selling offer for the diorama. For this write-up I used the list of Smurfs from wikipedia. The plug Milk, minus Kakao is part of the brand Kinder Überraschung, indicating that these sweet chocolate eggs are some kind of healthy. Overall this is very great domain knowledge, which could have helped in the decision on “problem or not a problem?”

Craftsmanship and Quality

Currently there is a thread ongoing on the XP mailing list. Based on a rant from Nick Robinson, the discussion started about programmers that take pride in their work as opposed to programmers that just do that coding stuff. Today, Kurt Häusler wrote a reply in which he states his experience. You should go and read it – now – the initial rant from Robinson is in there, too. I’ll wait here for you to come back.

Continue reading Craftsmanship and Quality

Well-crafted and craftly tested software

A while back, I submitted my article Software Testing Craft to the Agile Record. Having coined the zeroth law of professionalism in it, ever since I heard about Uncle Bob‘s call for craftsmanship I believed that the craft of software testing had been formed far longer than the emerging software craftsmanship movement. Having followed the great work in the testing field from Michael Bolton, Cem Kaner, James Bach, Matt Heusser, and the many, many more professional testers out there, built early on the picture of a very well developed craft about software testing.

It definitely pleases me to see a blog entry from Uncle Bob listening to a talk from James Bach. Uncle Bob immediately got the point that James is talking about craftsmanship in software testing. Though, there is one point in which I disagree with him:

I like the fact that testing is becoming a craft, and that people like James are passionate about that craft.

Testing is not becoming a craft, it always was as Jon Bach put it in the comments. I share Jon’s view on this. And it pleases me to see testers talking about their craft for more than a decade now.

Another stream of thought on the comments discusses the fact, that Uncle Bob called for developers to strive to deliver software that put testers out of business. Knowing Uncle Bob as the lead developer on FitNesse, I know that he is not saying to get rid of the testers completely. Far from it. As he stated in his Craftsmanship and Ethics talk, programmers should strive to the ideal that tester do not find any problem in the software they’ve produced. Of course, this does not mean that testers will not find any problem at all. Testing is still necessary. You can’t fool yourself by skipping testing. As Weinberg put it in the Quality Software Management series:

Actually, it ain’t nothin’ ’til it’s reviewed.

Weinberg just provided half the truth. It might be nothin’ ’til it’s reviews, but it still ain’t nothin’ ’til it’s tested, too.

Uncle Bob initially called for the craftsmanship movement with the call for

Craftsmanship over crap.

At around that time, Lemmy Kilmister stated in the song “Teach You How To Sing The Blues” from his band Motörhead

There’s no excuse for bullshit.

Later on, Uncle Bob refined his fifth value to

Craftsmanship over Execution

in order to reflect the nature of the Agile manifesto. Back in November I heard a famous German quote for this from Jens Coldewey:

Operative hectic replaces windlessness of the mind.

(It doesn’t translate that well, but it basically says that shouldn’t try to run before you walk.)

Amen.

Assets of a software craftsperson

During a workshop at 8thLight Justin Martin collected assets of a software craftsperson. He published these on his apprenticeship blog, and I found the list compelling for some extensions. As I went through the list, I noticed that I included most of it in my article Software Testing Craft in the first issue of the Agile Record magazine.

Strong Enthusiasm

Always brightening everyone’s mood with your love of what you do.

Deliberate practice and the enthusiasm to learn something new anywhere are at the heart of my craft. I seek learning opportunities for testing, such as testing challenges, Weekend Testing or Testing Dojos, as well as Coding Dojos, Coding Katas, and Refactoring challenges. Skimming code to seek improvements has become as vital to me as testing a new application for flaws that may bug me later. The life of a software professional is a daily learning opportunity, if you’re open for it.

Don’t be afraid to ask for help

Especially if you feel rushed, or have bitten off more than you can chew.

Everybody tries to be helpful, all the time. Indeed, Jerry Weinberg pointed out in Becoming a Technical Leader that being helpful is a key for becoming a motivational leader. That said, there are two sides of the medal: being helpful and asking for help. In a helpful environment it’s easier to ask for help. But don’t shrug in the non-helpful environments, either. Don’t be afraid about saying “I don’t know”, since it’s vital to know what you don’t know. If you do know what you don’t know, you also know when to ask for help.

Ask a lot of questions

Even if you are already a Craftsman, if you are surrounded by other Craftsman, there will always be new things to learn.

There is a direct connection to the previous point. Asking for help is a special case of asking lots of questions. By asking questions, you start to reflect over the course of what you perceived. Over time, when you get helpful answers on your questions, you are able to learn from the answers, and grow. This is called expertise or experience. By constantly questioning not only the technical facets, but also the process aspects of your work, you develop yourself as well as your mind.

Discipline Discipline Discipline

The mark of a Craftsman is to have an unfailing discipline to do the right thing. Whether that is constantly learning new things, or never forgetting what you know, especially when it is hardest to practice.

Discipline is a key to successful learning. Giving in to feelings of pressure or mistrust is the pathway down to suffering. You need discipline to stay on your course and pursue it. Leaving the safe ground means to go awry. Discipline itself can be separated into three basic components: going slow, doing it right, and being methodical.

Go Slow

Often it is better to take your time, making sure you do every step correctly, rather than rushing for a temporary spike in productivity.

Going faster by going slow, sounds weird, but it’s the paradox key to success. Always remember that typing is not the bottleneck, otherwise we could simply pursue faster keyboards for you. Giving your mind the right amount of slack, saves you from paralysis. Rushing something to success is merely the solution of a novice. Taking the time for steady progress now, rather than a full bloat of erroneous features that you need to fix later, will not help in the long run.

Do it Right

Never stop practicing the things you know that work. Don’t stop testing first. Don’t stop refactoring.

How come we always have the time to do it over, but never the time to do it right? Going slow is the first step in order to make it right. If the software does not work, you can hit any other requirement, but it’s the “getting it to work” that’s the hardest part. Similarly, if your suite of automated checks has a lot of false positives, that is tests that pass, though they shouldn’t, then you will never know whether you can successfully deliver your software, or not. Make the tests and the checks right, or don’t make them in first place. Anything worth doing, is worth doing it right.

Being Methodical

Be thorough. Be certain you are producing the best work that you are capable of through a steady and unflinching practice of virtues.

Taking the time, and making it right, are the first steps in order to being methodical. If you give in time pressure, you are less likely to work methodical and might fall back to cowboy-coding. This does not help. Instead, remember what you learned, the TDD-cycle, the ATDD-cycle, don’t try to run before you walk. Through this you will reach steady progress that helps you and your customers.

Lists

A Craftsman knows his own productivity, and can gage how much he can get done in a certain time span. Making lists, getting metrics, and measuring your productivity will help to accomplish this.

The heart of Agile is to make progress visible. Measuring anything worth measuring, in order to prepare an informed decision later. Craftsmanship takes this a step further. In order to know how much effort a particular project may be, you need to have data from your past. Creating lists based on past experiences may help you with this. Over time you will be able to see patterns, and might no longer find the lists useful. By then you may have reached a new level of mastery – the Ri-level in the ShuHaRi model of skill acquisition or the Expert stage of the dreyfus model.

Understanding the Real Business Intent

It is important to remember you aren’t just writing code to fulfill some requirement on a note card, but you are actually creating a product that a business intends to use. Try to understand what that note card means to them as you transform the requirement into a feature.

In order to do the right thing, you have to know what the right thing is. Understanding the business behind your work is essential for any knowledge worker. This includes developers, testers, business analysts and technical writers. Without the vision of your work, you’re doing useless work. Remember the Product Principle from Weinberg’s Quality Software Management series: Anything not worth doing, is not worth doing right. Since you’re doing everything right, avoid doing anything not worth doing in first place. Of course, in order to make this decision, you need to know what your customer’s business is asking for.

Recognize your failures

Recognize your failures of the past so that you can move forward on a new level.

Taking the time for reflection is essential. Self-blindness about own failures does not help you grow. Therefore seek opportunities to realize your failures and learn from them. We all make errors at times. The aspect that makes us human, is the fact to learn from our mistakes.

Don’t be shy with your ideas

Throw your ideas out there, and then be the biggest critic of them. You only stand to gain when others see your ideas (unless youzz crazy).

Sharing your ideas is essential for the community to grow. Pay back what you get from the community by bringing in your own ideas. Of course, they might be subject to critics, but these critics will help you grow, learn from the mistakes you make, and contribute to your professional growing over time. If you’re shyly hiding your ideas in your mind, they’ll be gone when you’re gone. The other way round they may even survive.

Lessons always come at a cost

Stay positive, because if you are getting punished by your mistakes, remember that you also learning from your mistakes.

There is no such thing as a free lunch. At times you will wake up and see you have painted yourself into the corner. It’s essential to take course corrections at that time, though this might mean to switch your jobs. It’s a worthwhile lesson, but it has to come at a price. At times, you may have difficulty paying the price, though it’s the most sane thing to do. Remain positive about these changes.

Ethics in Software projects

Personally, I love to relate different aspects from other areas to my life as a software professional. Today the aunt of my wife celebrated a birthday, and I got the opportunity to overhear a discussion between my father-in-law and an uncle from my wife, who are both truck drivers. Since I read Secrets of a buccaneer-scholar, I became aware of combining different areas of my life together to learn something new.

Now, German laws demand high discipline from drivers on the road – especially truck drivers. There are given rest times for truck drivers, regulated by the local police officer. These laws evolved over time, to protect innocent truck drivers and other traffic participants from fatal injuries caused by drivers with too few sleep. There are other regulations that protect trucks from getting off-track, especially on the German Autobahn, where truck speeds of 100 km/h are usual – and cars drive with as much as double this speed.

So, working as a truck driver puts a certain challenge on you. You want to deliver your wares to the destination and hit back home. Your boss wants to deliver the wares to the promised date. Traffic jams, alternative routes, and other variables may put the predetermined schedule from your boss at stake. Today
I learned that it is common that the boss will then ask the drivers to skip their rest times.

But wait, what has this to do with software development? Well, if there are delayed deliveries from third-parties, shortcuts to requirements and/or design, among other variables, your project will be put on pressure. The predetermined project plan may become out of date. As the truck drivers’ boss, your project manager may ask to skip testing.

So, what is different in the truck driving part of this analogy is the fact that there is a police checking for too long driving periods. The German law then enforces penalties to the truck driver for giving in to the demand from their boss, so they may even lose their drivers license in extreme situations.

Seriously, I doubt that most projects would deliver untested software, if there was a project police in place, that would charge penalties from developers and even project managers for skipping testing. Sure, an overtired truck driver may deliver their goods on time in 90% of the cases, but if he just naps in front of the steering wheel once, and ends up in a massive traffic accident, the results will be dramatically fatal. The same may as well go for some software projects. However, avoid to give in the temptation to say “my project won’t cause fatal accidents, if I skip testing.”

If you didn’t get my main point, I would like to finally point you out to a fable about testing from Gerald M. Weinberg. His granddaughter Camille got the point from it at the age of four, can you get it, too?