Inspired by a Tweet from Jason Gorman I had to look up the definition of professionalism in my MacBook Pro. Amazingly I found the following:
the competence or skill expected of a professional : the key to quality and efficiency is professionalism.
• the practicing of an activity, esp. a sport, by professional rather than amateur players : the trend toward professionalism.
Let’s discuss this in the light of testing and Software Craftsmanship.
“The competence or skill expected of a professional” is the thing that we value. We do not value meaningless paper, but competence and skill instead. Theoretical knowledge does not equal competence in itself. Instead we can show our skill, we can apply what we learned, and we apply what we learn nearly instantly, as we seek to get to know wether our new knowledge applies, and if it does in which context, and under which circumstances.
This holds for Software Craftsmanship to the degree, that I can read a book, gather the knowledge from it, and feel the urge to directly apply those lessons in my daily work. When I read Growing object-oriented software guided by tests I immediately started to apply my new knowledge about mocks. I remember that it was between Christmas and New Year’s 2010 that I played around with some automation code, and brought it under test effectively mocking out the complete system under test – which I knew exactly how it behaves – and applying the lessons about a fluent language in my code. It felt fantastic, and engaging.
Similarly I remember when we struggled with a replacement of our test automation. At that time I read about Agile, Agile Testing, The Art of Agile Development, and The Cooperative Game. I had to apply the Batman approach to dealing with interruptions, I was urged to try the Law of Three, I motivated the usage of we. Everything I read I had to turn into some practical lesson. I am sure I pretty much annoyed my teammates at that time, since every other day I could come up with something completely new. But I had to turn my theoretical knowledge in practice in order to see where the theory may be applied, and where it maybe won’t.
So, “the key to quality and efficiency is professionalism”. Efficiency means to the thing right. Since we avoid to do things that are not worth doing – that is effectiveness – we want to the things we do in the right way. This includes building proper unit testing up. A friend of mine recently told me that he was asked by his project manager to leave out the “golden handkerchiefs”, and leave out the unit tests so that the software could be shipped earlier. Professionally he replied that unit tests are never “golden handkerchiefs” but instead meaningful in order for him and the project to know where they are. Testing is absolutely necessary.
Similarly we do the things right, when we acknowledge that the green bar of our automated unit and acceptance tests might not be sufficient, and that we have to explore our software for problems that might be hiding in there, are which might be shaded from our safety-net of automated regression checks in our continuous build process. If we skip those, we might find out later, when our customers already got upset. Exploration is an integral part of software development, just as checking.
“The practicing of an activity, esp. a sport, by professional rather than amateur players” means that we care about our craft by practicing our programming and testing skills. We hone our craft by participating in user groups, practicing in Coding or Testing Dojos, fulfilling Coding Katas, or taking on Testing challenges, maybe attending Weekend Testing sessions. We ensure that we get professional by that, but also that our craft gets more professional, and that our customer see us in a more professional light.
This is what “the trend to professionalism” is all about. I am eager to live up to that standard, practicing my skills, fulfilling my learning abilities, and continuously improving my knowledge as long as I live.