When you have a small company with some programmers, designers and a project manager, who is responsible for the testing? Does everybody have to write tests, or is it always the same person?
Testing is Everyone's Job
Agile teams should strive to be cross-functional. Even when some members of the team specialize, everyone should be involved in some aspect of test execution or test development. For example, on a software project limited to the roles you've defined:
- Designers should be involved in Acceptance Test-Driven Development (ATDD), perhaps using Cucumber or Watir to specify the behavior or contents of their user interface.
- Programmers should be involved in Test-Driven Development (TDD), writing unit tests for all significant aspects of the product's behavior.
- Programmers should also be involved in writing tests for Continuous Integration (CI), to ensure that the code base is always in a potentially-shippable state.
- The Product Owner and Project Manager should be involved in writing tests for Behavior-Driven Development (BDD) and any non-functional requirements, ensuring that the product meets the team's "definition of done" at the end of every iteration or milestone.
In the same way, systems administrators, database administrators, network administrators, or other specialists that work with the the Development Team (whether or not they are actually members of the team) should also be involved in testing. While cross-functional generalists are often the ideal for an agile team, in practice teams may contain (or matrix in) specialists for certain aspects of the project. These resource specialists are the ones best suited to develop tests that exercise their particular domains of expertise, and can help the rest of the team ensure that each vertical slice of functionality works as intended throughout the entire stack.
If you're not doing software, the concept remains the same but the types of tests (and who needs to be involved in developing each type of test) will certainly vary. What should not vary, though, is the participation of the entire team in continuously testing the team's product and its fitness for purpose.
If you have a "small company with some programmers, designers and a project manager", then employ a tester too, preferably one that subscribes to context-driven testing principles. Testing is a specialist skill. Sure everyone can test, just like everyone can code, project manage etc. We can all do these things, but we tend to do the stuff we are not specialised in badly, compared to specialists. If you want the best possible level of testing for the effort spent, you need a tester.
+Vote to CodeGnome's answer!
While testing is everyone's job, keep in mind that, depending on the maturity of your team, it can be very practical to designate a primary tester.
Having teams where everyone tests, but no-one is accountable for the results, can lead to very low quality products.
On Agile teams, a lead QA resource or equivalent is often designated. While this individual doesn't do all testing, they are an expert practitioner that also leads the charge in helping the team stick to their chosen testing practices as well as helping the team innovate new testing practices.
A great lead QA will have a deep understanding of TDD, automated tests, unit tests, etc as well as understanding how each person on the team can best be motivated and employed to improve product quality.
- Team is self organized.
- The whole team is responsible for the product quality.
So let the development team decide who will do what.