The first thing you do when you design software is gather information on related software.