how to build software from scratch