godoc
diff --git a/README.md b/README.md
index fb1fab7..97a2af8 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 # errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.png)](http://godoc.org/github.com/pkg/errors)
 
-Read the [presentation](https://t.co/GGPr7HJZYR) to see what the big deal is, blog post coming next week.
+Would you like to know more? Read the [original presentation](https://t.co/GGPr7HJZYR), blog post coming soon.
 
 Licence: MIT
diff --git a/errors.go b/errors.go
index 9dfc271..1a3589c 100644
--- a/errors.go
+++ b/errors.go
@@ -1,4 +1,49 @@
 // Package errors implements functions for manipulating errors.
+//
+// The tranditional error handling idiom in Go is roughly akin to
+//
+//      if err != nil {
+//              return err
+//      }
+//
+// which applied recursively up the call stack results in error reports
+// without context or debugging information. The errors package allows
+// programmers to add context to the failure path in their code in a way
+// that does not destroy the original value of the error.
+//
+// Adding context to an error
+//
+// The errors.Wrap function returns a new error that adds context to the
+// original error. For example
+//
+//      _, err := ioutil.ReadAll(r)
+//      if err != nil {
+//              return errors.Wrap(err, "read failed")
+//
+// In addition, errors.Wrap records the file and line where it was called,
+// allowing the programmer to retrieve the path to the original error.
+//
+// Retrieving the cause of an error
+//
+// Using errors.Wrap constructs a stack of errors, adding context to the
+// preceeding error. Depending on the nature of the error it may be necessary
+// to recerse the operation of errors.Wrap to retrieve the original error
+// for inspection. Any error value which implements this interface
+//
+//     type causer interface {
+//          Cause() error
+//     }
+//
+// Can be inspected by errors.Cause which will recursively retrieve the topmost
+// error which does nor implement causer, which is assumed to be the original
+// cause. For example:
+//
+//     switch err := errors.Cause(err).(type) {
+//     case *MyError:
+//             // handle specifically
+//     default:
+//             // unknown error
+//     }
 package errors
 
 import (