With software intelligence, AI can understand massive custom software systems and automate their modernization
The following is an abridged summary of the full white paper recently published here.
When it comes to generating new software code, AI can be extremely useful. But typically, over 75% of large organizations’ software engineering resources focus on maintaining, enhancing, and modernizing existing applications. For example, sending a complex custom software system to the cloud with all databases, technology layers, and intricate dependencies requires either refactoring or a lot of in-place optimization after a “lift and shift.”
Currently, generative AI (GenAI) by itself can only help so much in this situation since understanding the context of a large codebase is beyond its reach due to working memory limitations, among other reasons.
When software intelligence meets AI
Software intelligence technology has been honed over years to read source code, database scripts, APIs, frameworks, and all related software artifacts like an elite software engineer would to understand the application semantics, i.e. what the application does. It acts as a synthetic brain that can absorb 40 Kilo Lines of Code (KLOC) per minute, understand the meaning of each programming element, map the explicit and implicit interactions between all elements across all layers, and derive deterministic meta data of the entire system.
Essentially, a software intelligence engine can reverse engineer the inner structures of a multi-technology application into a massive knowledge base, often presented as a searchable, interactive blueprint for architects and development teams to get immediate answers to innumerable technical questions.
Figure 1 - Software intelligence used as digital twin of complex system
This eliminates significant effort and boosts software teams’ efficiency when maintaining or modernizing complex applications. But even with software intelligence, humans must still interpret the current architecture and re-design it for the target environment.
This is where coupling of AI and software intelligence brings tremendous value that can revolutionize bug fixing, on-going maintenance, and application modernization.
Software intelligence technology can “feed” AI with contextual information about custom software applications, so it can generate code to improve or change them. Conversely, AI can make software intelligence easier to consume and more prescriptive.
Explaining software components in context
Software intelligence technology excels at extracting and presenting the inner machinery of a complex software system in context. GenAI is great at understanding and translating ten to 100 lines of code and commenting on each individual element, providing the “last mile” of information. Combining the two in the same display–the structural view with the textual explanation–accelerates a developer’s navigation through a complex application, even when written in unfamiliar languages and technologies.
Figure 2 – Providing a synthesis of what each code component is doing in the overall system context
Explaining a whole software system
The main challenges overcoming AI prompt length limits and lack of domain-specific knowledge about a bespoke software system. Using a loop mechanism, AI models can be guided by software intelligence stored in the knowledge base to provide concise and readable explanations at different abstraction levels:
A software intelligence engine can help “clean up” components, like the feature engineering work done by data scientists for removing all irrelevant elements from consideration.
Each cleaned component can be submitted to the AI engine, along with context-specific information from the software intelligence engine, like component types, dependencies, nature of interactions, which data structures are accessed, and the naming conventions for each application layer.
Once all components are explained, the structural understanding provided by the software intelligence engine can ground the GenAI to explain each transaction. Transactions can then be aggregated to explain complete modules, all the way up to the entire application.
Figure 3 - Using chat to query the software intelligence knowledge base using natural language
Then, using GenAI conversational capabilities, the “consumer” can ask, “How does the persistence layer, interfacing through middleware and a database work?” or “What’s going to happen if I change this component?” or “Give me all components dealing with customer data.” One can already get answers to such questions by navigating the blueprint visualization rendered by a software intelligence engine, however GenAI can make that easier by providing a natural language conversation.
Transforming software systems
In short, software intelligence technology brings a deep understanding of “as-is” structures. Grounded with this information, AI can be trained about options and patterns for “to-be” architecture. Combining them is a promising way to automate application modernization, before or after a journey from on-premises to cloud, where LLMs can then be fine-tuned to generate optimized code for targeted cloud platforms.
Figure 4 – AI with software intelligence for application transformation
Ensuring the integrity of new code
Code generated by GenAI is unknown, by definition, and its quality should be treated as suspect. With higher new code volumes, the need to automate integrity checks becomes greater. Also, with the faster pace of components being added by the same number of developers, understanding the resiliency, efficiency, and security of the code produced by GenAI becomes critical. Software intelligence technology can be applied to automatically provide this understanding, based on the stringent ISO 5055 system-level structural quality framework, to ensure holistic system integrity.
Functional decomposition of legacy code
Lastly, consider the “holy grail” of software intelligence technology - gaining functional understanding of a big system, i.e. with millions of code lines. With GenAI that can read plain English comments in code, cluster components and variables by the natural-language significance of names and look at those name clusters in the context of end-to-end transactions, you can query the software intelligence knowledgebase based on the function that different components serve, and get answers to questions such as what are all the components affected by a pricing structure change, a new GAAP rule, business process change, new way to detect fraud, and so on.
Software intelligence technology can provide the metadata and context GenAI needs to be relevant in maintaining and modernizing complex, data-intensive heterogenous applications. Inversely, GenAI can empower developers and architects with more consumable insights from the software intelligence technology they currently use.