The hardest single part of building a software system is deciding precisely what to build.