Tue Jan 17 16:55:13 CET 2017

Kinds of errors

In order of difficulty to resolve, most problematic first.

- architectural

Architectural problems are those that occur when a secondiary or
sometimes (when it's really bad) a primary requirement is not
reflected properly in the architecture.  Structural limitations turn
seemingly simple problems into huge issues that require big changes.

- algorithmic

Or logic errors.  Often, in data-structure intensive code, not
everything can be encoded explicitly in a way that correctnes is easy
to verify through code inspection.  I.e. the problem is encoded in
data structures that are subjet to _implicit_ invariants.  To expose
the latter as explicit code, it helps to make an effort to encode more
in the data structures - e.g. make it impossible to represent illegal
states, and to further make other assumptions explicit as functions
that evaluate properties, to be used in a (property-based) test or
emulation suite.

- protocol / type errors / representation bugs

Usually minor "brain farts" that lead to obviously incorrect behavior,
but can linger due to lack of type or test coverage.  Testing and/or
static analysis can usually find these.