hardware iteration vs software iteration