latestblueprint toolsetlatest
logo for software-development-blueprinting.com
latestblueprint toolsetlatest
Home
Infrastructure
Engineering
Outsourcing
Applications
Tools
Services
PC Development
Custom Software
Improve Process
Project Management
Contact
leftimage for software-development-blueprinting.com
 

Improving Software Development Practices Through Blueprinting

Software blueprinting is key in improving software development practices, for the same reasons that the blueprinting process has become the cornerstone of mature industries like mechanical engineering.

Blueprinting Motivation

Having produced a blueprint for an aeroplane it is feasible to hand it over to three different mechanical engineering firms from different corners of the world and expect them to produce three aeroplanes of almost identical composition. This is because the unpredictable inspirational thought has been completed before the blueprint is issued and only well-defined procedural activity remains.

The same can not be said of the software industry, which traffics in diagrams and descriptions that require a great deal of programmer interpretation. Indeed, three software companies tasked with developing a software application based on such descriptions would produce quite different solutions.

At present the software industry develops applications from models. This is analogous to going to a builder and asking him to build a house from a plasticine sculpture. The builder would have to adopt the role of architect and undertake the problem solving and requirements analysis that only a fully-fledged architect is qualified to perform just as software engineers do today.

The software industry has struggled along with this approach but the impending challenges of multicore and the concurrency revolution and the continual rise in software complexity demand improving software development practices using the approach of mature industries before us - specialization.

Improving software development practices through effective software blueprinting requires three important components:

  • A language to describe application infrastructure
  • Supporting technology to implement the language
  • Specialization of the architect's role

Language for Infrastructure

In order to produce a software blueprint, it is essential to have a language that is capable of describing the application infrastructure. Electronic engineers have circuit diagrams, mechanical engineers use scale drawings and so on. In the case of software, this language must meet the following constraints:

  • It must operate at a sufficiently high level of abstraction to avoid being unduly tied to contemporary technologies and platforms.
  • It must operate at a sufficiently low level of abstraction to provide the necessary detail to permit fully automatic machine translation.

The Concurrent-class Description Language (CDL) is an example of a software blueprinting language where the level of abstraction is just right.

Supporting Technology

A wonderful property of software is that because its creation does not involve fabrication of physical parts, once a prescriptive blueprint has been produced, the software production is largely automatable. This requires a supporting technology to translate the blueprint into executable code.

The ability for an architect to describe an application at a high-level and have it automatically translated to code is important in improving software development practices because this means that the intentions of the architect and domain expert are directly realized in the delivered code rather than being subject to programmer interpretation.

Typically the application infrastructure is translated by machine. Sequential processing code, which may be expressed in numerous different forms as convenient (e.g. Pseudocode, Flow Chart, State Diagram, Matlab etc.) is translated to code by software engineers.

Role Specialization

There exists a natural specialization in the mature construction industries between the architect and the builder. Blueprinting and the infrastructure-oriented approach prescribes the same division for improving software development practices within the software industry. The most highly-skilled engineers and domain experts become software architects and are primarily responsible for application blueprinting.

The remaining engineers are divided by discipline rather than by domain expertise. Some examples of disciplines are:

  • GUI Expert
  • Device Expert
  • Algorithm Expert

Again, drawing the analogy with the building industry, this is equivalent to specializing as a plasterer, carpet fitter or electrician. If the building industry was divided by domain expertise in the same way as the software industry we would see builders specializing in schools, hospitals or perhaps bedrooms!


footer for software development page