Software is ubiquitous in modern society and can have huge impacts, both positive and negative. However, simply programming a software is not enough - software engineering principles must be followed to develop reliable, high-quality software that meets customer needs. Some common software development issues include not fulfilling customer requirements, being difficult to improve or extend, and lacking documentation. Following a systematic process involving requirements analysis, design, implementation, testing, and maintenance can help address these issues and produce software delivered on time and budget that works as intended.