systematic debugging approach