Simple rules and concepts that will improve the efficiency of your software and save you headaches

One great obstacle software development companies must overcome when setting their company standards and practices is the design of their programming architecture. Usually companies will initiate this process by accepting a set of programming standards specific to their needs, and then amend them as they find faults in their implementation. This revision process represents a top-down approach to architecture design.At lifeBLUE we recently performed a major overhaul of our existing standards architecture from a bottom-up perspective with an emphasis on basic programming and software engineering principles. We reviewed all of our previous work and identified the needs and difficulties of our development team, and then associated these needs and difficulties with concepts that helped describe and associate them amongst one another. By doing this we were better able to define simpler and more robust solutions.

In order to assist others who are thinking of creating their own company specific architecture design, I have taken a collection of the notes we used during the research phase of revising our practices and summarized them for more general use. The following shows some of the most important concepts that we identified when designing architecture and popular methods of improving such concepts.

  • Accessibility
    • Describes the degree to which a service or property is available for global use. Thiscan be as minimal as defining read/write access of a property, or can be as pivotal as confining database accesses to a small collection of database classes.
    • Improving accessibility does not necessarily mean making components more accessible,but instead applying proper access permissions to a component or module.
    • Examples
      • Separation of Responsibility
        • Database Tools
        • Logic Implementation Tools
        • Presentation Tools
        • Model View Controller
      • Accessor Methods
        • Get methods provide read permissions
        • Set methods provide write permissions and define writelogic
  • Adaptability
    • Describes the ability of a system to incorporate new or different system componentswithout requiring the software architecture to be redesigned.
    • Increasing adaptability requires loose coupling of system components.
  • Auditability
    • Describes the extent and measure of ease to which a system can be tested forperformance issues and programming errors.
    • Ease of debugging.
    • Ability of clients to easily identify problem areas.
  • Compatibility
    • Describes the degree to which a new system component is functional with existing ornew components.
    • Examples of compatibility
      • Backward Compatibility
      • Forward Compatibility
  • Composability refers to the ability of a system and system components to be assembledin various combinations to satisfy different requirements. The attributes that make components composable are:
    • Modularity refers to independence of a component from other system components.
    • Statelessness refers to the individuality of each use of such a component.
  • Configurability
    • Refers to the measure that a component with system-relative constants can beconfigured.
    • Examples of sections that require configurability
      • Global Project Settings such as database connection strings.
      • Class Settings such as the number of allowed login failures before locking out a user.
  • Correctness is measured by the accuracy of algorithms on a domain of inputs and theirknown outputs.
  • Dependability is a measure of the reliability of a system component. It is measuredby the following attributes:
    • Auditability (see above)
    • Means are ways to increase the dependability of a system.
    • Threats are things that can affect the dependability of a system.
  • Deployability is the measure of ease that a system can be deployed. It is measured bythe following:
    • Flexibility to changing deployment environments (Portability).
    • Minimizes costs of implementing predeployment features required to deploy a system orfeature.
  • Efficiency
    • There are numerous ways and tools to measure the efficiency of a system or systemcomponent, and numerous areas that should be monitored for efficiency.
    • Examples
      • Runtime efficiency
      • Resource efficiency
        • Speed
        • Memory
      • Database efficiency
        • Spurious Tuples
        • Memory allocation
  • Evolvability is a measure of the ability of a component to evolve and improve withoutbreaking existing functionality.
  • Extensibility is measured by the ability of existing component features to be reusedin extending new components.
  • Interoperability is the ability of components in a diverse system to interact witheach other without need of helper or translation methods.
  • Learnability measures the difficulty of learning how to utilize and implement a systemcomponent.
  • Manageability
    • Refers to the ability of a system or system component to manage data instances
    • Examples
      • Adding new instances
      • Editing existing instances
      • Removing or disabling existing instances
  • Modularity
    • Programming concept that describes the extent to which software is composed ofseparate parts, called modules.
    • Modules represent a separation of concerns and enforce logical boundaries betweencomponents.
    • See modules section for more information.
  • Operability
    • Ability to keep a system in an operating, safe, and reliable state
    • Examples
      • System requirements
      • Client specified operational requirements
  • Portability is the ability of a system to be ported from one environment to another.
  • Recoverability
    • Refers to the ability of a system to revert to a stable state when recovery is deemednecessary.
    • Examples of recovery methods
      • Database query reversal
      • Commenting out class modifications
  • Relevance is the measure of how pertinent or applicable a component is with itsintended implementation and internal contents.
  • Repeatability is determined by a one-to-one mapping of inputs to outputs.
  • Scalability is the ability of a system or component to handle larger volumes ofrequests without increasing implementation costs.
  • Seamlessness is the quality of being able to implement a system or system componentwithin other technologies without need of helper or translation methods.
  • Security
    • Measures the protection of sensitive information from being accessed by intruders ornonrelated users
    • Examples of security
      • Encryption of identifier values and login credentials.
      • Hiding user information deemed sensitive from other users.
  • Standardization is the process of defining a set technical standard to be implementedacross different system components.
One final important note: Make your developers aware of your new standards and practices otherwise this whole process is for naught. Giving developers a strong understanding of how things happen at your place of work will empower them and give them the confidence they need to perform at 100%. A poorly informed developer can be the pitfall of an entire project. Your lead developer or project managers (or both) should be provided adequate time to do routine checkups on project code segments as an audit of developer efficiency and pertinence.

Evaluation of practices should be performed regularly. Whenever a lifeBLUE project is completed we take time out to identify the strengths and weaknesses of the project from the perspective of every individual who has worked on the project. By resolving these weaknesses and implementing these strengths into future version of our software core, we slowly but surely eliminate reoccurring development issues. This allows us to focus on the most important piece of work: making a website that strongly and positively represents our client.