Monthly Archives: January 2013

Developing Trust

Developing Trust

“What did they say?” “That it’s supposed to work that way.” “And?” “I wasn’t sure what else to say. What do you think?” “I think that you need to develop some trust. First, develop some trust in yourself. Then develop some trust from the dev to you.” It’s a common conversation I have with junior testers. As testers, our goal should be to build trust. Trust enables us to our jobs.

Trustphoto credit: mikebaird via photopin cc

What is trust?

The asset most required in our jobs as software testers is trust. That is because trust is knowledge of a person or group. The currency of that knowledge is the combination of competence, character, and commitment.

The first, competence, is how well we can do our jobs. People may think we have character, but we I say a feature has a problem, do people believe that I know what I am talking about. Competence varies for all of us depending on the domain. I can know much about restful web services (Rest) and not know much about User Experiences (UX). Or somebody may trust my knowledge in Rest but not UX. I could understand the technologies used but lack understanding of the business use.

The second measure of trust is character. I consider character to cross domains. I guess that somebody could have a character weakness, for instance if they are a covered alcoholic, but not relevant for this kind of trust. Do people know you give an honest answer? That would be integrity. Do they know you see things through to the end, or do you drop things when you get resistance? That would be courage. Other character traits of a tester include ability to communicate, and dealing with ambiguity.

And the third measure of trust is commitment to causes. A person could be honest and earnest, but wouldn’t lift a finger to save a spider if they don’t like spiders. Others will trust me or not if I am dedicated to those values that the team shares. This can vary from place to place. I have worked where the tester was ‘supposed to be the police’, as well as places where the tester was supposed to describe the quality level to management so they could make a proper decision. Popular commitments in agile include delivering value to the customer, continuous improvement, engineering for current (not potential needs), and always-working software.

Why do We Need Trust?

We do not hear many arguments against trust. But we do not always hear for a call to gain trust. Without trust, everything is more expensive in both money and time. For example, terrorist attacks in Mumbai and New York in the past decade created new, more expensive agencies to combat the potential for attacks. I have personally witnessed the cost in time every time I travel from an American airport. The example is extreme, but it scales down to our work. For instance, if I am not trusted to create tests then I will have additional review processes, sign-offs, etc.

Without building that trust, even when the competence, character, and commitment are present, you will pay the no-trust taxes. In a new relationship, the trust must be built. An assumed trust, one that is assumed upon meeting, can be duplicitous – other assumptions come with it.

How do We Build Trust?

How to build trust isn’t a simple question. That comes having competence, character, and commitment. When the currency is low then we will find building trust difficult. Those things can grow in time. If we study our craft, if we study our domain, we will gain the competence that convince our stakeholders that we ‘know what we are doing.’ As we mature, we build character from making the right decisions. As we question our beliefs and motives, we develop the commitment that other respect.

On the other hand, we build trust from others as we improve ourselves. We work in various domains – we have different levels of knowledge in those areas. We start at different trust levels in our relationships. We work with people who have different general tendencies for trust based on their experiences. Domain risk also plays into trust. I will be careful no matter who I am working with to build a pacemaker.

Lowest Trust – When we work with somebody that does not trust us, deserved or not, we can build a foundation of that trust by being polite, and simply helping them. Do not ask questions except for those that will help you do the task correctly.

Low Trust – Learn about them. Questions should be inquiring but not challenging. Your interest in them, and sharing some common experiences. Though you should focus more on them. What are their motives for what they are working on? What are their commitments?

Medium Trust – When you are at good level of trust, you can make suggestions to help them. THEN BACK OFF. Expect them to ignore your suggestion. In the occasion that they take your suggestion, be available to answer questions about details. Success isn’t necessary, but a big investment into a failure can lower the trust level.

High Trust – Once you have a high level of trust, you can act on their behalf if you tell them appropriately about what is done. Give them a report on what you will do, what you have done. For those working on Agile teams, this can sound like a ‘standup meeting’.

Highest Trust – When you are at the highest level of trust, you can just act on behalf of somebody. You know their interests and how they would decide themselves.

You can be at different levels of trust at different times of a relationship. It can go up or down for various reasons. If you haven’t interacted with somebody for a while, you might treat the trust level as if it atrophied. If you are a hired expert, you can probably skip the lowest trust level and start somewhere else.

Planning to Be Trusted

By evaluating the trust levels that your stakeholders have in you, you can begin planning on how to build a higher level of trust. The work you do when implementing a trust-building plan will actually make you better and more trustworthy. That trust is a cornerstone to becoming more effective as a software tester.

Trust me.

 

Issue & Story Tracking

Everywhere that I’ve ever worked at had a defect tracking system, requirements system, and sometimes merged into one. Some were off the shelf, some were homemade, and others were services. I never felt the need to install one for work, but I did want to see what was involved with doing this, including how to integrate it with other products in the test stack.

I didn’t look around much for an open source solution. I know Bugzilla is commonly used. I also looked at Mantis and Trac. I decided to go with Redmine because it’s a Ruby On Rails app.

Installation

The biggest issue was to identify which ports to use. I already had a Puppies application that I was testing as part of my Cucumber and Cheese book. I added a Graylog2 application, also Ruby On Rails for the web interface (server component is java).

I originally chose to use sqlite3 because it was already installed on my system. I knew that I could use IRB to crack into the database if I needed to. Turned out that I did. I had to create an admin user (default one did not work). I eventually switched to MySQL.

Integrations

I integrated it with Git. I had trouble getting it working until I discovered that I needed to point it to the .git directory of my project directory. By including issue id’s in my checking comments, the issue automatically associated the issue with the checkin. The comment showed up on the repository page and the issue page. It supports diffing, too.
Redmin_GIT

I was able to install a Jenkins Plugin (technically it is for Hudson but works on Jenkins) to integrate with my Jenkins. This allowed me to identify which builds the associated checkins would be built. I also installed a Redmine plugin to Jenkins could also track builds on Jenkins to show Redmine issues associated with the build in aggregate.

It also supported multiple projects, and sub-projects. The wiki and news seemed relevant for keeping track of project information.

There is role based access control. That probably isn’t necessary for an agile team so I ignored this capability. Also non-agile (my opinion) is time tracking and Gantt charts.

Conclusion

I found all the features to be useful. If I were going to build my own stack then I would like using this component.

Watir Podcast 53

I recorded a great interview for the Watir Podcast with Llewellyn Falco about Approval tests (originator of the idea that fed my blog post on The Gold Standard), Teaching Kids Programming, and Agile in general.

I hope that you enjoy it!