Home
Infrastructure
Engineering
Outsourcing
Applications
Tools
Services
PC Development
Custom Software
Improve Process
Project Management
Contact
 

Application Development Using Blueprinting

Application development is set to become ever more complex, with the widespread advent of multicore demanding increasingly concurrent apps. Blueprinting methodology offers the answer for software just as it has for mature industries in the past.

In order for development to proceed smoothly and in line with the principles of blueprinting there are a number of prerequisite features required of any blueprinting technology.

General Applicability

A good blueprinting language should not be tied to a particular class of application development. Returning once again to the building analogy, suppose an architect was trained in blueprinting schools and a completely different type of diagram was used for blueprinting hospitals. It would be difficult to specialize horizontally because an architect would have to learn every type of diagram from every domain. A building firm looking to build a hospital would have to find and recruit an architect with previous experience of building hospitals thus raising the cost of the project.

The same logic applies within the software industry. A single blueprint language that is general enough to describe any application means that the software architect can specialize horizontally. Obviously domain expertise is still required and the architect can work with consultants, his customer or may have the necessary domain knowledge himself.

A fully trained software architect equipped with the right blueprinting technology and supplemented with the required domain expertise should be able to blueprint applications from domains as wide as:

  • Windows Desktop Applications
  • Telecoms
  • Medical Imaging
  • High Performance Digital Sonar/Radar
  • Video Games
  • Distributed Interactive Simulations
  • Database Software
  • eBusiness Software
  • many more...

Connective Logic Systems have provided the following interesting three part article discussing the application of blueprinting process and technology to the defense and aerospace sector:

Part 1: Open Architecture - Technology, Process or Both?
Part 2: Defense Software: Looking Beyond Openness
Part 3: Improving Defense and Aerospace Application Development

The primitives provided by a blueprinting language therefore must be at a fairly low level in order to support this general applicability. For example, providing components such as beamformer, pixelator etc. may provide everything a sonar developer needs but would not constitute a general blueprinting language but rather a sonar library.

This is similar to the approach that Labview takes and even if this library contained everything that was needed today, it is inevitable that it would not tomorrow. It would, however, be desirable to produce such libraries using a general blueprinting language.

Portability

A key purpose of an application development blueprint is to describe the application at a sufficiently high level of abstraction to avoid it being unduly tied to a particular platform, topology or contemporary technologies such as web services.

A good blueprinting language should allow us to describe the high level behavior of an application so as to be prescriptive and therefore able to generate code but without assuming any underlying platform or topology.

In other words, the same blueprinted infrastructure should be capable either being translated to a different platform or translated to platform independent code that is subsequently linked with an appropriate platform runtime library.

There is a caveat to this however; there is always likely to be platforms to which a particular non-trivial application development cannot be ported due to the physical restrictions of the platform. In particular the amount of data that can be held in the local memory of the IBM Cell's synergistic processors is prohibitive for many applications and requires special tiling logic to break the data down into small enough chunks.

On the other hand it is possibly quite feasible to port an application development between the following platforms without the need for infrastructure variants:

  • Windows PC
  • Linux PC
  • WinCE PDA
  • WinCE Mobile Phone

In addition to portability across platforms, it is desirable to be portable across languages. That is, the sequential code that is plugged into the framework and the generated infrastructure code (if visible) should not be restricted to a particular language but may consist of:

  • C/C++
  • Java
  • C#
  • Visual Basic
  • Fortran
  • Matlab
  • etc.

Efficient Re-use

The ability to re-use existing software is crucial to minimizing application development costs and should be supported by good blueprinting languages.

There are two types of re-use in object-oriented languages. Firstly, the ability to create a definition and instantiate it allows multiple instances to be created from a single definition. A definition can be placed in a library and re-used across projects.

Secondly, object-oriented languages support re-use through inheritance. This allows existing code to be modified and extended to create variants and build components that are similar to existing ones without having to 're-invent the wheel'.

Both types of re-use must be considered as a highly desirable feature for any blueprinting language.


footer for application development page