My Engineering Principles

This article is a list of principles that make up part of my engineering philosophy. My most important principles are as follows.

  • Work backwards from the goal
  • When in doubt take a step back
  • Be prepared to change your mind

There are many other principles I try to follow. Some of them are at odds. This is intended. Engineering is about making smart trade-offs.

  • Be pragmatic
  • Be consistent
  • Be concise
  • Value correctness
  • Think of edge cases
  • Prevent mistakes
  • Take advantage of tooling
  • Call your shot
  • Challenge your assumptions
  • Follow an experimental approach
  • Find the root cause
  • Weigh all the pros and cons
  • Take time to think
  • Don’t repeat yourself
  • You ain’t gonna need it
  • Abstract where it adds value
  • Make control flow simple
  • Manage asynchrony well
  • Don’t ignore efficiency
  • Make (re)producing edge cases easy
  • Make your system inspectable
  • Make your code and system self-describing
  • Make your code fail early
  • Value repeatability
  • Value idempotency
  • Value usability
  • Strive for a fluid UI
  • Be wary of viscous processes
  • Use the best ecosystem for the goal
  • Invest in your workflow
  • Automate and reduce manual steps
  • Prototype and try things out
  • Refactor
  • Be economic
  • Better ask for forgiveness than for permission
  • Take hype with a grain of salt
  • See things from different perspectives
  • Challenge decisions (if you strongly disagree)
  • Ask why

These principles are deliberately expressed in a general manner. Still, the list is subject to change when I gain more experience which is in its spirit.

I take further inspiration from the following sources whose content I like and generally agree with: