In April of 2014, I was one of two Quality Advocates in Asynchrony writing automated tests. I'd worked with my team lead to create a process where I wrote automated regression tests in C# before they started a feature, and that body of tests would run with every code check-in, in addition to their unit tests. The effort paid off with a solid product where only 5% of our stories were bugs, and there were almost zero support requests once it was deployed at the client site. I wanted to replicate that success on other teams so I asked for an apprentice. My father had been apprenticed to a carpenter when he was just out of school, and he always spoke well of the experience. There's no college degree in software QA, and everyone I know learned some testing folklore from a QA veteran.
Finding the right apprentice required tweaking our normal interview process, because we were looking for how someone would think. They needed to be fearless and willing to try anything. We do a brainstorming exercise in interviews, and the best candidates would be on their feet and drawing on the white-board with us. Creativity and curiosity are part of our daily process, starting with the question "What would happen if I did this?" The desire to learn is essential for a quality advocate. People with an eye for detail and troubleshooting skills make good apprentices. It takes courage to come in and be the new person in a new field, doing things they've never done before, and a willingness to be taught and corrected.
My apprentice and I spent three months working side by side. Whatever I did, he observed, asking questions, and taking notes. On his first day, I walked him through altering a UAT and committing it into the source code repository, I was delighted when he came back the next day ready for more. He worked through a manual I'd written for new quality engineers, took some Code School classes, and coded exercises from a C# book. I spent most of the first month answering questions and walking him through the basics of object oriented programming, HTML, CSS, SQL, and how to use Firebug and JMeter. He learned why 10th October 1582 was a useful date to use in testing, how a web application responds when you hit it with 3000 simultaneous web requests, and why you should never use Comic Sans in a professional context. I got into the habit of asking questions to which I knew the answer, to help him work through to that same answer on his own.
It was a learning process for both of us. He found three UI bugs I'd missed because of over-familiarity with the application. Breaking down what I knew into bite-sized pieces helped me get straight what my own process was, and highlighted some deficiencies. I learned to let him do things I could do faster and better, and to wait for the right time to ask "Can you tell me why you did that?" or "What about this other thing?" or "What else should we test for here?" My apprentice's job was to listen and ask questions, even if they seemed stupid, because I believe the right dumb question is invaluable to the team in putting together a product that works well. You never know which dumb question is the right one until you ask it.
Where before there were only two teams with a quality advocate writing automated tests, we now have four, using three different languages and a variety of tools and technologies, and more teams interested in starting. We currently have two apprentices paired with senior QA staff. I have a weekly check-in with the apprentices and their mentors, and two months in, things are going well. I believe that part of the responsibility of being a senior is training juniors, whether that be quality engineers, programmers, or carpenters. Learning one-on-one from a senior in the field gives the apprentice hands-on experience in a safe environment, and gives the senior the chance to see their processes through new eyes. We're giving the apprentices the chance to try a new career, to learn from an expert, and to be involved in the whole life-cycle of software development, from design and UX through security testing and load testing, to final polish and delivery.read more