M. Mirra's notebook[?]

created: 2018/04/19, tags: programming

types of software failures, from most to least useful

all code fails; ways of failing differ in how much they help improve.

incorrect code should (from most to least preferable):

  1. fail to build. how: static checks (e.g. type checking, linting)
  2. fail to reach the repo. how: automated tests in commit or push hook
  3. fail to reach the application server. how: automated tests in ci
  4. fail to start. how: resolve dynamic dependencies as early as possible (e.g. env variables, on-disk data, ...)
  5. fail and trigger automatic notification when data crosses external boundaries, such as between client and server or between services; how: schema-driven validations and log alerts
  6. fail and trigger automatic notification when data crosses internal boundaries, such as functions within the same application; how: assertions and log alerts
  7. fail and trigger automatic notification on the user's machine; how: exception tracking services like sentry.io
  8. fail and trigger human reporting on the machines of beta testers and other commited users who are likely to report the problem