jump to navigation

An alternative application development approach February 18, 2008

Posted by nexusone in Application Generators, Software Development Value Chain.
Tags: , ,
add a comment

Introduction

The automated generation of software code is certainly not a new concept. However, there is a renewed interest as the limitations of our current generation of applications and approach to application development are becoming increasingly evident in terms of supporting both new business models and the delivery of large scale applications. In view of this, a new approach to software development will be required to ‘deliver’ a new class of real time integrated applications that leverage the capabilities of hardware and fully supports end-to-end value chain operation in an increasingly integrated and collaborative world

The Problem

One of the themes that can be observed with respect to the evolution of application development is that it has become a “paint by numbers” exercise. For example, the evolution of software development has brought with it a proliferation of enterprise design patterns and best practices. This is a good thing – increased use of design patterns points to the increased potential of and acceptance of reusing information.

However, this good intention rapidly breaks down when the current Software Development Value Chain (SDVC) is applied. The reality is that code is rather hard to write consistently. Programming is a highly contradictory mix of some considerable thought and lots of menial tasks. The menial also tends to be highly repetitive in nature. To implement a large scale system using the current development approach, programmers must face the chore of endlessly repetitive tasks.

Human deficiencies such as miscommunication also play their part and become increasingly insurmountable as the scale and complexity of the intended application increases. Miscommunication occurs when business analysts misinterpret business user’s needs, then designers misinterpret analysts, programmers misinterpret designers, and finally testers test code that is not what users expected. In this ‘ecosystem’ all the participants operate within completely different and highly disconnected frames of reference – users and analysts operate with words, designers with graphs of various kind, programmers with code, and testers with executables.

These various forms of expression are hard, if not impossible to bridge, especially when the application development process lacks formalisation, traceability and a coherent change approach. Moreover, none of development tools work together in a coherent manner to create a development platform that supports a fully integrated, seamless, traceable and coherent transformation of artifacts throughout the entire application development process.  Humans (no matter how cheap) laboriously coding lines in isolation from each other are incapable of building the next generation of applications, or replacing legacy systems – machines are much better at ‘joining all the dots’.

At this juncture it is illustrative to briefly reflect upon the evolution of the manufacturing industry and contrast that with the current status of software industry. It is evident that the software industry has yet to pass through an evolution in a similar vain to that which occurred in manufacturing in terms of automation, continuous production and the application of robotics to evolve a new ‘factory’ or ‘engineering’ driven approach to application development.

The early promise of a revolution via code generators as potential tools to replace programming teams eventually proved elusive as so much was still left to the programmer to ‘figure out’. Inevitably there was a need to hand craft and code all the areas not covered by the generator. Generator toolsets are not new and there is a broad proliferation of generator types. The diversity of the generators’ approaches and varying technologies (of both the code being generated and the tool used to do the underlying work) are indicative of a software market brimming with ideas – but noticeably and importantly lacking in formal standards and approaches.

An approach

To address the limitations and the endless cycle of repetitive coding it was concluded that repetitive tasks are what computers are good at and a new highly rigorous engineering approach should be applied to the complete generation of nearly 100% of all the components of an application from an engineering design.

This new approach (Application Generation) moves beyond other generation models in terms of combining API generation, database tables, business logic, user interface, etc, in a single holistic design and development environment. This has the potential to liberate the project team to concentrate on the all important design phase (understanding and interpreting the business vision) and then fine tuning the application once it is has been generated.

This also promises to set a new rigorous standard for application development and may provide a massive head start in any new application development project by being able to generate and deliver an application as a completed product rather than a ‘toolset’. This may also represent a considerable step change in application development in terms of productivity and our ability to replace legacy systems and deliver innovative application designs.

Application development can become extremely rapid and highly iterative. For instance when coming to a ‘fork in the road’, using the traditional SDVC approach programmers will pick one road or another – the choice of either can be very costly and time consuming. Applying a highly automated approach the project team can simultaneously follow both or many roads and simply choose which option and configuration to experiment with as a final solution.

A model or simulation, of the ‘real world’ can be rapidly built during the design phase in order to identify the business events that the resulting application is required to support. This is an extremely powerful concept in the sense that it allows the application designers (Business Analysts) to focus on confirming their understanding of the application business domain with the eventual users of the system in a wholly business context prior to the finished application being generated.

The potential gains in development speed and cost reduction via this approach cannot be emphasised enough: we are potentially looking at many orders of magnitude in terms of productivity and richness of application design and sophistication. Adopting this approach has the potential to move us significantly beyond the capabilities of our extant development eco system.

Another potential impact would be to change the total cost of application ownership. Currently the prospect of making even a simple change to a large legacy application or integrating multiple and disparate systems are viewed with trepidation by ICT managers and programmers. A simple change could have far-reaching knock on effects, resulting in time-consuming iterative changes and the need to trap all the resultant problems and issues that cascade from the intended change.

Utilising the new development approach the prospect of making a simple change is suddenly not quite so costly, time consuming and risky. An auto generated application will be fully versioned as changes are made to the design and not the underlying code. Following changes to the design a new version of the application could be generated in a day. Within this environment the application would never age as new thinking and ideas could be constantly incorporated via the application generators as these would be constantly maintained to reflect the latest information systems thinking. In this context it is far easier to think of maintaining a single properties file via a change in the application design instead of maintaining millions of lines of aging code.

Summary

This has the potential to introduce a new generation of multi tenanted real time collaborative applications that are ultra-responsive to changes business requirements. The application of an engineering framework and associated methodology to auto generate applications has the potential to introduce a considerable step change in application productivity, scale and design innovation.