Less than three there there should never be

For safety reasons, there is a mantra in the canoeing community which is drilled into you from the first time you get in a boat: “less than three there should never be”
It refers to the minimum number of paddlers there should when a group goes canoeing.
Once again, I can shoehorn paddling into a metaphor for software development…

kayak-waterfall-adrenaline-rush-at-victoria-falls-zambia-africa

The idea being that with 3 paddlers, if one of you gets in trouble, the other 2 can help. Or (more pertinently for this post) when scouting a rapid, the differing experiences of 3 people really helps to make a decision on how to run that rapid.

Likewise, in software development, having 3 people in a discussion about a feature prior to any code being written also helps decide how that feature will be developed.

Sounds like normal requirements gathering / reviewing eh? Well it is, except that the gathering & reviewing is going on in real-time, through conversation & giving fast feedback to the people that matter.

This conversation is opposed to reviewing documents which have taken time to write & are invariably out of date as soon as they are published (subject to Michael Bolton’s Relative Rule?)*

I find this conversational approach to requirements gathering & reviewing more effective than waiting for a document to land on my desk. For example, I’ve found that a lot more implicit requirements are driven out this way - stuff that is only thought of when ideas are bounced around with others.

Who should be at the table?

Generally I like a Business stakeholder, Tester & Programmer to be part of the discussion as they each bring a different perspective to the table. Each person has an idea what the feature is about, but this picture isn’t unified:

trio-testing-1

Having this conversation helps to ensure everyone has the same idea about the feature & that what gets developed is actually what the Business stakeholder wants.

trio-testing-2

Who brings what to the table?

Cast your mind back to school for the 5 Ws on the Rugby post - Who, What, When, Where, Why & How:

Business Stakeholder

  • Who - they are person requesting the feature
  • What - the feature request
  • Why - do they want the feature (will help focus Dev teams questions)
  • When - they want the feature

Tester

  • Why - is this feature being requested (to understand the value)
  • What (TF) - asking questions of the requirements to drive out ambiguity
  • Where - will the test coverage be (e.g. unit, integration, GUI)
  • How - having an understanding of the implementation will help focus testing, help with testability & increase understanding of what coverage is required at what level

Programmer

  • How - do they propose to develop & implement the feature
  • Why - is this feature being requested (to understand the value)
  • When - they reckon they can deliver it by
  • Where - will the test coverage be (e.g. unit, integration, GUI)

If you take away any member from this discussion then key information is going to be missed.

For example, take away the Tester & you get Programmers jumping straight to how they are going to implement the requirement. Its not until the software is delivered that the Business Stakeholder realises they were not specific enough.

Take away the Business Stakeholder & you get Testers & Programmers developing to vague & ambiguous requirements. Again realisation that the requirements were not good enough comes too late.

It has its limitations though - it really loses its effectiveness if the features you are discussing are too large. Breaking down of features into smaller pieces is a discussion for another post (I’m not saying I’m going to write that post!)

Its not just me

I’m not the first person to talk about this:

Where to start?

If you’re a Tester reading this post & new to the idea, I urge to start asking “Why” to get an idea of the value of the feature to the company. You’ll know a great answer when you hear it & it will really help you buy-in to the development of the feature.

From here the process grows organically as the necessary people should be joining the conversation to help answer your questions.

I’d love to hear about your experiences with this method of requirements gathering / gathering. Does it work for you? What sort of problems do you come up against when using if? Is it a new idea to you?

Thanks!

Thanks must go to Maria Kedemo, Kristoffer Nordström, Lisa Crispin & George Dinwiddie for prompting me to put my thoughts down on paper!

 

*Notes of the conversation can be kept in whatever format you like - acceptance criteria / business requirements in a wiki, acceptance tests in the code as living documents, napkin etc.

In my opinion, the acceptance criteria / requirements should be executable tests in the code - if a check-in or release causes a test to fail we have immediate visibility of the system no longer conforming to the specifications as they were originally agreed.

  • Glyn Harris

    What about the overarching ‘Who’ mate ;o)

    • Duncs

      🙂 think I’m starting to get the idea of that now. I’m thinking its in line with MBs relative rule.

      Need to get some feedback on that me thinks

    • Duncan Nisbet

      🙂 think I’m starting to get the idea of that now. I’m thinking its in line with MBs relative rule.
      Need to get some feedback on that me thinks

  • Pingback: Let’s Taste | Duncan Nisbet()

  • DuncanNisbet

    Thinking more about this topic - every person at the development table should have a clear idea of “Why” they are working on a feature.

  • Márcio Neves

    Nice reflection about the topic.

    I would add the “How” to the testers as well. **How do they propose to develop the testing strategy, how the coverage will be achieved and test cases distributed by type: manual, functional automated tests or unit tests**

    The way I see things, testers and developers should have similar technical skills (both should be familiar with coding/ scripting, frameworks, tools), but with a slightly different perspective over the problem of developing and delivering business value.

    A few things in common:

    * shared code repository where every contribution is commited (sources, unit tests, automation scripts, documentation, CI/CD scripts, …)

    * both should be familiar with continuous integration cycle/ continuous delivery cycle

    Tester perspective:

    * focus on getting an automated script mimicking as much as possible user actions that proves that the system is behaving as expected

    Developer perspective:

    * focus on getting the desired behaviour coded in such a way that maintains the code scalable - easy to add new functionality, maintainable - easy to debug problems after deployment, maintaining the defined architecture **AND** !!easy testable (yes, even providing anchor points in the code that facilitates automation).

    For me, the cruel reality is that a tester that doesn’t use coding as a tool, shouldn’t be on an agile team.

    My expectation of a true agile tester is: “This is the guy that handles my safety net[1] under which I cannot fall. This is also the guy that is constantly making the net holes smaller.

    [1] http://www.telbit.pt/docs/Paper149.pdf

    My worst “agile” experience so far showed me the problem of not having a participating stakeholder on those gatherings. I guess that the definition of a product oriented organization was to hire a bunch of developers/ testers to develop a software focused over a few catchy words like “web2.0″ ,”software quality assurance”, “agile”… Yes, it was a product designed to support SQA and testing automation activities of agile teams. How odd is that? 🙂

    My long 2000000 cents, 🙂

  • DuncanNisbet

    Hey Marcio, thanks for stopping by & adding your 20000 cents worth, I appreciate you keeping the conversation going 🙂

    I agree with you - Testers should bring some “How” to the table. I will add that, thank you for the prompt. As well as the coverage & types of testing, I’m also thinking of things like testability - is there a way Programmers can write the code to help testing? How can we test the “untestable”?

    I like how you break down some of the similarities & differences between the roles of Tester & Programmer (I’m glad you didn’t list them all :-)), each of the points would make a great conversation over a beer, but I need to pick up on 2 points in your response:

    Firstly:
    “…a tester that doesn’t use coding as a tool, shouldn’t be on an agile team”

    You know I completely disagree with this point, right? I’m a Tester, working on “Agile” development teams & I’m not great at writing code. You’ve worked with me, should I not be on the team?

    Different Testers add different value to a team - some are great at the analytical stuff (like requirements gathering) & others can shake the software in ways you couldn’t imagine (both manually & with tools).

    There are, however, instances where It pays for a Tester to be aware of the code in order to help focus their exploring of the software (there are techniques for mitigating the risk of lack of testing independence)

    I class myself as a Tools Assisted Tester - I use tools to help me test. Be it a sharpie & postits for requirements gathering, tailing logs & interrogating DBs when exploring the software or writing some form of automated check as a record of the software’s behaviour.

    Secondly:

    “…a true agile tester is: “This is the guy that handles my safety net … under which I cannot fall”

    A less scrupulous Programmer than you may read that sentence as “I can deliver whatever sh*t I want, the Tester can catch it & if he doesn’t then it’s his fault” (I’ve met a few of these guys…)

    Having (briefly) read the article though, it seems to me that you’ve misquoted it.

    Your linked article is about testing (as an activity) as opposed to Testers (as people on a team).

    Testing offers the safety net - I agree with that - but it is not only Testers who do testing (of some sort).

    Have I misread the article?

    With regards to your worst “agile” experience - who was the missing stakeholder?

    I love the irony of your closing comment - sounds like the customer’s problem wasn’t properly understood before development started…

    Thanks again for your input Marcio, I’m just sorry we didn’t get to have this conversation whilst I was still in Gib.

    You know we have Programmer roles in the UK if you want to carry on the conversation..?

    Duncs

  • Pingback: Single Source Of Truth Is A Lie | Duncan Nisbet()