Search
 
     
   
   
   
 
By
Dr. R. Srinivasan,
CTO, iCMG, Bangalore
   
  Identify a problem to trace its solution
 
 


Software developers should identify the patterns and antipatterns and provide detailed documentation suggesting refactored solutions, in the concluding part of his series on 'Patterns and Antipatterns' Dr R Srinivasan

Having discussed different types of patterns and antipatterns during the last one year, we will conclude this series by taking an example of the steps involved in the case of a single project. William Brown, et al, in their book on 'Antipatterns in Project Management', illustrate the case of a single project with three important steps-identify prevalent problems, investigate their causes, the symptoms and consequences, and then identify the antipatterns, so that it will be possible to arrive at refactored solutions.

Each of these steps is challenging. For example, the problem may not be obviously visible or may be deceptive, or what is seen as a problem is not regarded so by the development team. This needs to be solved through a very thorough review leading to a clear clarification. As the authors of the above book say, "A problem is something more persistent that can be isolated as a risk and must be mitigated". Generally speaking, a typical project will cover both the business risk as well as technical risk, and hence we have already mentioned in an earlier article the stake holders in the project are not only the members of the development team but also the management as well as the customer. It is therefore essential that, in the interests of all, as soon as the risk is identified it should be reported such that the investigation can be completed within a reasonable time.

The procedure does not stop here; it is all the more important to come out with a report on the symptoms that were observed to identify the specific problem and its associated consequences. This is absolutely necessary to investigate the possibilities of any future consequences. All these important observations and precautions are vital to make sure that the overall risk is well understood by the team. What we mean by this is that the project team and management will be able to assess the seriousness of the type of risk. If it happens to be a simple one, the solution will be easy through phase exit criteria. On the other hand, if the risk identification has led to review of the design, the consequences will be very serious leading to effort and cost overruns, or even technical failure of the developed product. The summary is that the state of the problem in terms of causes, symptoms and consequences must be clearly understood to identify the necessary actions to refactor the problem.

This is easily said than done because it is a very critical and iterative activity and should not be rushed. It is critical because it needs to be handled without making the developers worry; it is iterative because any slip up will provide a solution to a wrong problem! This is a typical case of adding more problems to an existing one that is being tackled. Brown, et al, discuss examples under business risks and technical risks-unstable requirements is a business risk, causes for this are lack of rigorous analysis process and weak project management.

The associated symptoms are "repeated analysis tasks and unstable analysis artifacts". The consequences are "continued analysis, delays and cost overruns". Technical risks include "incomplete design", the cause for which may be lack of detailed architecture. A typical symptom for this may be "developers inventing architecture and coding dead ends" and the consequences are "delay in design and coding and associated cost overruns".

While we have seen an illustration with respect to a single project, the practical situation is really different because a software development organisation will not have only one project in isolation. They will have many projects and there will always be some inter-relationship among them. The problem is hence much more complicated, needing more steps to identify the antipatterns and the required refactored solution. The necessary steps are-identification of project inter-relationships, identify individual status of each project and then follow the steps discussed for a single project. In order to identify a cross-project antipattern, the steps must not only to bring out the physical dependencies but also the phase of development for each dependent project.

In these articles, we have identified antipatterns and the suggested refactored solution for each, but these are not the only ones. There may be many more because software development is a never-ending activity. With newer technologies coming in, there will be more need for developing associated software and convert that technology into a viable product for consumers. It will be a very good service to the software community, if developers reveal the patterns and antipatterns and provide good documentation on them with suggested refactored solution.

(Concluded)

( To be continued)

(The author is Chief Technology Officer, Internet Component Management Group, Bangalore and can be contacted at: r.srinivasan@iCMGworld.com)

 
   
     
Copyright © 2006 iCMG. All rights reserved.
Site Index | Contact Us | Legal & Privacy Policy