Frequently Asked Questions (FAQ)


What is unique about vFunction?

vFunction is the first AI-driven Architectural Observability Platform for software architects. It continuously observes your application so you can find, fix, manage, and prevent architectural technical debt to improve modularity, scalability, and engineering velocity.

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?

Architecture Technical Debt (ATD)  is technical debt caused by architectural drift, suboptimal architectural decisions, violations of defined target product architecture and established industry architectural best practices, and architectural trade-offs for faster software delivery. While expedient in the short term, the collection of design or implementation constructs sets up a technical context that can make future changes more costly or impossible.

Gartner Quick Answer: How to Manage Architecture Technical Debt, Tigran Egiazarov, Aaron Harrison, Anne Thomas, Howard Dodd, Stefan Van Der Zijden, Thomas Murphy, 22 September 2023.

Krutchen, P., Lago, P., Verdecchia, R. (2021). Building and evaluating a theory of architectural technical debt in software-intensive systems. The Journal of Systems & Software. 176. P.6.

Watch Video

What is vFunction Architectural Observability Platform and what happened to the Modernization Hub, Assessment Hub, and Extraction Engine products?

vFunction Architectural Observability Platform combines the capabilities of three previously standalone products: vFunction Assessment Hub,  vFunction Modernization Hub, and vFunction Extraction Engine. This enables software architects to fully understand their architecture, identify architectural drift, and find, fix, and prevent technical debt issues. The extraction features of Modernization Hub are available in the Code Copy feature of the platform.

What is architectural observability?

Architectural observability is the ability to analyze an application statically and dynamically to understand its architecture, observe drift, and find and fix architectural technical debt.

Architectural observability enables the understanding of software architecture, helping teams to:

  • Define domains with dynamic analysis and AI and understand their modularity
  • See class and 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
  • Identify circular JavaARchive (JAR) dependencies
  • Understand and improve the cloud suitability of the architecture

Architectural observability uncovers complex class entanglements, zombie dead code, and long dependency chains across resources, classes, database tables, and more.

Watch “What is Architectural Observability

Why is architectural observability important?

Software architects lack the tools and visibility to continuously monitor, find, and fix application architectural drift issues from release to release, sprint to sprint. While the following tools help identify issues in performance, code, and component interdependencies, they do not provide visibility into business logic architecture:

  • Application performance monitoring (APM) and other DevOps observability tools enable performance monitoring and fault or outage early detection.
  • Code quality tools address source code quality, bugs and code smells, usually through static analysis. Static application security testing (SAST) and Dynamic Application Security Testing (DAST) solutions provide static & dynamic security & vulnerability analysis.
  • Software Composition Analysis (SCA) tools identify open-source components and map services, components, interdependencies, and 3rd party vulnerabilities and aging frameworks.

Addressing only performance issues, code smells, or faulty service connections during fixed periods in delivery cycles may give leaders a false sense of progress and fails to address technical debt accumulating in the architecture.

Architectural observability provides architects and engineering teams visibility into their application’s business logic layer to address higher impact and harder to solve issues, such as overall product quality, feature delivery lead time, developer productivity, and scalability.

What versions of IIS are supported?

The version of IIS does not make much of a difference as long as it runs the correct .NET version. Thus far, vFunction has been tested on IIS 10.

For complete Java and .NET, see the vFunction support matrix.

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?

No. All analysis is conducted independently by the vFunction Architectural Observability Platform based on dynamic code analysis and static analysis of the bytecode and requires no source code access. Suppose you need to extract a domain using the vFunction Code Copy feature. In that case, vFunction generates a “Service Spec,” which lists all classes, configuration files, and dependent JARs that compose the service. It then, and only then, requires access to the source code to copy 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 you choose.

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

vFunction analyzes and modernizes the application layer business logic within the Java virtual machine (JVM) and common language runtime (CLR) for .NET apps. However, it also examines 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 Java database connectivity (JDBC), so it sees, for instance, calls to stored procedures. It also conducts static analysis of the database stored procedures (currently for Oracle databases) to map their dependencies and presents those as well.

This way, vFunction can help you identify domains with high exclusivity to improve modularity and eventual microservice extraction, if desired. Additionally, vFunction helps identify portions of business logic in the database stored procedures that you may want to extract and bring into the business logic layer, into specific domains.

What are domains in the vFunction world? 

vFunction learns your application and creates a large meta-model representing class and resource interdependencies, enabling you to analyze its architecture. It allows you to impose your architectural view (current or future) on it to understand its health – how modular it is, the interdependencies (e.g. class, db), sources of technical debt, dead code, etc., as well as measure drift against that architecture.

The spheres represent domains and serve as vFunction’s suggested starting point to create your desired architecture. Domains are identified based on mathematical optimization of class and resource exclusivity across the application. If your application is well-architected (i.e., highly modular)  the spheres will likely resemble your application’s logical domains. However, keep in mind that a domain is a subjective business representation of an application functionality. Therefore, you will need to impose your architectural view of the domains to let vFunction analyze it and enable you to understand the health of that architecture – its modularity, interdependencies (e.g. class, db), sources of technical debt, dead code, etc.

Does vFunction automatically create the API for 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 Java API for RESTful Web Services(JAX-RS). You just need to add a call to the service from the monolith and re-run the analysis.

Download the related ebook: Application Modernization Patterns and 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. It is basically the degree of modularity of that domain. If you have 100% class exclusivity, those classes exist only within that service domain. This lack of tight coupling between services makes separating and extracting that service comparatively easier.

Can a service be extracted by vFunction Code Copy even if it doesn’t get to 100% exclusivity?


Yes. Code Copy extracts the domain code at the user’s request. The higher the modularity the less code duplication will be needed. For example, accessing a read-only database table from two different domains may impact the exclusivity of those domains. Yet a read-only table shouldn’t prevent extraction of those domains. In some cases, a manual intervention may be required, for example, if you need to break up a database transaction. These cases require a developer to break up the dependency, or an architect can make an informed decision to alter the architecture and circumvent the dependence.

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

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

Does vFunction support tracking JTA and XA transactions?

Yes. vFunction tracks access to database tables, JDBC transactions, and Java Transaction API (JTA) and Extended Architecture (XA) transactions related 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 by keeping the 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, Quarkus, and others using its built-in integration with OpenRewrite recipes. If the starting platform is Spring, vFunction can automatically generate microservices configured for Spring Boot without Open Rewrite.

How long does a typical vFunction installation take?

Installing vFunction is simple, depending on your network configuration and security constraints. 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. 

Once installed, run the application in production or perform automatic testing in a QA or staging environment to cover as many system flows as possible. If no automatic testing is available, perform manual testing. This can take a few hours to one or two days until you meet sufficient coverage to achieve the starting point. Subsequently, we recommend installing vFunction in production and tying the observability intervals to your release cycles.

If I rewrite my application from scratch, do I still need Architectural Observability?

The vFunction value proposition to continuously monitor and manage the application remains consistent, regardless of the type of project. 

If you are tasked with rewriting a complex Java/.Net application with high ATD that resembles a “big ball of mud,” the following statements may resonate:

  • The application is significant from an operational perspective, and changing it is risky and expensive.
  • There is a decision to create a new generation of this application, but the team is reluctant to “deal with” the existing code.
  • The team is not developing the app daily and has some knowledge gaps.
  • The team has some understanding of the domains involved and even has a domain model, either “mentally” or explicitly after doing some Domain Driven Design (DDD) analysis.

The insights provided into the software architecture of an existing application are crucial regardless of whether improving the architecture is done as part of the same codebase or a new one. Moreover, vFunction can provide insights on a new application from day one to ensure it is designed and implemented according to the desired design, and monitor throughout its entire life cycle.

Can vFunction analyze a production system?

Yes!. Like other observability tools, the value of vFunction is closely related to its ability to understand the real architecture of an application. That requires learning the application in production. All customers deploy vFunction in production and leave their agents to collect data for hours to days, with overheads similar to an APM performance monitoring solution (1-2%). The vFunction dashboard and UI allow the architect to continuously monitor and manage the entire application estate, create a modernization pipeline, and set observability triggers tied to the CI/CD or to some preconfigured schedule.

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 them, 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 fundamental way (native JVM agent, memory interactions, etc.) and, therefore, works for any Java application. See support matrix.

How does vFunction ensure data security?

Install vFunction locally behind your organization’s firewall or cloud provider’s security – whether on-premises or on your secure cloud tenancy, so no data leaves your secure environment.

Contact info@vfunction.com for our security whitepaper.

Where do I find vFunction installation guides?

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

Monitor, manage, and modernize your software architecture with the vFunction Architectural Observability Platform