Software development is primarily achieved through computer programming , which is carried out by a software programmer and includes processes such as initial research, data flow design, process flow design, flow charts, technical documentation, software testing, debugging and other software architecture techniques.