Functional Equivalence vs Application Advancement (and Vertical vs Horizontal)

These are a couple of useful terms I’ve picked up from the ”Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005” guide (I really need an acronym to refer to this book!). They refer to two stages of the upgrade process: Functional equivalence means that your .NET application has the same functionality as your VB6 application and the recommendation is that you should get to this stage before you start working on application advancement. Application advancement is when you start adding new or improved functionality, and where you can start to benefit from all the features of the .NET Framework. In many cases I see teams are asked to deliver both in parallel (as I discussed previously) and the end result is at best a lot of late nights and at worst, nothing is ultimately delivered.

Another useful concept discussed in the guide is vertical and horizontal upgrades. A vertical upgrade tackles a vertical slice through all the layers of an application, while a horizontal upgrade deals with a single layer of the application at a time. Which approach makes sense will depend on the architecture of your application. Many teams I have engaged understand the benefits of working with a vertical slice but it is interesting to see that in many cases they choose a poor or incomplete vertical slice. Common mistakes I have seen when teams scope the vertical slice include:

  • A vertical slice which fails to include reporting and archiving – leaving key implementation details until later
  • A vertical slice which fails to consider data volumes – the vertical slice is run against virtually empty tables, which masks significant issues with the implementation
  • A vertical slice which fails to consider concurrency – the vertical slice is never run within the context of simulated load, again masking significant issues
  • A vertical slice which fails to include interop with existing systems – despite interop being a key requirement of the solution

There are plenty of other examples – but failure to consider the above four can easily lead to significant difficulties later on in a migration project.