Rewrite vs Migrate vs Reuse vs Replace

“Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005” is a great resource for anyone looking at upgrading from VB6 to .NET. The guide was developed jointly by the Microsoft patterns & practices team and ArtinSoft. See my interview with ArtinSoft CEO Roberto Leiton Garro. It was written some time back and things have moved on – but it still represents a great source of information.

One of the first issues the guide addresses is the question “Should we upgrade?”, neatly summarised by this diagram.

clip_image002

The four options are:

  • Migrate. Automated migration process using Visual Studio or 3rd party tool.
  • Reuse. Interoperate – extend and upgrade.
  • Rewrite. Start over.
  • Replace. Look for a package solution or outsource.

Many companies I worked with in the early days of .NET looked first at Rewrite driven in part by a strong desire to improve the underlying architecture and code structures at the same time as they moved to .NET. Unfortunately many of those projects run into difficulty and several were never completed. The problem they were trying to solve was too large:

  1. Clean/improve the architecture and codebase  and
  2. Be competent in a completely new development stack on a large project from day one and
  3. Simultaneously add additional new functionality to justify to the business the time and effort expended and
  4. In many cases also introduce new software development practices.

Hence I  quickly became a fan of Migrate or Reuse as the right approach for most companies. Interestingly though, Rewrite is a less risky option than it once was. Many companies who still have significant VB6 projects also now have strong .NET skills gained on other projects, improved software development practices (including automated tests – a must IMHO for Rewrite) and have even taken the time to refactor elements of their VB6 codebase over the last 6 years. That said, I would still place Rewrite below Migrate or Reuse for most companies.