Smart software, also called “AI-enhanced” or “ML-enabled” give rise to unique software engineering challenge as these systems are harder to specify, verify and test. Additional complexity arises from all the potential interactions between the AI components and the “traditional” ones (since we need to specify how they collaborate, test that they behave consistently and analyze their interdependencies).
In this post (extended summary of the column above) we offer a “wish list” that outlines what developers need to watch for in low-code tools for smart software. Also, we present work on an architecture (see featured image) that is one way to satisfy items on that wish list.
Low-code for smart software wishlist
We believe a developer working on smart soft-ware would be interested in a low-code platform capable of:
- Managing concerns for both AI components and traditional software components in a consistent and integrated way including their interdependencies (e.g., an AI component trained using the data entered via a regular component).
- Supporting the complete lifecycle of the required AI components (training, validation, deployment and monitoring), as well as tracking the decisions behind their architecture and evolution.
- Operating with a technology-independent and platform-agnostic specification while supporting a transparent deployment to different AI service providers.
- Enabling the integration of AI components in both the front-end (e.g., chatbots) and back-end (e.g., prediction tasks) of our system.
- Defining high-level goals or quality concerns (e.g., fairness) that can be automatically tested and/or monitored after deployment.
- Being used without intricate knowledge of the underlying AI techniques, offering mechanisms to automatically select a suitable method and (hyper)parameters for a particular usage scenario.
- Supporting a variety of AI tasks, beyond text or image classification.
A low-code architecture for smart software
To provide the features identified in the previous wishlist, we envision an architecture (see featured image in this post) based around the following components:
- Model editor. Developers provide the description of the software system using a unified notation, a smart software model, which includes both traditional and smart elements:
- A description of the application domain and the architecture of the software system, i.e., components and the relationships between them.
- A high-level description of the tasks to be performed by the AI components, the target quality metrics as well as concerns (e.g., ethical issues, resource budget for training or deployment) that should be considered.
- A description of the input data sources storing to be used for the training of AI components, with emphasis on the identification of information relevant from the point of view of fairness.
- Code generator. The information provided in the model drives the generation of code implementing the different processes within the low-code tool. Who knows? LLMs (large language models) could also play a role here!
- Training. The code generator emits code to train a ML model, preparing training and validation datasets from the input data sources according to the resource budget. After training, the target quality metrics are measured and any ethical constraint is checked.
- Deployment. The trained model is deployed on a particular AI platform, which can be either a cloud service from a variety of providers or a local AI package.
- Traditional software components. Software modules that do not integrate AI features are generated in the usual way. These modules interact with AI components through a dedicated API.
- Monitoring and feedback. Finally, the AI components should be continuously monitored and tested after deployment in order to provide continuous feedback to the developer. This feedback should include explanations regarding the decisions made by AI components, linking back to the input data sources or tracing back to requirements in the input model.
All components in this architecture are feasible and partially already exist as separate elements in other low-code, AI or monitoring plat-forms. But bringing them all together in a unified framework could be a force multiplier and a significant next step in lowering the barrier to entry for the next generation of smart software developers