= Introduction =

Considerations when developing and reviewing source code.

= Sweeping Guidelines =

  # Don't introduce code provisionally. Only insert code that is being used for a purpose. Corollary: Develop using vertical slices, instead of horizontal slices. 
  # Each CL does one thing. Don't insert refactorings into functional changes and vice-versa.
  # Aim for small CLs. 
  # Don't send out "try-things-out" CLs.
  # Make CLs direct. eg. no unneccesary indirection eg. put the String constant in instead of having unnecessary finals declared.
  # Prefer plain/idiomatic/obvious over clever.
  # Name things!     
  ## make specific exception classes
  ## don't use "abstract" in class name
  ## don't use "impl" in class name
  ## name sub-blocks of code by converting to methods


= Particular considerations =


  # Is the code thread safe? Read your code and check whether your code behaves well when multiple methods of an instance are executing simultaneously. Avoid settors to make classes immutable.
  # Was equals considered? 
  # Was hashCode considered?
  # Were exceptions considered? Are exceptions scoped precisely and accurately?
  # Was toString considered? toString is helpful for testing and debugging.
  # Does the code call exit? Don't call exit as it makes code un-libifable and means shutdown sequenceing is not understood.
  # Please provide sufficient tests.
  # BufferedImage is TYPE_INT_RGB
  # Gui use done with SwingUtilities.invokeLater () so that SwingUtilities.isEventDispatchThread() 
  # Usually if a class uses Random, it is parameterizable on Random
  # Was use of System.out and System.err considered? It's not a good 
  # Watch out for autoboxing and varargs producing undesireable behaviour.
  # Consider public and final modifiers on classes and methods.
  # Add javadoc