views:

140

answers:

6

Let's assume you're in the middle of a long running project (long running = several years) and, as expected, there will be several things coming up with brand new releases. There might be a new .Net Framework with brand new features (e.g. Linq, Entity Framework, WPF, WF...), a new Visual Studio or V.next of your favorite Control Library, a new Mock Framework and a lot more things. What are your guidelines for handling these technology updates? Do you adopt them instantly or do you ignore them until the end of the project? Do you have different guidelines for different things (Tools, Frameworks, supporting stuff)?

A: 

I would suggest that the project not last that long. Develop the application in smaller pieces with iterations every couple months. That way, as new technology comes out, you can make the necessary change and implement updates as you go rather then have to decide to redevelop the whole application. As you say, trying to develop the whole application as things change just doesn't work.

Jason
I understood "long running project" to mean "product": for example a product might evolve (with many releases) over the course of 10 years.
ChrisW
+3  A: 

Stick with what you've started with.

A large and long running project often comes with a huge and highly complex code-base. Any change or upgrade to a new version of a library can add bugs in very subtle and unexpected ways.

Also: For large projects the tools and libraries used should have been tested and evaluated in the design-phase. Unless you find a show-stopper or a security issue it's best to not upgrade.

Always remember: Don't change horses in the middle of a stream. :-)

Nils Pipenbrinck
+4  A: 

In my experience, these decisions are always made on a case-by-case basis. Several factors are considered, including:

  1. How mature is the new technology? Does the organization like to be at the forefront working with bleeding edge new technologies, or does it prefer to work with proven tools and methodologies?

  2. What skill sets do your people have? Are they consistent with use of the new technology, or is more training needed? Will improved productivity outweigh the time it takes to come up to speed?

  3. What investment do you have in the existing technology? What is the cost of moving to the new technology? How much rework and rewriting of code is involved?

  4. What is the requirement? Is it supported by the existing techology, or are new tools needed to fulfill the requirement?

  5. What are the performance expectations? Does the new technology provide a performance improvement that cannot be met with the old technology?

  6. What about the technological culture? Is the organization vendor specific (e.g. a Microsoft shop)? Can open-source code be used?

  7. What is the scope of the project? Is it a large project that would benefit from supporting technologies like frameworks and tools, or is it a small project that would be unduly weighed down and complicated by these things?

  8. How is the new technology supported? Does the vendor have good documentation? Is there someone you can talk to if you have problems? Or are you an organization that has people that know how to solve problems without a support contract?

  9. Is the technology comfortable to work with? Does it seem to make sense? Is it clean and elegant? Do other people seem to like it? Are other people having problems with it?

  10. Is the technology the latest flavor of the week? Has it proven itself in the battlefield to produce tangible results, or is it just a religion?

  11. How much time do you have to learn the new technology and iron out the kinks? Do the benefits outweigh the costs?

As a very brief example, I chose Link to SQL for my most recent project, because the project was complex enough to warrant an ORM, L2S performs well and is lightweight, we are a Microsoft Shop, and it is my sense that the Entity framework is not quite ready for prime time (even though Microsoft says that it will be the go-to framework for the future).

Robert Harvey
+1 Good extensive answer.
Magnus Skog
+1  A: 

I would say different factors pitch in, like-

  1. Say a software is nearing its end of life, for example last April, Microsoft retired mainstream support for SQL Server 2000, and your product uses it then its wiser to go for the next version of SQL Server in your next release.
  2. Another factor which comes into play is how much value does the new features in the latest release of a software would bring to your product. It may well be the case that the new release of .NET framework has something which does not add any value to your product, then that does not build a strong case to upgrade.
  3. Budget is also an important factor. I think you need to upgrade licenses in order to step up to the next release unless you are already part of something like software assurance.
  4. Training to the team is also a factor. If the latest release is going to add to your product then you will have to train your team as well.

Well, there could be other telling factors too. These were the ones off the top of my head. I hope it helps.

cheers

Andriyev
+1  A: 

If you're talking about a framework-specific example, the biggest piece of advice I'll give you is keep the system and your application separate. This is why I love patterns such as Model-View-Controller - it keeps your code modular and means you can upgrade sections without breaking the app as an entirety.

On a more practical level, if your framework has a Git or SVN repository, checkout the usual 'system' directory from the repo, then you can call 'svn update' occasionally to keep up with the latest and greatest builds.

Jamie Rumbelow
A: 

As another poster said, it's certainly a case-by-case basis thing. What you can upgrade and when is determined mostly by how hard or easy it is to test the new version of the system. Having a comprehensive automated test suite for your application helps a lot with this.

Generally, I try to update to the latest stable release of libraries and so on as often as possible, because that makes maintenance easier. If you don't update, you may find yourself patching or working around bugs in the version of the library you are using. If you update less frequently, each update will be more work because you have more changes to deal with, and it's been longer since you last touched the system, and thus you remember less about it.

Curt Sampson