Programming, as much as it is about machines, is conducted by humans, and is as susceptible to human error as any process. These bugs can be frustrating, particularly when found by a client, but they can give an insight into underlying problems, and sometime suggest solutions – or at least ways of catching errors early. This article looks at four different classes of bugs: mechanical, mental, social and environmental, their causes, and some preventative steps.