An approach to error-based testing is described that uses simple programmer error models and focus-directed methods for detecting the effects of errors. Errors are associated with forgetting, ignorance, bandwidth and perversity. The focus-directed approach was motivated by the observation that focus is more important than methodology in detecting such errors. The strengths and weaknesses of error-based versus more methodological methods are compared using three underlying assumptions called the faith, coincidence and hindsight effects. The weaknesses of error-based testing are compensated for by establishment of an expertise-based foundation that uses research from the study of natural decision making. Examples of the application of error-based methods are given from projects in which the author had access to the programmers, making it possible to track failure back to both defect and error. The relationship of error-based testing to contemporary methods, such as context-driven and exploratory testing, is described.