how to develop software from scratch