General programming principles