After more than half a century of improvements in software engineering, business application development is still complex and contains a lot of unpredictability. There are many developments in programming languages, frameworks, development environments and tools that help tackle complexity but on the other hand the world is changing at a faster pace and concepts like being always connected, mobility, machine learning, social networking, cloud based services keep adding new challenges on top of the old ones.
Application development is still more of an art than an engineering discipline and delivering projects within planned timelines and with desired quality are the main challenges. In business application development, the technological advances in hardware and emergence of cloud platforms changed the landscape significantly.
Considering today’s complexities, a Low-Code platform needs to make things simpler so that more development work can be done faster and with less technical knowledge. There a number of key areas such a platform needs to address:
1. User Interface Details
Building an app that works on multiple devices and works in various mobile/browser/computer configurations is no simple feat. There are a number of technologies that can make this a reality but there are always compatibility issues that show up when one develops a real life application. A Low-Code platform should provide a standard set of UI widgets and way to compose complex displays from components.
2. All about Data
Business applications are all about data. One needs to be able to access data easily and also update existing data or create new records/entries. Since the days of dBase, table based abstractions have been a favorite in modeling data. When data is mapped to tables in a straightforward fashion (i.e. data is in Excel sheets) this works well for both reading and writing. When things get complicated, one needs to write queries (or data access code) to get data into a table form for the client to read. This works fine for reading existing data but updating data can get complicated. It is non-trivial to update data when data is replicated in multiple tables, or replicated across multiple systems. This is almost always the case when we are talking about enterprise scale applications.
A platform is Low-Code to the extent that it can abstract the data access layer in an enterprise setting. If each new application requires custom queries and data aggregators for data access, we end up writing a lot of complicated code (or queries) that needs to be maintained.
3. Business rules
One of the biggest issues in application development that separates an enterprise application from a simple application is the number of checks that needs to be performed in every screen or transaction. There are controls and filters on what data a user can see across several dimensions (like users position in organization, role, physical location, clearance level), combinations of permitted values (for form A, you can only pick products from list B but if you had filled the form before in the last 3 months you can also pick from list C, and Managers can also pick from list D). A low-code platform needs to provide means to code such rules efficiently, and also in a way that should make maintenance of these rules simpler. In a complex business environment, description and management of these rules usually dominate application development. A transaction with 4 or 5 database queries can contain 1000 or more lines of code doing the checks if a transaction is permitted with the given input data.
Some business rules are specific to a particular screen of an application but many business rules exist for all applications/screens to enforce, e.g. a salesperson should not access sales data outside his/her district. Without platform support, enforcing such rules across all screens, reports, and applications becomes very complex and a nightmare to maintain. With access to sensitive data, stakes become high and any change to an application requires thorough testing.
A big source of headaches with regard to data is integration with other systems. When data is entering an application from outside, all the validations and business rule enforcements need to be done at each integration point. Anything missed in the checks may result in corruption of data within the system and requires costly cleanup. A low-code environment needs to handle not only business rules and data validation at user interfaces, but also machine to machine connections that exchange data. With the increasing importance of Internet of Things (IoT) in our daily life, how we easily develop apps talking with machines is an essential part of low code development. Low-code features around data access, validations and business rules need to be conceptually separated from UI features so that machine-to-machine integration benefits from low code platform.
Producing an upfront specification for a sufficiently complex application can get very expensive quickly. A low code platform needs to support agile development well to get into development of complex applications. Visual tools do not necessarily handle complexity and incremental development well. Visual query builders handle simple queries well but faced with complex requirements many experienced developers resort to text based interfaces. Similarly it is very nice to draw process diagrams or transaction flows visually, but once one adds all the validations, paths taken when validation fails, branching of behavior with business rules, exception handlers, timeouts etc. diagrams become unreadable and unmaintainable. One needs very sophisticated tools to understand impact of making incremental changes to a complete flow diagram because looking at it may not provide much insight. Agility implies embracing change. The tooling a low-code platform provides to encourage change becomes the real differentiator.
Considerable progress have been achieved with the advance of agile development methodologies in the last two decades, but a lot more improvement in productivity and speed are needed. Right abstractions and tools for low-code development can provide a new foundation to take software development further.
Looking ahead, there is a big need to develop new generation of business applications that combine what the Cloud offers with the connected mobile lifestyle. Today, almost every business initiative requires some execution on software development. The development effort for cloud and mobile ready software is too big, and resources required to do the task are neither plenty nor cheap to make a simple technology refresh. There is a genuine opportunity to transform how we develop software; keep pace with dynamism of business through agile software development practices, and embrace automation to reduce the time to take business ideas to market.