Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

How companies working on large projects evaluate an impact of a single modification on an existing code?


Since my question is probably not very clear, here's an example:

Let's take a sample business application which deals with tasks. In the database, each task has a state, 0 being "Pending", ... 5 - "Finished".

A new requirement adds a new state, between 2nd and 3rd one.

It means that:

  • A constraint on the values 1 - 5 in the database must be changed,
  • Business layer and code contracts must be changed to add a new state,
  • Data access layer must be changed to take in account that, for example the state StateReady is now 6 instead of 5, etc.
  • The application must implement a new state visually, add new controls for it, new localized strings for tool-tips, etc.

When an application is written recently by one developer, it's more or less easy to predict every change to do. On the other hand, when an application was written for years by many people, no single person can anticipate every change immediately, without any investigation.

So since this situation (such changes in requirements) is very frequent, I imagine there are already some clever techniques and ways to predict the impact. Is there any? Do you know any books which deal about this subject?


Note: my question is not related to How do you deal with changing requirements? question. In fact, I'm not interested in evaluating the cost of a change, but rather the way to predict the parts of an application which will be concerned by the change. What will be those changes and how difficult they are really doesn't matter in my question.

share|improve this question
add comment

4 Answers

up vote 3 down vote accepted

I don't think you can ever tell just how much a change will affect code.

That being said though, if one know the framework of the application well, he can generally predict about how long it will take and what needs to be done. It comes from experience, not metrics. I'm sure you've thought of cases that a user thought a change would be simple ('He's just adding one menu option! how hard can that be?!) but in reality was quite complex.

I have two possible solutions.

The first I think is critical: Documentation. Being able to read about the general layout of an application will help someone greatly in determining where changes will need to be made. Lower level docs about specific areas will help in actually making the changes.

The second would be to have a senior developer look at each request as he probably can tell quickly what it will entail. He then can give an estimate of how long it will take and what needs to happen before it is assigned to a person or team for development. This may not always be practical, so documentation is still extremely critical.

share|improve this answer
1  
documentation lies. read the code. –  Steven A. Lowe Nov 19 '10 at 3:33
    
W/O documentation, learning curves for new software are extremely steep. Read both - and have correct documentation yourself! –  Michael K Nov 19 '10 at 13:07
add comment

How much of an impact it will have is not a problem that can be solved mechanically. You'll have to evaluate how your current system behaves, what kind of work is required to implement it, and what risks go along with it, and it will require human judgement.

share|improve this answer
add comment

Make a very low level change to implement the feature, and then fix all the errors that it causes. Start with the compile errors, then move on to testing and fix those errors, and then release to customer and let them tell you about all the other problems.

Haha, only serious.

share|improve this answer
add comment

The way this MUST be done is with a GOOD source control system that forces developers to comment and label, and allows you to easily step back in time through various iterations of a deliverable.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.