generative ai, software development, software, intelligence, AI

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 the 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 a multi-technology application’s inner structures 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.

AWS

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 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 are 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:

1. 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.

2. 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.

3. 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

New Code Integrity and Functional Decomposition of Legacy 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 stringent ISO 5055 system-level structural quality framework, to ensure holistic system integrity.

Likewise, a kind of software intelligence “holy grail” is when it develops a 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 knowledgebase based on the function components served and proactively understand changes that affect many components (for example changing to a pricing structure, or new ways to detect fraud.)

Conclusion

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.