The first thing you do when you design software is determine what has been already done.