9.8: Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them?
Bug fixing: There are different types of bugs, and some of them or more impactful than others. It is important to keep up with their maintenance before a product fails in a big way.
Adapting software to new environment’s: Often times, there are changes to a system, whether related to hardware or software, or other necessary components. It is necessary to modify the system to handle these changes.
Putting new or changed requirements into effect: When requirements change, systems and their code have to be updated to meet the new requirements. Maybe a company wants new features for their software, the requirements are edited, and the development team must put those changes into place however they are able to.
There is definitely overlap between these three types of maintenance. Especially when discussing the second two, maintaining software to adapt to new requirements is engulfed by adapting software to a new environment in a sense. When changes are made, whether due to new requirements or new OS functionality or new hardware integration, bugs are inevitable and have to be maintained along the way. Since there is so much commonality and relation between the three types, they can be difficult to tell apart.
9.10: Do software engineers have a professional responsibility to develop code that can be easily maintained even if their employer does not explicitly request it?
This is a personal question and can be answered based on different scenarios. I think it is often up to the software engineer to hold themselves accountable for developing code that can be easily maintained. Although it is not explicitly requested by the employer, it is something to strive for without a doubt. However, to better explain let’s talk about two cases.
Case 1) Software engineer is working for a small company whose budget is limited. The number one priority for each project is how fast the project can be completed.
Case 2) Software engineer is working for a large company with a widely known and recognized name. The number one priority for each project is to uphold the quality of the brand.
In which case should a software engineer be more careful and responsible in regards to developing code that can be easily maintained? Although it was not explicitly requested in either case, the engineer in case 2 is much more inclined to develop more polished, clean, well-documented, and easy-to-maintain code than the engineer in case 1, and for the right reasons. If speed of completion is a top priority and money is tight, the so-called “bells and whistles” become a little less important and need to take a backseat. In any case, a software engineer does have a professional responsibility to develop easy-to-maintain code, however, it is important that they recognize their situation and which ones may demand a bit more attention and detail.