Despite recent advances in technology there are still several key issues facing application development. While new programming languages, platforms and methodologies provide benefits they do not address the productivity issues that software development faces. The issue is the way in which software is produced today - current methods have too many limitations that hamper the success of software projects.
For application development to move to the next level, software developers have to change the way that software is developed. The software factories approach proposes fundamental changes to the software development process. These changes have the potential to industrialise software development by combining new technologies, patterns, models and processes to rapidly assemble applications.
It is recognised that two thirds of software projects will experience some difficulties and a third of those will fail outright. And as technology continually improves, the cost of application development constantly rises. Why is this? There are several critical challenges that application development is currently facing. These challenges are contributing factors to the poor success rate, high costs and slow turnaround times in software development and must be addressed to allow application development to reach higher levels of productivity and effectiveness.
Despite repeated attempts, large-scale development by assembly remains unattainable. The opportunities and potential payoffs are well understood - and supported by the majority of stakeholders - but technologies and methodologies commonly resist the impetus to evolve. There are many suggestions as to the causes of this but the effect is that most development projects start from a zero (or near zero) base and most attempts to create reusable software assets result in increased cost and complexity and these assets are invariably never re-used.
Because components that are designed for a specific project are almost impossible to package for re-use as they are always skewed by the context in which they are created, the approach to designing and packaging re-usable components must change. The added development effort required to effectively create a re-usable component is quickly cast aside due to time and budgetary constraints. The answer is to design components around the underlying patterns and enable these to be configured by tools designed for the specific pattern.
Software development has to be industrialised and the tools specialised. Productivity within application development is constrained because, in its current form, it requires skilled artisans to produce anything.
Industrialisation of the development process would see the artisans creating tools or machines that can be effectively leveraged by a lesser-skilled workforce. This would allow the expertise of the artisan to be effectively captured and re-used; the result would be greater output and more reliable execution.
The languages we are using are far too general; what is needed is specific languages for specific domains. If the tools being used to write a financial services package understood various financial objects and concepts [such as the balance sheet, general ledger etc], application development would really get a jumpstart. Instead though we define coarse-grained business concepts such as invoices or orders in terms of fine-grained, low-level constructs such as strings and decimals.
New methodologies such as Agile and Extreme Programming readily support the software factories approach. Agile methods minimise risk by developing software in short iterations, which typically last one to four weeks, resulting in the delivery of tangible results.
However, in order to achieve development by assembly and effective component re-use, methodologies must be well defined and tailored to capture requirements. Tools designed to support the methodology must not create artefacts that are out of synch with the tools used to generate the software product, rather they must capture requirements directly into the same environment.
Emerging initiatives reflect the fact that the problems facing the industry go deeper than the chosen language. If you want to make good software, you have to look at the process and stick to the standards.
Nick McKenzie, technical director of nVisionIT
For more information contact Nick McKenzie on 011 258 8200.