Working with legacy code for software systems presents added difficulties and challenges for programmers because often legacy code was not written to support automated testing and it is likely that the codebase has deteriorated with changes and modifications over time. Thus, not only is maintaining existing systems demanding, challenging and costly, but maintenance efforts can fail to satisfy users and result in further deterioration of codebase. Software redesign has the capacity for presenting real improvements and a redesign is cheaper when compared to cumulative maintenance efforts undertaken over the years. However, it is also important to understand that new software will start aging soon after completion and this means that ongoing maintenance is required. This essay presents a discussion about the technical challenges involved with maintaining software compared to the challenges involved with the design of new software.