Frequently Asked Questions (FAQ)

What is unique about vFunction?

vFunction is the first and only AI-driven Continuous Modernization Platform for architects that provides Architectural Observability and Automation to manage technical debt and enable iterative application modernization, from basic refactoring to full rewriting and microservices extraction.

What languages does vFunction support?

vFunction supports Java applications (1.6+) and .NET applications (4.0+)

A wide variety of application servers including Oracle WebLogic, IBM WebSphere, Tomcat, Red Hat JBoss, and more are supported along with a large number of JVMs and JDKs – see the support matrix document.

What is architectural technical debt?

Architectural technical debt is the accumulation of architectural decisions and implementations that leads to high complexity of software manifested in slow engineering velocity, diminished innovation and limited scalability.

What is vFunction Architectural Observability Manager and what happened to the Modernization Hub and Assessment Hub products?

vFunction Architectural Observability Manager is a new product that combines the capabilities of two previously standalone products. It combines technical debt assessment from vFunction Assessment Hub, and deep analysis from vFunction Modernization Hub. This enables architects now to fully understand their architecture, catch and fix drift and debt issues early and often, and define quality metrics that the software architecture must meet. The previous two products are now combined into vFunction Architectural Observability Manager with the extraction features of Modernization Hub available in the new Refactoring Engine module.

What is architectural observability?

Architects lack the tools and visibility to continuously identify, monitor, detect, pinpoint, and fix application architecture drift issues from release to release, sprint to sprint. Architectural observability gives them the ability to incrementally address architectural drift and deal with the accumulation of architectural components, decisions, and drift that is turning their applications into unmanageable “big balls of mud.” Architectural observability is the ability to understand software architecture through the capability to:

  • Identify domains with dynamic analysis and AI
  • See class & resource dependencies and cross-domain pollution
  • Find high-debt classes
  • Improve modularity by adding common libraries
  • Identify dead code and dead flows based on production data

Architectural observability uncovers complex class entanglements, zombie dead-code, and long dependency chains across resources, classes, database tables, and more. This enables architects to shift left into the agile and DevOps-chain realities of product teams today to create specific to-do lists and stories that remediate architectural technical debt one fix at a time.

What versions of IIS are supported?

The version of IIS does not make much of a difference as long as it is running the correct .Net version. Having said that, we have tested on IIS 10 so far.

What kind of .NET monoliths are supported?

Any application running on the supported versions of the .NET runtime. This includes (but not limited to) batch processes, ASP.NET applications, Windows Services.

Does vFunction need access to the source code?

All analysis and architectural observability is conducted independently by the vFunction Continuous Modernization Platform based on dynamic code analysis and static analysis of the bytecode, and requires no source code access. If a service needs to be extracted using the vFunction Refactoring Engine, vFunction generates a “Service Spec,” which is a list of all classes, configuration files and dependent JARs that compose the service. It then copies the relevant sources and configuration files with their package structure and tests (if available)–so at this point access to the code repository and build systems is required. vFunction then creates a pom.xml for the service. From there,  you can compile and deploy that new service on AWS, Azure, OpenShift, Google Cloud, or any other cloud platform of their choice.

What about modernizing the database? I have a lot of stored-procedures and really need to clean this up?

vFunction focuses on analyzing and modernizing the application layer business logic within the JVM; however, it also analyzes transactions, stored procedures, connections, and database table access and considers these to be constraints that impact service separation. vFunction relies on analyzing traffic to/from the databases via JDBC, so it sees, for instance, calls to stored procedures—but it currently does not analyze anything that they trigger within the database. In this way, it can significantly help you identify domains with high exclusivity to improve modularity and eventual microservice extraction if desired.

How does vFunction identify domains and does it relate to Domain-Driven-Design services?

vFunction combines static and dynamic code analysis, together with data science and graph theory algorithms to identify optimal domains for observability, refactoring, and transformation.  It builds the full call tree and optimizes the best entry point to create the most exclusive domains. Its runtime analysis requires the application to perform as many user flows as possible in order to cover the functionality of the application or alternatively collect data in production for a sufficient period of time to achieve such coverage.

Because vFunction takes a “user’s perspective” to identify services, the automatically identified domains represent actual business domains that one would come up with through a Domain-Driven-Design exercise, such as Event Storming. The vFunction UI is interactive and allows the architect to further refine the domains to reflect specific business functions and architectural priorities.

Does vFunction automatically create the API to a new service?

Yes. In cases where there are no existing endpoints for the service, vFunction will automatically create these endpoints as RESTful endpoints using Spring REST or JAX-RS. You just need to add a call to the service from the monolith, and re-run the analysis.

Related eBook: Application Modernization Patterns & Anti-Patterns

What does Service Exclusivity mean within the vFunction platform?

Service Exclusivity within the vFunction platform means the degree to which classes, resources, methods, database calls, and variables are exclusive to that service. If you have 100% class exclusivity, this means those classes exist only within that service domain. This lack of tight coupling between services makes it comparatively easier to separate and extract that service.

In the Refactoring Engine, can a service be extracted even if it doesn’t get to 100% exclusivity?

Absolutely. For example, a Read-Only database table that is read from two different services may impact the exclusivity of those services, yet a Read-Only table shouldn’t prevent us from extracting those services. In some cases, a manual intervention may be required, for example if there is a database transaction that needs to be broken up. In these cases, either a developer is required to break up the dependency, or an architect can make an informed decision to alter the architecture and circumvent the dependency.

What if I’m left with non-exclusive classes after my analysis and baseline?

Non-exclusive classes that are left at the end of the analysis are effectively your refactoring to-do list. They serve more than a single service, but are not a utility used by many. The recommendation in this case is to start by duplicating the class between the services (which vFunction does automatically) and then refactoring them at a later time.

Does vFunction support tracking JTA and XA transactions?

Yes. vFunction tracks access to database tables, JDBC transactions, and also JTA and XA transactions as those relate to relational databases.

Does vFunction support re-platforming of the Java container/application server?

It depends on which target platform is required. vFunction mitigates risk and unknown variables in this way by keeping the exact same Java container for the microservice as a first step (e.g. from WebSphere to WebSphere). Since vFunction extracts a lightweight service in terms of the required context, it enables you to migrate to a lighter container such as Apache Tomcat, Spring Boot, and others. If the starting platform is Spring, vFunction can automatically generate microservices configured for Spring Boot.

How long does a typical vFunction engagement take?

Installing vFunction is simple and straightforward depending on your network configuration and security constraints, since there has to be a connection between the JVM agent and the vFunction server (all installed locally). A vFunction engineer can remotely support you during the installation as needed. Once the system is installed properly, you will either run the application in production or perform automatic testing in a QA or staging environment to cover as many flows of the system as possible. If no automatic testing is available, manual testing can be performed. This can take anywhere between one hour to several days, until you determine that sufficient coverage is met.

What if I already know how I want to break the system up into domains and services? Do I still need vFunction to extract only the identified services to rewrite or rearchitect?

vFunction identifies domains based on its dynamic and static analyses and its AI will minimize constraints and optimize the exclusivity of the domains it identifies; however, architects are encouraged to use the information exposed by the platform to modify the automatically identified domains to match their desired target architecture, taking into account the constraints that may arise from these modifications. Continuous modernization best practices encourage customers to iteratively modernize, evolve, and refactor the monolith to an improved architectural posture one release at a time, versus attempting a “big-bang” project.

Can vFunction analyze a production system?

Yes. Many customers deploy vFunction in production and leave its agent to collect data over a period of hours to days, with similar overhead as an APM performance monitoring solution (1-2%). The vFunction dashboard and UI allows the project team to continuously monitor and manage the various applications in the modernization pipeline.

What if my application runs on multiple JVMs?

In this case, you can install the vFunction JVM agent on multiple JVMs, run serial measurements on those JVMs, and then merge the results to get a unified view of the system on the vFunction platform.

Does vFunction fit a particular set of Java applications?

vFunction tracks information in a very fundamental way (native JVM agent, memory interactions etc.) and therefore is a very generic solution for any Java application.

How does vFunction ensure data security?

vFunction is installed locally and behind your organization’s firewall or cloud provider’s security – whether on premise or on your secure cloud tenancy, so no data leaves your secure environment.

Where do I find vFunction installation guides?

Contact us at and we will be happy to provide you access to our installation guides.

Technology leaders can now use architectural observability and automation to manage technical debt, pinpoint architectural drift, and enable continuous application modernization.