hands on software systems