= 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. 
    * no unneccesary indirection
    * put String constants directly in code 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? Be very selective about putting information on these channels. Quite possibly never use them for communicating information.
  # Watch out for autoboxing and varargs producing undesireable behaviour.
  # Consider public and final modifiers on classes and methods.
  # Add javadoc