NetKernel Development: Compose
As a solution developer, the majority of your focus
is on the Compose phase of
development.
Composition consists of the coordination and configuration of resources
and services in order to pull together a software solution.
The loose coupling of resources and code in NetKernel allows rapid development. It also
means that the cost of change is very low so that refactoring becomes a natural part of the
development cycle and maintainability stays high.
Composition
In many ways the composition of dedicated services or functions into higher-order composite solutions is
a well established practice which lies at the heart of Unix system development. NetKernel embraces this
philosophy for scripting and coordinating services.
Think Local
When constructing a composition of services it is valuable to maintain a simple mental model.
Consider what is the service interface that must be presented
upwards to higher-order clients? What services below this location will the solution call as a client?
Answering these two independent questions will yield a simple local solution which can easily managed
and adapted as the system requirements change.
Use the URI address space to Manage Complexity
Complexity should be managed by abstracting a composite scripted solution behind a higher order URI interface -
this is done by tiering services into modules so that a module provides a set of functions at a similar level
of granularity. These compositions can then be treated as black box services by higher order parts of the system.
Risk Mitigation
With NetKernel, you can rapidly compose a solution using
existing resources and services and rely on surrogates
(aka proxies / mocks) for elements that have not yet been constructed.
This early version of the solution can be refined with input
from the users in a very rapid cycle of development and execution.
Because you will be using scripting languages and a loosely
coupled, late-bound development environment, you can
focus on the business logic and defer concerns such
as linking, compiling, etc. either to NetKernel itself
or to a later stage of the development process.