Cluj München 1140km

Gânduri clujene din Bavaria

München - Munich - Monaco di Baviera

17. februarie 2014 23:08
by skorpionking
0 Comentarii

Do you think about software maintenance?

17. februarie 2014 23:08 by skorpionking | 0 Comentarii

Even though software maintenance is a simple concept it is quite often misunderstood and its importance is very often minimized. Be honest, when starting a project, how many of you think so far when planning? Most customers (and some IT professionals in the hurry of the project) assume that once the software goes live in production there is nothing else to be done about it. This is far from being true and there are many things that can change around after a software system goes live, it is released, accepted by the customer. Some examples: operating system updates/patches, diagnosing and fixing newly discovered defects, business rules updates, infrastructure required updates (e.g. application server, digital certificates, third party libraries), changes in the interfaces of third party service/data providers consumed by the application, legally enforced updates (hello SEPA), expanding markets, etc. Depending on the software complexity and its quality, software maintenance activities can account for as much as 80% of the total costs during the lifetime of a software system.  

In general software maintenance activities can be classified into the following categories:

  • Corrective Maintenance - Covers fixing errors and defects discovered while the software system is operational in production. Corrective maintenance has high priority especially if the error/defect is affecting application users. For example, an e-commerce application fails to process payments.  
  • Perfective Maintenance - Covers updating existing business rules due to changes in the underlying business processes. For example, the registration page of an online website needs to be updated to make the password retrieval security question mandatory (it was previously optional). Some organizations also include new development under perfective maintenance and some prefer to keep new development separate.  
  • Adaptive Maintenance - Covers the necessary adaptation of the software system to changes in the operating environment. For example, the operating system manufacturer issues important security patches which must be installed. This is strongly related to operations. The adaptive maintenance activities need to be planned and scheduled in advanced such that minimum disruption is experienced by customers. Cloud platforms like Windows Azure offer great advantages because some of the adaptive maintenance activities are performed by the cloud provider transparently for the users without service interruption.    
  • Preventive Maintenance - Covers activities to continuously improve the maintainability and reliability of a software system throughout its life time. Examples: consolidate code to eliminate existing duplication, refactoring, eliminate tight components coupling, analyze bottlenecks and refactor code to run more efficient, build performance counters, strong and adaptive logging, implement error reporting framework that sends an email to the development team any time an error/exception occurs including as many details about the incident as possible, etc. This is also strongly related to operations.

From my software development experience (as a software engineer and consultant), providing a quality software maintenance service mainly depends on having a process and a stable knowledgeable team. The process must be capable of recording and tracking all maintenance related activities and associated artifacts from beginning to end - I recommend to use an issue tracking system (Microsoft Team Foundation Server provides great ways for this purpose but not only). The team assigned with software maintenance must be highly knowledgeable of the system (i.e. technical side and business side) in order to make sure they know how to respond and they understand the consequences of their actions on the software system.

I hope the above overview is concise enough to convey the importance of software maintenance for operating highly reliable and maintainable software Systems today, as for all us quality of deliverables in time and budget should be a commitment. And yes, software maintenance is not cheap nor easy, but software maintenance is necessary!